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