This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Remove pre-Solaris 11/SPARC unwinding support
- From: Rainer Orth <ro at CeBiTec dot Uni-Bielefeld dot DE>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Eric Botcazou <ebotcazou at adacore dot com>
- Date: Mon, 27 May 2019 13:24:52 +0200
- Subject: Remove pre-Solaris 11/SPARC unwinding support
One of the last remnants of Solaris 10 (and 9)/SPARC support is the
libgcc unwinder.
To get rid of unused cruft, I've taken a full clone of the Solaris 11
support repository, checked out every since version of 32 and 64-bit
libc.so.1 and checked if the patters looked for in sol2-unwind.h are
present.
* As expected, the 64-bit __sighndlr pattern is present everywhere, as
is the Solaris 11 cuh_pattern. However, neither the Solaris 10
cuh_pattern nor the Solaris 9 one can be found, while both are present
in the respective versions of libc/libthread.
* In the 32-bit case, __sighndlr is identical everywhere again, and the
Solaris 11 cuh_pattern is found in most versions of libc. Unlike the
64-bit case, the Solaris 10 cuh_pattern is also found in the Solaris
11 Express (snv_151) versions of libc. While this in itself doesn't
matter (I won't be supporting a 9-year old beta version of Solaris 11
these days), it might be that this is still present in OpenSolaris
derivatives since snv_147 was the last open version. So I checked
Tribblix m20.6, the only known Illumos derivative with SPARC support.
However, when I looked at 32-bit libc from Tribblix m20.6, I found
none of the patterns in sol2-unwind.h (neither any of the 64-bit ones
in the 64-bit libc). I have to assume that Peter Tribble switched to
using gcc for his builds.
So all pre-Solaris 11 patterns can go since there's no way that they can
be found on a Solaris 11 system: there's no static libc.a anymore since
Solaris 10 and the system-call interface between libc and kernel changed
so much in Solaris 11 that a local copy of Solaris 10 libc.so.1 wouldn't
work at all on Solaris 11.
Bootstrapped without regressions on sparc-sun-solaris2.11 (Solaris 11.3,
11.4, and 11.5). I'm going to install the patch in a day or two unless
someone finds fault with my reasoning.
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
2019-05-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config/sparc/sol2-unwind.h [__arch64__] (sparc64_is_sighandler):
Remove Solaris 9 and 10 support.
(sparc_is_sighandler): Remove Solaris 9 and 10 support.
# HG changeset patch
# Parent a471ac842743a60d92dc3c029ee68c655bb00142
Remove pre-Solaris 11/SPARC unwinding support
diff --git a/libgcc/config/sparc/sol2-unwind.h b/libgcc/config/sparc/sol2-unwind.h
--- a/libgcc/config/sparc/sol2-unwind.h
+++ b/libgcc/config/sparc/sol2-unwind.h
@@ -67,51 +67,7 @@ sparc64_is_sighandler (unsigned int *pc,
libc.so.1:
<call_user_handler+864>: mov %i1, %o1
- <call_user_handler+868>: call __sighndlr
-
- This is the same setup as for Solaris 10, see below. */
- *nframes = 3;
-
- else if (cuh_pattern == 0xd25fa7ef)
- {
- /* This matches the call_user_handler pattern in Solaris 10
- libc.so.1:
-
- <call_user_handler+988>: ldx [ %fp + 0x7ef ], %o1
- <call_user_handler+992>: call __sighndlr
-
- There are 2 cases so we look for the return address of the
- caller's caller frame in order to do more pattern matching. */
- unsigned long sah_address = *(unsigned long *)(cfa + 176 + 15*8);
-
- if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019)
- /* We need to move up three frames:
-
- <signal handler> <-- context->cfa
- __sighndlr
- call_user_handler
- sigacthandler
- <kernel> */
- *nframes = 3;
- else
- /* The sigacthandler frame isn't present in the chain.
- We need to move up two frames:
-
- <signal handler> <-- context->cfa
- __sighndlr
- call_user_handler
- <kernel> */
- *nframes = 2;
- }
-
- else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x9410001b)
- /* This matches the call_user_handler pattern in Solaris 9
- libthread.so.1:
-
- <call_user_handler+600>: mov %i2, %o2
- <call_user_handler+604>: call __sighndlr
-
- This is the same setup as for Solaris 10, see above. */
+ <call_user_handler+868>: call __sighndlr */
*nframes = 3;
return 1;
@@ -184,51 +140,7 @@ sparc_is_sighandler (unsigned int *pc, v
libc.so.1:
<call_user_handler+876>: mov %i1, %o1
- <call_user_handler+880>: call __sighndlr
-
- This is the same setup as for Solaris 10, see below. */
- *nframes = 3;
-
- else if (cuh_pattern == 0xd407a04c)
- {
- /* This matches the call_user_handler pattern in Solaris 10
- libc.so.1:
-
- <call_user_handler+948>: ld [ %fp + 0x4c ], %o2
- <call_user_handler+952>: call __sighndlr
-
- There are 2 cases so we look for the return address of the
- caller's caller frame in order to do more pattern matching. */
- unsigned int sah_address = *(unsigned int *)(cfa + 96 + 15*4);
-
- if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019)
- /* We need to move up three frames:
-
- <signal handler> <-- context->cfa
- __sighndlr
- call_user_handler
- sigacthandler
- <kernel> */
- *nframes = 3;
- else
- /* The sigacthandler frame isn't present in the chain.
- We need to move up two frames:
-
- <signal handler> <-- context->cfa
- __sighndlr
- call_user_handler
- <kernel> */
- *nframes = 2;
- }
-
- else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x9410001b)
- /* This matches the call_user_handler pattern in Solaris 9
- libthread.so.1:
-
- <call_user_handler+560>: mov %i2, %o2
- <call_user_handler+564>: call __sighndlr
-
- This is the same setup as for Solaris 10, see above. */
+ <call_user_handler+880>: call __sighndlr */
*nframes = 3;
return 1;