[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/native-comp ff9e40e 15/17: * Add check_comp_unit_relocs
From: |
Andrea Corallo |
Subject: |
feature/native-comp ff9e40e 15/17: * Add check_comp_unit_relocs |
Date: |
Fri, 15 May 2020 15:07:57 -0400 (EDT) |
branch: feature/native-comp
commit ff9e40e9fefacfda9cce38d8884694b1c5207b1c
Author: Andrea Corallo <address@hidden>
Commit: Andrea Corallo <address@hidden>
* Add check_comp_unit_relocs
* src/comp.c (check_comp_unit_relocs): Add function to verify
relocation coherency.
(load_comp_unit): Call it.
---
src/comp.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/src/comp.c b/src/comp.c
index d1f8fe2..dab102c 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -3572,6 +3572,37 @@ load_static_obj (struct Lisp_Native_Comp_Unit *comp_u,
const char *name)
return Fread (make_string (res->data, res->len));
}
+/* Return false when something is wrong or true otherwise. */
+
+static bool
+check_comp_unit_relocs (struct Lisp_Native_Comp_Unit *comp_u)
+{
+ dynlib_handle_ptr handle = comp_u->handle;
+ Lisp_Object *data_relocs = dynlib_sym (handle, DATA_RELOC_SYM);
+ Lisp_Object *data_imp_relocs = dynlib_sym (handle, DATA_RELOC_IMPURE_SYM);
+
+ EMACS_INT d_vec_len = XFIXNUM (Flength (comp_u->data_vec));
+ for (EMACS_INT i = 0; i < d_vec_len; i++)
+ if (!EQ (data_relocs[i], AREF (comp_u->data_vec, i)))
+ return false;
+
+ d_vec_len = XFIXNUM (Flength (comp_u->data_impure_vec));
+ for (EMACS_INT i = 0; i < d_vec_len; i++)
+ {
+ Lisp_Object x = data_imp_relocs[i];
+ if (EQ (x, Qlambda_fixup))
+ return false;
+ else if (SUBR_NATIVE_COMPILEDP (x))
+ {
+ if (NILP (Fgethash (x, comp_u->lambda_gc_guard, Qnil)))
+ return false;
+ }
+ else if (!EQ (data_imp_relocs[i], AREF (comp_u->data_impure_vec, i)))
+ return false;
+ }
+ return true;
+}
+
void
load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
bool late_load)
@@ -3691,6 +3722,8 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u,
bool loading_dump,
data_ephemeral_vec = data_ephemeral_vec;
}
+ eassert (check_comp_unit_relocs (comp_u));
+
return;
}
- feature/native-comp updated (28df049 -> d6f6353), Andrea Corallo, 2020/05/15
- feature/native-comp a335f7e 01/17: Update spill LAP machinery and compile anonymous lambdas, Andrea Corallo, 2020/05/15
- feature/native-comp acf7e12 04/17: * Rename emit_mvar_access -> emit_mvar_lval, Andrea Corallo, 2020/05/15
- feature/native-comp 3ab6a75 02/17: * Indentation fix, Andrea Corallo, 2020/05/15
- feature/native-comp 392a6f9 05/17: * Split emit_const_lisp_obj logic, Andrea Corallo, 2020/05/15
- feature/native-comp 5bf685f 03/17: * Rename emit_mvar_val -> emit_mvar_rval, Andrea Corallo, 2020/05/15
- feature/native-comp 49f0331 09/17: * Render all immediates as comments at comp-debug > 2, Andrea Corallo, 2020/05/15
- feature/native-comp 27b80ae 11/17: * Better Vcomp_sym_subr_c_name_h test function + doc, Andrea Corallo, 2020/05/15
- feature/native-comp 44b0ce6 10/17: Add anonymous lambdas reload mechanism, Andrea Corallo, 2020/05/15
- feature/native-comp e351a12 14/17: Sanity check on lambdas fixups, Andrea Corallo, 2020/05/15
- feature/native-comp ff9e40e 15/17: * Add check_comp_unit_relocs,
Andrea Corallo <=
- feature/native-comp 9a64585 16/17: * Allow for logging async compilation command line, Andrea Corallo, 2020/05/15
- feature/native-comp d6f6353 17/17: * Do not refuse to compile if a dynamic lambda is encountered, Andrea Corallo, 2020/05/15
- feature/native-comp c12831a 06/17: * Rework comp-spill-lap-function, Andrea Corallo, 2020/05/15
- feature/native-comp 2ee2fb5 07/17: * Prune now unnecessary byte-code objects, Andrea Corallo, 2020/05/15
- feature/native-comp 6eb14da 08/17: * Dump log and intemediate GCC IRs only at comp-debug 3, Andrea Corallo, 2020/05/15
- feature/native-comp e5b24b8 12/17: * Native compiler test update, Andrea Corallo, 2020/05/15
- feature/native-comp 2b064c7 13/17: * Fix speed 2 bootstrap, Andrea Corallo, 2020/05/15