Commit 2f7afef5 authored by Paul Eggert's avatar Paul Eggert
Browse files

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.
parent d93ff945
......@@ -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. */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment