[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/native-comp 43b6f05 09/11: Hash eln ABI once and add it to the o
From: |
Andrea Corallo |
Subject: |
feature/native-comp 43b6f05 09/11: Hash eln ABI once and add it to the output compilation path |
Date: |
Wed, 4 Mar 2020 12:08:32 -0500 (EST) |
branch: feature/native-comp
commit 43b6f05dfb46637a414520b27430fbe3b0f005fa
Author: AndreaCorallo <address@hidden>
Commit: Andrea Corallo <address@hidden>
Hash eln ABI once and add it to the output compilation path
---
lisp/emacs-lisp/comp.el | 2 +-
src/comp.c | 29 +++++++++++++++++++++++------
src/comp.h | 4 ++++
src/emacs.c | 5 +++++
src/lread.c | 3 ++-
5 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index a9db8c6..342faa2 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -2125,7 +2125,7 @@ Return the compilation unit file name."
(file-name-as-directory
(concat
(file-name-directory exp-file)
- system-configuration))
+ comp-native-path-postfix))
(file-name-sans-extension
(file-name-nondirectory exp-file))))))))
(comp-log "\n\n" 1)
diff --git a/src/comp.c b/src/comp.c
index 425784b..4940ae5 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -250,8 +250,8 @@ format_string (const char *format, ...)
/* Produce a key hashing Vcomp_subr_list. */
-static Lisp_Object
-hash_subr_list (void)
+void
+hash_native_abi (void)
{
Lisp_Object string = Fmapconcat (intern_c_string ("subr-name"),
Vcomp_subr_list, build_string (" "));
@@ -260,7 +260,17 @@ hash_subr_list (void)
sha512_buffer (SSDATA (string), SCHARS (string), SSDATA (digest));
hexbuf_digest (SSDATA (digest), SDATA (digest), SHA512_DIGEST_SIZE);
- return digest;
+ /* Check runs once. */
+ eassert (Vcomp_abi_hash);
+ Vcomp_abi_hash = digest;
+ /* If 10 characters are usually sufficient for git I guess 16 are
+ fine for us here. */
+ Vcomp_native_path_postfix =
+ concat3 (Vsystem_configuration,
+ make_string ("-", 1),
+ Fsubstring_no_properties (Vcomp_abi_hash,
+ make_fixnum (0),
+ make_fixnum (16)));
}
static void
@@ -1976,8 +1986,9 @@ emit_ctxt_code (void)
fields[n_frelocs++] = xmint_pointer (XCDR (el));
}
- /* Compute and store function link table hash. */
- emit_static_object (LINK_TABLE_HASH_SYM, hash_subr_list ());
+ /* Sign the .eln for the exposed ABI it expects at load. */
+ eassert (!NILP (Vcomp_abi_hash));
+ emit_static_object (LINK_TABLE_HASH_SYM, Vcomp_abi_hash);
Lisp_Object subr_l = Vcomp_subr_list;
FOR_EACH_TAIL (subr_l)
@@ -3430,7 +3441,7 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u,
bool loading_dump)
&& freloc_link_table
&& top_level_run)
|| NILP (Fstring_equal (load_static_obj (comp_u, LINK_TABLE_HASH_SYM),
- hash_subr_list ())))
+ Vcomp_abi_hash)))
xsignal1 (Qnative_lisp_file_inconsistent, comp_u->file);
*current_thread_reloc = ¤t_thread;
@@ -3657,6 +3668,12 @@ syms_of_comp (void)
doc: /* Hash table symbol-function -> function-c-name. For
internal use during */);
Vcomp_sym_subr_c_name_h = CALLN (Fmake_hash_table);
+ DEFVAR_LISP ("comp-abi-hash", Vcomp_abi_hash,
+ doc: /* String signing the ABI exposed to .eln files. */);
+ Vcomp_abi_hash = Qnil;
+ DEFVAR_LISP ("comp-native-path-postfix", Vcomp_native_path_postfix,
+ doc: /* Postifix to be added to the .eln compilation path. */);
+ Vcomp_native_path_postfix = Qnil;
}
#endif /* HAVE_NATIVE_COMP */
diff --git a/src/comp.h b/src/comp.h
index 3aff440..070ec4d 100644
--- a/src/comp.h
+++ b/src/comp.h
@@ -61,8 +61,12 @@ XNATIVE_COMP_UNIT (Lisp_Object a)
}
/* Defined in comp.c. */
+
+extern void hash_native_abi (void);
+
extern void load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u,
bool loading_dump);
extern void syms_of_comp (void);
+
#endif
#endif
diff --git a/src/emacs.c b/src/emacs.c
index da08aeb..b16ffa4 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -1949,6 +1949,11 @@ Using an Emacs configured with --with-x-toolkit=lucid
does not have this problem
keys_of_keyboard ();
keys_of_keymap ();
keys_of_window ();
+
+#ifdef HAVE_NATIVE_COMP
+ /* Must be after the last defsubr has run. */
+ hash_native_abi ();
+#endif
}
else
{
diff --git a/src/lread.c b/src/lread.c
index 6d33bd3..acd2fea 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1068,7 +1068,7 @@ effective_load_path (void)
Lisp_Object el = XCAR (lp);
new_lp =
Fcons (concat2 (Ffile_name_as_directory (el),
- Vsystem_configuration),
+ Vcomp_native_path_postfix),
new_lp);
new_lp = Fcons (el, new_lp);
}
@@ -4427,6 +4427,7 @@ defsubr (union Aligned_Lisp_Subr *aname)
XSETSUBR (tem, sname);
set_symbol_function (sym, tem);
#ifdef HAVE_NATIVE_COMP
+ eassert (NILP (Vcomp_abi_hash));
Vcomp_subr_list = Fpurecopy (Fcons (tem, Vcomp_subr_list));
#endif
}
- feature/native-comp updated (0cef208 -> 6487d4a), Andrea Corallo, 2020/03/04
- feature/native-comp 8788fab 03/11: ; Nit fix in comment, Andrea Corallo, 2020/03/04
- feature/native-comp ce9e3a4 05/11: Introduce 'effective_load_path', Andrea Corallo, 2020/03/04
- feature/native-comp 0da62d9 01/11: Change parameter name into comp--compile-ctxt-to-file, Andrea Corallo, 2020/03/04
- feature/native-comp 2dae7e1 02/11: Add system-configuration in the compilation output path, Andrea Corallo, 2020/03/04
- feature/native-comp d0066e3 04/11: * Keep comp-subr-list into pure space, Andrea Corallo, 2020/03/04
- feature/native-comp bf4f620 06/11: * ; Clean-up out of date comment, Andrea Corallo, 2020/03/04
- feature/native-comp 43b6f05 09/11: Hash eln ABI once and add it to the output compilation path,
Andrea Corallo <=
- feature/native-comp f77f6ca 08/11: Fix org for eln new compilation folder layout, Andrea Corallo, 2020/03/04
- feature/native-comp 1f3ba65 10/11: * Do not crash if the output directory is created in the meanwhile, Andrea Corallo, 2020/03/04
- feature/native-comp 286e21c 07/11: Rework `find-lisp-object-file-name', Andrea Corallo, 2020/03/04
- feature/native-comp 6487d4a 11/11: Merge remote-tracking branch 'savannah/master' into HEAD, Andrea Corallo, 2020/03/04