This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Boehm's GC crashed by adjustment of GC root set
- From: "Laurynas Biveinis" <laurynas dot biveinis at gmail dot com>
- To: "Daniel Berlin" <dberlin at dberlin dot org>, gcc at gcc dot gnu dot org
- Date: Sat, 17 Jun 2006 13:19:41 +0200
- Subject: Boehm's GC crashed by adjustment of GC root set
Hi,
So far I've been debugging GCC bootstrap failures with Boehm's GC, and
now I'm stuck.
I used to register all GC roots at the startup of GCC, including
stringpool roots. That worked fine until first ht_expand() call, which
moves identifier hash table around in the memory and Boehm's GC still
uses its old location as a root segment. Oops. But if I try to remove
the old root segment and register the current one with
GC_remove_roots() and GC_add_roots(), first GC_collect() crashes with
Program received signal SIGSEGV, Segmentation fault.
0x01046191 in GC_mark_from (mark_stack_top=0x22e7b4, mark_stack=0x0,
mark_stack_limit=0x0) at ../../../gcc-boehm-test/boehm-gc/mark.c:759
759 deferred = *limit;
(gdb) bt
#0 0x01046191 in GC_mark_from (mark_stack_top=0x22e7b4, mark_stack=0x0,
mark_stack_limit=0x0) at ../../../gcc-boehm-test/boehm-gc/mark.c:759
#1 0x00000000 in ?? () from
I've verified by GC_dump() call right before collection, that the root
set is correctly adjusted (i.e. pointing to the current hash table
location). I
The collector is compiled with all debugging options I could find:
"--enable-gc-debug --enable-full-debug" CFLAGS="-DKEEP_BACK_PTRS
-DGC_ASSERTIONS -g -O2"
At this point I've run out of ideas, how to proceed. Any clues would
much appreciated.
--
TIA,
Laurynas