Here's something different to try: In "src/racket/gc2/sighand.c", change to initialize_signal_handler() to set `gc->generations_available = 0' and return install of installing signal handlers. That should disable generational GC and the associated write barrier.
At Thu, 30 Aug 2012 13:39:52 +0100 (BST), Jan Wedekind wrote: > On Sat, 25 Aug 2012, Matthew Flatt wrote: > > At Sat, 25 Aug 2012 20:04:45 +0100 (BST), Jan Wedekind wrote: > >> I tried to debug > >> However then the > >> program reports the following segmentation fault instead: > >> > >> Program received signal SIGSEGV, Segmentation fault. > >> 0x00282540 in scheme_gmp_tls_unload (s=0x4031cedc, data=0x0) at > >> ./gmp/gmp.c:5813 > >> 5813 s[0] = 0; > >> (gdb) l > >> 5808 void scheme_gmp_tls_unload(intptr_t *s, void *data) > >> [...] > >> > >> According to [2] this is a GC write barrier and one needs to ignore > >> semgentation faults as follows > >> > >> (gdb) handle SIGSEGV nostop noprint > > > > Yes. > > > >> But in that case it is not possible to debug the initial segmentation fault > >> though. > > > > Does it work to set a breakpoint on abort()? > > > > (gdb) br abort > > > > > Thanks. That seems to ignore the GC write barrier related signals. > Unfortunately there is no debug information for the stack frame > (0xffff050c) of the current crash: > > jan@wedemob:~$ > ~/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin > /arm-linux-androideabi-gdb > GNU gdb (GDB) 7.3.1-gg2 > Copyright (C) 2011 Free Software Foundation, Inc. > License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. Type "show copying" > and "show warranty" for details. > This GDB was configured as "--host=x86_64-linux-gnu > --target=arm-linux-android". > For bug reporting instructions, please see: > <http://www.gnu.org/software/gdb/bugs/>. > (gdb) target remote 192.168.0.3:1234 > Remote debugging using 192.168.0.3:1234 > 0xb0001000 in ?? () > (gdb) file /home/jan/build/cross/racket-5.3.0/src/racket/racket3m > A program is being debugged already. > Are you sure you want to change the file? (y or n) y > Reading symbols from > /home/jan/build/cross/racket-5.3.0/src/racket/racket3m...done. > (gdb) cont > Continuing. > Cannot access memory at address 0x0 > > Program received signal SIGSEGV, Segmentation fault. > 0x00282540 in scheme_gmp_tls_unload (s=0x4031cedc, data=0x0) at > ./gmp/gmp.c:5813 > 5813 s[0] = 0; > (gdb) up > #1 0x0024b390 in done_with_GC () at xsrc/thread.c:8739 > 8739 scheme_gmp_tls_unload (scheme_current_thread -> gmp_tls , > scheme_current_thread -> gmp_tls_data ) ; > (gdb) handle SIGSEGV nostop noprint > Signal Stop Print Pass to program Description > SIGSEGV No No Yes Segmentation fault > (gdb) br abort > Breakpoint 1 at 0x22658 > (gdb) cont > Continuing. > > Breakpoint 1, 0x00022658 in abort () > (gdb) up > #1 0x0028ce30 in fault_handler (sn=11, si=0x3437a8, ctx=0x343828) at > ./sighand.c:99 > 99 abort(); > (gdb) > #2 0xffff050c in ?? () > (gdb) > #3 0xffff050c in ?? () > (gdb) > Initial frame selected; you cannot go up. > (gdb) cont > Continuing. > > Breakpoint 1, 0x00022658 in abort () > (gdb) up > #1 0x0028ce30 in fault_handler (sn=11, si=0x3433f0, ctx=0x343470) at > ./sighand.c:99 > 99 abort(); > (gdb) > #2 0xffff050c in ?? () > (gdb) > #3 0xffff050c in ?? () > (gdb) > Initial frame selected; you cannot go up. > (gdb) cont > Continuing. > > Breakpoint 1, 0x00022658 in abort () > (gdb) up > #1 0x0028ce30 in fault_handler (sn=11, si=0x343038, ctx=0x3430b8) at > ./sighand.c:99 > 99 abort(); > (gdb) > #2 0xffff050c in ?? () > (gdb) > #3 0xffff050c in ?? () > (gdb) > Initial frame selected; you cannot go up. > (gdb) > > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev _________________________ Racket Developers list: http://lists.racket-lang.org/dev