[Gc] GC_enable_incremental() fails on FreeBSD
Alex Rønne Petersen
xtzgzorex at gmail.com
Mon Jul 16 12:46:59 PDT 2012
Hello list,
I have the following test case:
#include <gc.h>
int main()
{
GC_enable_incremental();
for (int i = 0; i < 1024; i++)
{
void* mem = GC_malloc(sizeof(size_t) * 4);
GC_gcollect();
}
}
This seems to consistently fail on FreeBSD:
$ ./a.out
Segfault at 0x631f90
Unexpected bus error or segmentation fault
Abort trap: 6 (core dumped)
This happens regardless of whether GC_INIT() is called before
GC_enable_incremental().
GDB says:
(gdb) bt
#0 0x000000080085dbf8 in GC_FreeBSDGetDataStart () from
/usr/local/lib/libgc.so.1
#1 0x000000080085dc69 in GC_register_data_segments () from
/usr/local/lib/libgc.so.1
#2 0x000000080085c815 in GC_init_inner () from /usr/local/lib/libgc.so.1
#3 0x000000080085c965 in GC_enable_incremental () from
/usr/local/lib/libgc.so.1
#4 0x000000000040074d in main ()
I don't have debug info here, so I just read the assembly:
0x000000080085dbf3 <GC_FreeBSDGetDataStart+83>: mov 0x10(%rsp),%rax
0x000000080085dbf8 <GC_FreeBSDGetDataStart+88>: movzbl (%rax),%eax ;
failing here
0x000000080085dbfb <GC_FreeBSDGetDataStart+91>: mov 0x10(%rsp),%rax
0x000000080085dc00 <GC_FreeBSDGetDataStart+96>: add (%rsp),%rax
Which led me to this line:
os_dep.c:1922: *(volatile char *)next_page;
It strikes me as odd, because a fault handler is set up just before
the attempt to read the memory.
Does anyone have a clue what might be breaking here?
FYI:
$ uname -a
FreeBSD fbsd 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30
UTC 2012 root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
amd64
$ gcc -v
Using built-in specs.
Target: amd64-undermydesk-freebsd
Configured with: FreeBSD/amd64 system compiler
Thread model: posix
gcc version 4.2.1 20070831 patched [FreeBSD]
libgc version is 7.1.
Thanks in advance!
Regards,
Alex
More information about the Gc
mailing list