Check for NULL link registers as found in initial stack frames when doing
stack unwinding, instead of naively trying to check the instruction at that location. This fixes signal handling in threaded applications after recent changes regarding unwinding in libthr. While here, clean up our MD_FROB_UPDATE_CONTEXT() implementation a little.
This commit is contained in:
parent
b71de2e057
commit
a9f035fdd9
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=213185
@ -219,17 +219,16 @@
|
||||
| (TARGET_64BIT ? DW_EH_PE_udata8 : DW_EH_PE_sdata4)) \
|
||||
: DW_EH_PE_absptr)
|
||||
|
||||
#ifdef __powerpc64__
|
||||
#define MD_FROB_UPDATE_CONTEXT(CTX, FS) \
|
||||
if (TARGET_64BIT) { \
|
||||
if ((FS)->regs.reg[2].how == REG_UNSAVED) \
|
||||
{ \
|
||||
unsigned int *insn \
|
||||
= (unsigned int *) \
|
||||
unsigned int *insn = (unsigned int *) \
|
||||
_Unwind_GetGR ((CTX), LINK_REGISTER_REGNUM); \
|
||||
if (*insn == 0xE8410028) \
|
||||
if (insn != NULL && *insn == 0xE8410028) \
|
||||
_Unwind_SetGRPtr ((CTX), 2, (CTX)->cfa + 40); \
|
||||
} \
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* FreeBSD doesn't support saving and restoring 64-bit regs with a 32-bit
|
||||
kernel. This is supported when running on a 64-bit kernel with
|
||||
|
Loading…
Reference in New Issue
Block a user