* Remove pre-Solaris 11/SPARC unwinding support
@ 2019-05-27 11:34 Rainer Orth
0 siblings, 0 replies; only message in thread
From: Rainer Orth @ 2019-05-27 11:34 UTC (permalink / raw)
To: gcc-patches; +Cc: Eric Botcazou
[-- Attachment #1: Type: text/plain, Size: 2246 bytes --]
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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sol10sparc-libgcc-unwind-remove.patch --]
[-- Type: text/x-patch, Size: 3475 bytes --]
# 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;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2019-05-27 11:25 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-27 11:34 Remove pre-Solaris 11/SPARC unwinding support Rainer Orth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).