]> git.eshelyaron.com Git - emacs.git/commitdiff
Sanity check on lambdas fixups
authorAndrea Corallo <akrl@sdf.org>
Wed, 13 May 2020 07:52:47 +0000 (08:52 +0100)
committerAndrea Corallo <akrl@sdf.org>
Fri, 15 May 2020 19:06:49 +0000 (20:06 +0100)
* src/pdumper.c (dump_do_dump_relocation): While fixing up lambda
relocation verify placeholder coherency.

* src/comp.c (syms_of_comp): Define symbol 'lambda-fixup'.

* lisp/emacs-lisp/comp.el (comp-finalize-container): Leave a
lambda-fixup as placeholder in the relocation as a sanity check.

lisp/emacs-lisp/comp.el
src/comp.c
src/pdumper.c

index d546218940bec7bdbcc14a3afb6cf33cac6ead01..7de8e0177c1f1214c7e36d4db17ecac29414f462 100644 (file)
@@ -2158,7 +2158,7 @@ These are substituted with a normal 'set' op."
                  ;; from the corresponding m-var.
                  collect (if (gethash obj
                                       (comp-ctxt-byte-func-to-func-h comp-ctxt))
-                             nil
+                             'lambda-fixup
                            obj))))
 
 (defun comp-finalize-relocs ()
index 3a362fd0957ec211897d2ee9297a3c485abea136..d1f8fe23f0da53871886d6dae7cba6fbc8ea2189 100644 (file)
@@ -3891,6 +3891,7 @@ syms_of_comp (void)
   DEFSYM (Qfixnum, "fixnum");
   DEFSYM (Qscratch, "scratch");
   DEFSYM (Qlate, "late");
+  DEFSYM (Qlambda_fixup, "lambda-fixup");
 
   /* To be signaled by the compiler.  */
   DEFSYM (Qnative_compiler_error, "native-compiler-error");
index a1b71e87ac6d108157463a8c5517cdf7af003f79..a6d12b6ea0c2ae78210df13e9005270df1eb6745 100644 (file)
@@ -5342,11 +5342,14 @@ dump_do_dump_relocation (const uintptr_t dump_base,
        if (!NILP (lambda_data_idx))
          {
            /* This is an anonymous lambda.
-              We must fixup data_vec so the lambda can be referenced
+              We must fixup d_reloc_imp so the lambda can be referenced
               by code.  */
            Lisp_Object tem;
            XSETSUBR (tem, subr);
-           comp_u->data_imp_relocs[XFIXNUM (lambda_data_idx)] = tem;
+           Lisp_Object *fixup =
+             &(comp_u->data_imp_relocs[XFIXNUM (lambda_data_idx)]);
+           eassert (EQ (*fixup, Qlambda_fixup));
+           *fixup = tem;
            Fputhash (tem, Qnil, comp_u->lambda_gc_guard);
          }
        break;