Remove pre-Solaris 11/SPARC unwinding support
* config/sparc/sol2-unwind.h [__arch64__] (sparc64_is_sighandler): Remove Solaris 9 and 10 support. (sparc_is_sighandler): Likewise. From-SVN: r271715
This commit is contained in:
parent
a01d3b0481
commit
e54b1a92ac
|
@ -1,3 +1,9 @@
|
||||||
|
2019-05-28 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): Likewise.
|
||||||
|
|
||||||
2019-05-26 John David Anglin <danglin@gcc.gnu.org>
|
2019-05-26 John David Anglin <danglin@gcc.gnu.org>
|
||||||
|
|
||||||
* config/pa/linux-unwind.h (pa32_fallback_frame_state): Add cast.
|
* config/pa/linux-unwind.h (pa32_fallback_frame_state): Add cast.
|
||||||
|
|
|
@ -67,51 +67,7 @@ sparc64_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
libc.so.1:
|
libc.so.1:
|
||||||
|
|
||||||
<call_user_handler+864>: mov %i1, %o1
|
<call_user_handler+864>: mov %i1, %o1
|
||||||
<call_user_handler+868>: call __sighndlr
|
<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. */
|
|
||||||
*nframes = 3;
|
*nframes = 3;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -184,51 +140,7 @@ sparc_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
libc.so.1:
|
libc.so.1:
|
||||||
|
|
||||||
<call_user_handler+876>: mov %i1, %o1
|
<call_user_handler+876>: mov %i1, %o1
|
||||||
<call_user_handler+880>: call __sighndlr
|
<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. */
|
|
||||||
*nframes = 3;
|
*nframes = 3;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue