1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-07 20:30:32 -08:00

Fix pdumper-related GC bug

* src/alloc.c (mark_maybe_pointer): Also mark pointers
to pdumper objects, even when the pointers are tagged.
Add a FIXME saying why this isn’t enough.
This commit is contained in:
Paul Eggert 2021-07-11 00:27:43 -07:00
parent d93ff9459f
commit 2f7afef5ff

View file

@ -4755,6 +4755,17 @@ mark_maybe_pointer (void *p)
definitely _don't_ have an object. */
if (pdumper_object_p (p))
{
/* FIXME: This code assumes that every reachable pdumper object
is addressed either by a pointer to the object start, or by
the same pointer with an LSB-style tag. This assumption
fails if a pdumper object is reachable only via machine
addresses of non-initial object components. Although such
addressing is rare in machine code generated by C compilers
from Emacs source code, it can occur in some cases. To fix
this problem, the pdumper code should grok non-initial
addresses, as the non-pdumper code does. */
uintptr_t mask = VALMASK;
p = (void *) ((uintptr_t) p & mask);
/* Don't use pdumper_object_p_precise here! It doesn't check the
tag bits. OBJ here might be complete garbage, so we need to
verify both the pointer and the tag. */