Hi,
I'm trying to chase a hanger I observe in gnustep based programs. The hang is
related to exception handling in gnustep. When an exception is raised, a
backtrace is created. When backtrace() is not available, gnustep-base tries to
create one on its own, and while there it hangs, where I did not yet figured
out, what the actual problem is. However, I was pointed to libexecinfo, which
also provides backtrace(). So I tweaked gnustep-base a bit to detect and link
against libexecinfo.
However, now the programs crash in libexecinfo. The backtrace looks like sth.
like this:
Program received signal SIGSEGV, Segmentation fault.
[Switching to process 15312, thread 0x87c35800]
0x0d95e0f1 in getreturnaddr (level=103) at stacktraverse.c:116
116 case 103: return __builtin_return_address(104);
(gdb) bt
#0 0x0d95e0f1 in getreturnaddr (level=104) at stacktraverse.c:116
#1 0x0d95aa85 in backtrace (buffer=0x7cc42e00, size=127) at execinfo.c:60
#2 0x00ea5b77 in -[GSStackTrace init] (self=0x81fda7e8, _cmd=0x20e875a8) at
NSException.m:594
#3 0x00ef9b58 in +[NSObject new] (self=0x20e6e300, _cmd=0x20e6e3a0) at
NSObject.m:1159
#4 0x00ea6c7f in -[NSException raise] (self=0x81fda0a8, _cmd=0x20e6e400) at
NSException.m:960
#5 0x00ea6341 in +[NSException raise:format:arguments:] (self=0x20e6e200,
_cmd=0x20e6e3e8, name=0x3c005fe8, format=0x3c005ff4, argList=0xcfbd27e0 "") at
NSException.m:849
#6 0x00ea6279 in +[NSException raise:format:] (self=0x20e6e200,
_cmd=0x3c006648, name=0x3c005fe8, format=0x3c005ff4) at NSException.m:835
#7 0x1c00747b in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628,
seen=0x84c57b88) at Sudoku.m:418
#8 0x1c0078b5 in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628,
seen=0x84c57b88) at Sudoku.m:487
...
#86 0x1c0078b5 in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628,
seen=0x84c57b88) at Sudoku.m:487
#87 0x1c0078b5 in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628,
seen=0x84c57b88) at Sudoku.m:487
#88 0x1c0078b5 in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628,
seen=0x84c57b88) at Sudoku.m:487
#89 0x1c00726a in -[Sudoku find] (self=0x89023008, _cmd=0x3c002468) at
Sudoku.m:371
#90 0x1c001dfe in -[Controller newPuzzle:] (self=0x7f69c4e8, _cmd=0x3c0089f8,
sender=0x87c01f08) at Controller.m:102
#91 0x03fa3009 in -[NSApplication sendAction:to:from:] (self=0x7f2c3688,
_cmd=0x23f505f8, aSelector=0x3c0089f8, aTarget=0x0, sender=0x87c01f08) at
NSApplication.m:2259
#92 0x04079380 in -[NSMenu performActionForItemAtIndex:] (self=0x87c01a88,
_cmd=0x23f53100, index=2) at NSMenu.m:1320
#93 0x04083d59 in -[NSMenuView _trackWithEvent:] (self=0x7edfb108,
_cmd=0x23f53188, event=0x874c6788) at NSMenuView.m:1785
#94 0x04083e3c in -[NSMenuView trackWithEvent:] (self=0x7edfb108,
_cmd=0x23f531d8, event=0x874c6f08) at NSMenuView.m:1808
#95 0x0408400b in -[NSMenuView mouseDown:] (self=0x7edfb108, _cmd=0x23facdf0,
theEvent=0x874c6f08) at NSMenuView.m:1847
#96 0x0416d1e1 in -[NSWindow sendEvent:] (self=0x7e088808, _cmd=0x23f01690,
theEvent=0x874c6f08) at NSWindow.m:3694
#97 0x03fa2aa8 in -[NSApplication sendEvent:] (self=0x7f2c3688,
_cmd=0x23f015c8, theEvent=0x874c6f08) at NSApplication.m:2134
#98 0x03fa1223 in -[NSApplication run] (self=0x7f2c3688, _cmd=0x23ef6d80) at
NSApplication.m:1591
#99 0x03f7ed8f in NSApplicationMain (argc=1, argv=0xcfbdc36c) at Functions.m:89
#100 0x1c00bac0 in gnustep_base_user_main (argc=1, argv=0xcfbdc36c,
env=0xcfbdc374) at main.m:168
#101 0x00f23c3c in main (argc=1, argv=0xcfbdc36c, env=0xcfbdc374) at
NSProcessInfo.m:979
#102 0x1c001507 in ___start ()
#103 0x1c001487 in _start ()
#104 0x00000000 in ?? ()
(gdb) frame 0
#0 0x0d95e0f1 in getframeaddr (level=104) at stacktraverse.c:262
262 case 104: return __builtin_frame_address(105);
(gdb) frame 1
#1 0x0d95aa85 in backtrace (buffer=0x7cc42e00, size=127) at execinfo.c:60
60 for (i = 1; getframeaddr(i + 1) != NULL && i != size + 1; i++) {
(gdb) list
56 backtrace(void **buffer, int size)
57 {
58 int i;
59
60 for (i = 1; getframeaddr(i + 1) != NULL && i != size + 1; i++) {
61 buffer[i - 1] = getreturnaddr(i);
62 if (buffer[i - 1] == NULL)
63 break;
64 }
65
This happens for me on i386, with a snapshot from beginning last week.
So wondering why this is crashing for me in __builtin_frame_address()
Sebastian