Hi, On Tuesday, June 14, 2011 07:59 CEST, Antoine Jacoutot <[email protected]> wrote:
> On Tue, 14 Jun 2011, Sebastian Reitenbach wrote: > > > > > On Tuesday, June 14, 2011 01:26 CEST, Stuart Henderson > > <[email protected]> wrote: > > > > > iirc libexecinfo doesn't exactly work correctly. You could try > > So its of more harm than of use. I guess using the __BUILTIN_HACK for all > > architectures, makes it at least working, but kind of useless ;) > > If this lib is proved useless and/or harmful than I'm all for removing > it from the ports tree. Most applications I ran into that are using it > make it an optionnal dependency. The few ones that do require it can be > patched accordingly. what I'm trying to solve is that when there is no backtrace() available on the system, then gnustep-base tries to roll sth. on its own, where it then just make the application "hang". This is used in the exception handling. I want to port a sudoku generator/game which makes use of exception handling, when generating the sudoku. Letting gnustep-base use its hand-rolled backtrace generation, then it hangs. Then I tried to use backtrace() from libexecinfo, and it crashes. Now Stuart pointed me to the libbacktrace, and also there, it crashes. With libbacktrace, the crash seems to be very similar to the one seen in libexecinfo, crashing when calling __builtin_return_address() with a frame larger than the number of frames available. I don't know whether this is a problem in the gcc __builtin_return_address(), or with gnustep-base calling backtrace. But as far as I can see from the manual of backtrace(), gnustep-base seems to be correct. I tried this sudoku game on Linux, with using backtrace() from glibc, and with using the gnustep-based hand rolled variant to get a backtrace. Both work there, and right now I don't know who is at fault, and what/how to fix it. The thing I got it to work on OpenBSD was a: link against libexecinfo, and use the patch to libexecinfo I sent earlier Today, and b: use the gnustep-based hand rolled version of stack trace generation, but disable it to not generate a backtrace. If I don't find a working solution to get it to work with a backtrace, then I'll probably disable the backtrace generation in gnustep-base, since its not that important feature I think... Sebastian (gdb) r Starting program: /usr/local/bin/Sudoku 2011-06-14 09:15:51.261 Sudoku[24312] Cannot load the main model file 'Sudoku.gorm' 2011-06-14 09:15:52.388 Sudoku[24312] XShm not supported, XShmAttach() failed. 2011-06-14 09:15:52.388 Sudoku[24312] Falling back to normal XImage (will be slower). Program received signal SIGSEGV, Segmentation fault. [Switching to process 24312, thread 0x89dedc00] 0x019efea2 in bt_create_backtrace (buffer=0x88044200, depth=127, flags=1) at backtrace.c:163 163 HANDLE_FRAME(102, i, addr); (gdb) bt #0 0x019efea2 in bt_create_backtrace (buffer=0x88044200, depth=127, flags=1) at backtrace.c:163 #1 0x019f1dec in backtrace (bt=0x88044200, depth=127) at backtrace.c:210 #2 0x0ce88e6d in -[GSStackTrace init] (self=0x83800b28, _cmd=0x2ce651c8) at NSException.m:594 #3 0x0cedd6c2 in +[NSObject new] (self=0x2ce4c100, _cmd=0x2ce4c1a0) at NSObject.m:1159 #4 0x0ce89aec in -[NSException raise] (self=0x83800ac8, _cmd=0x2ce4c200) at NSException.m:960 #5 0x0ce88ce4 in +[NSException raise:format:arguments:] (self=0x2ce4c000, _cmd=0x2ce4c1e8, name=0x3c0060fc, format=0x3c0060f0, argList=0xcfbcd9d0 "0\227%\204h� &\027\003") at NSException.m:849 #6 0x0ce89f63 in +[NSException raise:format:] (self=0x2ce4c000, _cmd=0x3c006098, name=0x3c0060fc, format=0x3c0060f0) at NSException.m:835 #7 0x1c00705d in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:455 #8 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #9 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #10 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #11 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #12 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #13 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #14 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #15 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #16 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #17 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #18 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #19 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #20 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #21 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #22 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #23 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #24 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #25 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #26 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #27 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #28 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #29 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #30 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #31 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #32 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #33 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #34 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #35 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #36 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #37 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #38 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #39 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #40 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #41 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #42 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #43 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #44 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #45 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #46 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #47 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #48 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #49 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #50 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 ---Type <return> to continue, or q <return> to quit--- #51 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #52 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #53 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #54 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #55 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #56 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #57 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #58 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #59 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #60 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #61 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #62 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #63 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #64 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #65 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #66 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #67 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #68 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #69 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #70 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #71 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #72 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #73 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #74 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #75 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #76 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #77 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #78 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #79 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #80 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #81 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #82 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #83 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #84 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #85 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #86 0x1c006f6e in -[Sudoku doFind:] (self=0x81f06008, _cmd=0x3c006078, seen=0x8afaee08) at Sudoku.m:517 #87 0x1c006a68 in -[Sudoku find] (self=0x81f06008, _cmd=0x3c002808) at Sudoku.m:398 #88 0x1c002268 in -[Controller newPuzzle:] (self=0x8b8940c8, _cmd=0x3c008358, sender=0x82919b88) at Controller.m:131 #89 0x022d2009 in -[NSApplication sendAction:to:from:] (self=0x7f6c5608, _cmd=0x2227f5f8, aSelector=0x3c008358, aTarget=0x0, sender=0x82919b88) at NSApplication.m:2259 #90 0x023a8380 in -[NSMenu performActionForItemAtIndex:] (self=0x8286e188, _cmd=0x22282100, index=2) at NSMenu.m:1320 #91 0x023b2d59 in -[NSMenuView _trackWithEvent:] (self=0x895a6808, _cmd=0x22282188, event=0x8734bb08) at NSMenuView.m:1785 #92 0x023b2e3c in -[NSMenuView trackWithEvent:] (self=0x895a6808, _cmd=0x222821d8, event=0x8be94208) at NSMenuView.m:1808 #93 0x023b300b in -[NSMenuView mouseDown:] (self=0x895a6808, _cmd=0x222dbdf0, theEvent=0x8be94208) at NSMenuView.m:1847 #94 0x0249c1e1 in -[NSWindow sendEvent:] (self=0x89eb9208, _cmd=0x22230690, theEvent=0x8be94208) at NSWindow.m:3694 #95 0x022d1aa8 in -[NSApplication sendEvent:] (self=0x7f6c5608, _cmd=0x222305c8, theEvent=0x8be94208) at NSApplication.m:2134 #96 0x022d0223 in -[NSApplication run] (self=0x7f6c5608, _cmd=0x22225d80) at NSApplication.m:1591 #97 0x022add8f in NSApplicationMain (argc=1, argv=0xcfbd6c98) at Functions.m:89 #98 0x1c00a2ed in gnustep_base_user_main (argc=1, argv=0xcfbd6c98, env=0xcfbd6ca0) at main.m:166 #99 0x0cf0df5e in main (argc=1, argv=0xce88e6d, env=0xcedd6c2) at NSProcessInfo.m:979 #100 0x1c001567 in ___start () #101 0x1c0014e7 in _start () ---Type <return> to continue, or q <return> to quit--- #102 0x00000000 in ?? () (gdb) frame 1 #1 0x019f1dec in backtrace (bt=0x88044200, depth=127) at backtrace.c:210 210 return (bt_create_backtrace(bt, depth, BT_GET_DEPTH)); (gdb) list 205 206 /* compatibility functions for libexecinfo and glibc */ 207 int 208 backtrace(void **bt, int depth) 209 { 210 return (bt_create_backtrace(bt, depth, BT_GET_DEPTH)); 211 } 212 213 char ** 214 _backtrace_symbols(void *const *buffer, int depth, int add_cr) (gdb) print depth $1 = 127 (gdb) frame 0 #0 0x019efea2 in bt_create_backtrace (buffer=0x88044200, depth=127, flags=1) at backtrace.c:163 163 HANDLE_FRAME(102, i, addr); (gdb) list 158 HANDLE_FRAME(97, i, addr); 159 HANDLE_FRAME(98, i, addr); 160 HANDLE_FRAME(99, i, addr); 161 HANDLE_FRAME(100, i, addr); 162 HANDLE_FRAME(101, i, addr); 163 HANDLE_FRAME(102, i, addr); 164 HANDLE_FRAME(103, i, addr); 165 HANDLE_FRAME(104, i, addr); 166 HANDLE_FRAME(105, i, addr); 167 HANDLE_FRAME(106, i, addr); (gdb) from backtrace.c: #define HANDLE_FRAME(depth, idx, btaddr) \ case depth: \ if (!__builtin_frame_address(depth + 1)) \ goto done; \ btaddr = __builtin_return_address(depth); \ break; > > -- > Antoine
