Hi Paul, Am 31.10.2012 um 17:31 schrieb Paul Eggert <egg...@cs.ucla.edu>: > Thanks, but I'm afraid that's still not enough information. > I don't know which assertion has failed, or why. > > Perhaps you can single-step through the failed programs? > They shouldn't take long to run.
It looks like that SIGABRT does not call the callback, but crashes the process. > unstable9s% gdb test-sigaction > GNU gdb (GDB) 7.4.1 > Copyright (C) 2012 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 "sparc-sun-solaris2.9". > For bug reporting instructions, please see: > <http://www.gnu.org/software/gdb/bugs/>... > Reading symbols from > /home/dam/mgar/pkg/diffutils/trunk/work/solaris9-sparc/build-isa-sparcv8/diffutils-3.2.37-f0b0/gnulib-tests/test-sigaction...done. > (gdb) b 90 > Breakpoint 1 at 0x110ec: file test-sigaction.c, line 90. > (gdb) r > Starting program: > /home/dam/mgar/pkg/diffutils/trunk/work/solaris9-sparc/build-isa-sparcv8/diffutils-3.2.37-f0b0/gnulib-tests/test-sigaction > > > Breakpoint 1, main () at test-sigaction.c:94 > 94 sa.sa_handler = handler; > (gdb) n > 96 sa.sa_flags = 0; > (gdb) > 97 ASSERT (sigemptyset (&sa.sa_mask) == 0); > (gdb) > 98 ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); > (gdb) > 99 ASSERT (raise (SIGABRT) == 0); > (gdb) stepi > 0x000111c0 99 ASSERT (raise (SIGABRT) == 0); > (gdb) > 0x000219ac in raise@plt () > (gdb) step > Single stepping until exit from function raise@plt, > which has no line number information. > 0xff1a0ae8 in raise () from /usr/lib/libc.so.1 > (gdb) > Single stepping until exit from function raise, > which has no line number information. > 0xff1f081c in _libc_kill () from /usr/lib/libc.so.1 > (gdb) > Single stepping until exit from function _libc_kill, > which has no line number information. > Warning: > Cannot insert breakpoint 0. > Error accessing memory address 0xc: I/O error. > > 0x00000008 in ?? () > (gdb) > Cannot find bounds of current function > (gdb) > Cannot find bounds of current function > (gdb) > Cannot find bounds of current function > (gdb) > Cannot find bounds of current function > (gdb) > Cannot find bounds of current function > (gdb) quit > A debugging session is active. > > Inferior 1 [process 23220] will be killed. > > Quit anyway? (y or n) y > unstable9s% gdb test-sigaction > GNU gdb (GDB) 7.4.1 > Copyright (C) 2012 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 "sparc-sun-solaris2.9". > For bug reporting instructions, please see: > <http://www.gnu.org/software/gdb/bugs/>... > Reading symbols from > /home/dam/mgar/pkg/diffutils/trunk/work/solaris9-sparc/build-isa-sparcv8/diffutils-3.2.37-f0b0/gnulib-tests/test-sigaction...done. > (gdb) b 90 > Breakpoint 1 at 0x110ec: file test-sigaction.c, line 90. > (gdb) step > The program is not being run. > (gdb) r > Starting program: > /home/dam/mgar/pkg/diffutils/trunk/work/solaris9-sparc/build-isa-sparcv8/diffutils-3.2.37-f0b0/gnulib-tests/test-sigaction > > > Breakpoint 1, main () at test-sigaction.c:94 > 94 sa.sa_handler = handler; > (gdb) step > 96 sa.sa_flags = 0; > (gdb) > 97 ASSERT (sigemptyset (&sa.sa_mask) == 0); > (gdb) > 98 ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); > (gdb) > 99 ASSERT (raise (SIGABRT) == 0); > (gdb) > > Program received signal SIGABRT, Aborted. > 0xff3dc738 in ?? () > (gdb) > Cannot find bounds of current function > > unstable9s% gdb test-sigaction > GNU gdb (GDB) 7.4.1 > Copyright (C) 2012 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 "sparc-sun-solaris2.9". > For bug reporting instructions, please see: > <http://www.gnu.org/software/gdb/bugs/>... > Reading symbols from > /home/dam/mgar/pkg/diffutils/trunk/work/solaris9-sparc/build-isa-sparcv8/diffutils-3.2.37-f0b0/gnulib-tests/test-sigaction...done. > (gdb) l 60 > 55 > 56 /* This test is unsafe in the presence of an asynchronous SIGABRT, > 57 because we install a signal-handler that is intentionally not > 58 async-safe. Hopefully, this does not lead to too many reports of > 59 false failures, since people don't generally use 'kill -s SIGABRT' > 60 to end a runaway program. */ > 61 > 62 static void > 63 handler (int sig) > 64 { > (gdb) b 63 > Breakpoint 1 at 0x10e20: file test-sigaction.c, line 63. > (gdb) run > Starting program: > /home/dam/mgar/pkg/diffutils/trunk/work/solaris9-sparc/build-isa-sparcv8/diffutils-3.2.37-f0b0/gnulib-tests/test-sigaction > > > Program received signal SIGABRT, Aborted. > 0xff3dc738 in ?? () On test-raise.c for some obscure reason SIG_ERR is ( void ( * ) ( ) ) 0 which then fails the assert as "0" usually means no error. This is because "lint" is defined: > ../config.log:#define lint 1 and hence in /usr/include/sys/iso/signal_iso.h this breaks: > #elif defined(lint) > > #define SIG_DFL (void(*)())0 > #define SIG_ERR (void(*)())0 > #define SIG_IGN (void (*)())0 > #define SIG_HOLD (void(*)())0 > > #else > > #define SIG_DFL (void(*)())0 > #define SIG_ERR (void(*)())-1 > #define SIG_IGN (void (*)())1 > #define SIG_HOLD (void(*)())2 > > #endif Undefining "lint" in lib/config.h makes this test pass immediately. Hopefully this helps. Best regards -- Dago -- "You don't become great by trying to be great, you become great by wanting to do something, and then doing it so hard that you become great in the process." - xkcd #896