mirror of git://gcc.gnu.org/git/gcc.git
re PR target/51921 (EH unwinding support is broken)
PR target/51921 PR target/52205 * config/sparc/sol2-unwind.h (sparc64_is_sighandler): Add support for Solaris 11 and slightly reformat. (sparc_is_sighandler): Likewise. From-SVN: r184255
This commit is contained in:
parent
7f3dee0e1c
commit
0f952eb4cc
|
@ -1,3 +1,11 @@
|
||||||
|
2012-02-15 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
PR target/51921
|
||||||
|
PR target/52205
|
||||||
|
* config/sparc/sol2-unwind.h (sparc64_is_sighandler): Add support for
|
||||||
|
Solaris 11 and slightly reformat.
|
||||||
|
(sparc_is_sighandler): Likewise.
|
||||||
|
|
||||||
2012-02-14 Walter Lee <walt@tilera.com>
|
2012-02-14 Walter Lee <walt@tilera.com>
|
||||||
|
|
||||||
* config.host: Handle tilegx and tilepro.
|
* config.host: Handle tilegx and tilepro.
|
||||||
|
|
|
@ -119,7 +119,12 @@ sparc64_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
unsigned int cuh_pattern
|
unsigned int cuh_pattern
|
||||||
= *(unsigned int *)(*(unsigned long *)(cfa + 15*8) - 4);
|
= *(unsigned int *)(*(unsigned long *)(cfa + 15*8) - 4);
|
||||||
|
|
||||||
if (cuh_pattern == 0xd25fa7ef)
|
if (cuh_pattern == 0x92100019)
|
||||||
|
/* This matches the call_user_handler pattern for Solaris 11.
|
||||||
|
This is the same setup as for Solaris 9, see below. */
|
||||||
|
*nframes = 3;
|
||||||
|
|
||||||
|
else if (cuh_pattern == 0xd25fa7ef)
|
||||||
{
|
{
|
||||||
/* This matches the call_user_handler pattern for Solaris 10.
|
/* This matches the call_user_handler pattern for Solaris 10.
|
||||||
There are 2 cases so we look for the return address of the
|
There are 2 cases so we look for the return address of the
|
||||||
|
@ -140,6 +145,7 @@ sparc64_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
*/
|
*/
|
||||||
*nframes = 2;
|
*nframes = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x94100013)
|
else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x94100013)
|
||||||
/* This matches the call_user_handler pattern for Solaris 9 and
|
/* This matches the call_user_handler pattern for Solaris 9 and
|
||||||
for Solaris 8 running inside Solaris Containers respectively
|
for Solaris 8 running inside Solaris Containers respectively
|
||||||
|
@ -152,7 +158,8 @@ sparc64_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
<kernel>
|
<kernel>
|
||||||
*/
|
*/
|
||||||
*nframes = 3;
|
*nframes = 3;
|
||||||
else
|
|
||||||
|
else /* cuh_pattern == 0xe0272010 */
|
||||||
/* This is the default Solaris 8 case.
|
/* This is the default Solaris 8 case.
|
||||||
We need to move up two frames:
|
We need to move up two frames:
|
||||||
|
|
||||||
|
@ -162,6 +169,7 @@ sparc64_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
<kernel>
|
<kernel>
|
||||||
*/
|
*/
|
||||||
*nframes = 2;
|
*nframes = 2;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,7 +304,12 @@ sparc_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
unsigned int cuh_pattern
|
unsigned int cuh_pattern
|
||||||
= *(unsigned int *)(*(unsigned int *)(cfa + 15*4) - 4);
|
= *(unsigned int *)(*(unsigned int *)(cfa + 15*4) - 4);
|
||||||
|
|
||||||
if (cuh_pattern == 0xd407a04c)
|
if (cuh_pattern == 0x92100019)
|
||||||
|
/* This matches the call_user_handler pattern for Solaris 11.
|
||||||
|
This is the same setup as for Solaris 9, see below. */
|
||||||
|
*nframes = 3;
|
||||||
|
|
||||||
|
else if (cuh_pattern == 0xd407a04c)
|
||||||
{
|
{
|
||||||
/* This matches the call_user_handler pattern for Solaris 10.
|
/* This matches the call_user_handler pattern for Solaris 10.
|
||||||
There are 2 cases so we look for the return address of the
|
There are 2 cases so we look for the return address of the
|
||||||
|
@ -317,6 +330,7 @@ sparc_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
*/
|
*/
|
||||||
*nframes = 2;
|
*nframes = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x9410001b)
|
else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x9410001b)
|
||||||
/* This matches the call_user_handler pattern for Solaris 9 and
|
/* This matches the call_user_handler pattern for Solaris 9 and
|
||||||
for Solaris 8 running inside Solaris Containers respectively.
|
for Solaris 8 running inside Solaris Containers respectively.
|
||||||
|
@ -329,7 +343,8 @@ sparc_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
<kernel>
|
<kernel>
|
||||||
*/
|
*/
|
||||||
*nframes = 3;
|
*nframes = 3;
|
||||||
else
|
|
||||||
|
else /* cuh_pattern == 0x90100018 */
|
||||||
/* This is the default Solaris 8 case.
|
/* This is the default Solaris 8 case.
|
||||||
We need to move up two frames:
|
We need to move up two frames:
|
||||||
|
|
||||||
|
@ -339,6 +354,7 @@ sparc_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
|
||||||
<kernel>
|
<kernel>
|
||||||
*/
|
*/
|
||||||
*nframes = 2;
|
*nframes = 2;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue