http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52205
Ian Lance Taylor <ian at airs dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Last reconfirmed| |2012-02-12 Resolution|DUPLICATE | Ever Confirmed|0 |1 --- Comment #3 from Ian Lance Taylor <ian at airs dot com> 2012-02-12 04:12:07 UTC --- I'm using a system Rainer gave me access to. It's sparc-sun-solaris2.11. uname -a reports SunOS mayon 5.11 11.0 sun4v sparc SUNW,SPARC-Enterprise-T5220 Solaris readelf -V /lib/libc.so.1 shows that the highest version is SUNW_1.22.7. Using mainline as of a couple of February 8, 2012 or so. Looking at libgcc/config/sparc/sol2-unwind.h. This case matches: if(/* Solaris 8+ - multi-threaded ---------------------------- <__sighndlr>: save %sp, -96, %sp <__sighndlr+4>: mov %i0, %o0 <__sighndlr+8>: mov %i1, %o1 <__sighndlr+12>: call %i3 <__sighndlr+16>: mov %i2, %o2 <__sighndlr+20>: ret <--- PC <__sighndlr+24>: restore */ pc[-5] == 0x9de3bfa0 && pc[-4] == 0x90100018 && pc[-3] == 0x92100019 && pc[-2] == 0x9fc6c000 && pc[-1] == 0x9410001a && pc[ 0] == 0x81c7e008 && pc[ 1] == 0x81e80000) In that condition, cuh_pattern is set to 0x92100019. This doesn't match any of the choices in the code, so it returns 1 with *nframes = 2. In order to work correctly, it needs to return with *nframes = 3. cuh_pattern is an instruction loaded from some code. That code looks like this: 0xff298f48 <call_user_handler+876>: mov %i1, %o1 0xff298f4c <call_user_handler+880>: call 0xff2a552c <__sighndlr> 0xff298f50 <call_user_handler+884>: mov %i5, %o2 0xff298f54 <call_user_handler+888>: ld [ %fp + 0x4c ], %i5 0xff298f58 <call_user_handler+892>: ld [ %fp + 0x44 ], %g5