This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/52205] SPARC Solaris 2.11 unwind through signal handler fails with -fnon-call-exceptions
- From: "ian at airs dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 12 Feb 2012 04:12:07 +0000
- Subject: [Bug target/52205] SPARC Solaris 2.11 unwind through signal handler fails with -fnon-call-exceptions
- Auto-submitted: auto-generated
- References: <bug-52205-4@http.gcc.gnu.org/bugzilla/>
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