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





Reply via email to