From 0fc2fc9a4de3855cf14b6e1f548795831099981b Mon Sep 17 00:00:00 2001 From: Po Lu Date: Thu, 17 Apr 2025 09:33:06 +0800 Subject: [PATCH] Prevent unrelocated symbols with position from being dumped * 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. --- src/pdumper.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pdumper.c b/src/pdumper.c index 1deb8473956..5cd84995226 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