]> git.eshelyaron.com Git - emacs.git/commitdiff
* Revert "Remove check_comp_unit_relocs"
authorAndrea Corallo <acorallo@gnu.org>
Wed, 18 Dec 2024 20:27:14 +0000 (21:27 +0100)
committerEshel Yaron <me@eshelyaron.com>
Mon, 3 Feb 2025 11:07:35 +0000 (12:07 +0100)
This reverts commit 81fc23b5d6a60ca4f3d269ab2c88eb9a850bac4c as the
check is still useful but needs to be updated for the new reloc layout.

* src/comp.c (check_comp_unit_relocs): Re-add.
(load_comp_unit): Make use of.

(cherry picked from commit 4e11f9c96df98dd3f10c1153bc49209f2383a0ee)

src/comp.c

index 8b2446c3ef11f35c931405824c1ac9469f0b5a77..6f67d60cc26e8d4ccfd6af188e08f8d32f12dcf6 100644 (file)
@@ -5144,6 +5144,32 @@ load_static_obj (struct Lisp_Native_Comp_Unit *comp_u, const char *name)
 
 }
 
+/* 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);
+
+  EMACS_INT d_vec_len = XFIXNUM (Flength (comp_u->data_vec));
+
+  for (ptrdiff_t i = 0; i < d_vec_len; i++)
+    {
+      Lisp_Object x = data_relocs[i];
+      if (EQ (x, Qlambda_fixup))
+       return false;
+      else if (NATIVE_COMP_FUNCTIONP (x))
+       {
+         if (NILP (Fgethash (x, comp_u->lambda_gc_guard_h, Qnil)))
+           return false;
+       }
+      else if (!EQ (x, AREF (comp_u->data_vec, i)))
+       return false;
+    }
+  return true;
+}
+
 static void
 unset_cu_load_ongoing (Lisp_Object comp_u)
 {
@@ -5273,6 +5299,7 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
       /* Make sure data_ephemeral_vec still exists after top_level_run has run.
         Guard against sibling call optimization (or any other).  */
       data_ephemeral_vec = data_ephemeral_vec;
+      eassert (check_comp_unit_relocs (comp_u));
     }
 
   if (!recursive_load)