summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPo Lu <[email protected]>2025-04-17 09:33:06 +0800
committerPo Lu <[email protected]>2025-04-17 09:33:38 +0800
commit0fc2fc9a4de3855cf14b6e1f548795831099981b (patch)
treef05d4c084f127e510d36bda55e6f79b68a97d4e5
parentc0cb59578b5aeb75b4856dda518d80cd015caa7d (diff)
downloademacs-master.tar.gz
Prevent unrelocated symbols with position from being dumpedHEADmaster
* src/pdumper.c (dump_builtin_symbol_p): Test BARE_SYMBOL_P \(object) rather than SYMBOLP to avoid depending on the value of symbols_with_pos_enabled or depositing non-relocated references to vectorlikes in the dump file. Clarify commentary.
-rw-r--r--src/pdumper.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/pdumper.c b/src/pdumper.c
index 1deb847..5cd8499 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -727,12 +727,18 @@ emacs_offset (const void *emacs_ptr)
return ptrdiff_t_to_dump_off (emacs_ptr_relative);
}
-/* Return whether OBJECT is a symbol the storage of which is built
- into Emacs (and so is invariant across ASLR). */
+/* Return whether OBJECT is a symbol the storage of which is built into
+ Emacs (and hence is implicitly offset from an address in the Emacs
+ image). */
+
static bool
dump_builtin_symbol_p (Lisp_Object object)
{
- return SYMBOLP (object) && c_symbol_p (XSYMBOL (object));
+ /* Symbols with position cannot be dumped, but not returning true for
+ them avoids producing references to unrelocated Lisp_Objects in
+ fixup processing or depending on the value of
+ symbols_with_pos_enabled. */
+ return BARE_SYMBOL_P (object) && c_symbol_p (XSYMBOL (object));
}
/* Return whether OBJECT has the same bit pattern in all Emacs