libgcc2.c (__eh_ffetmnpc): Add support for machines that cannot access globals after throw's epilogue when...
* libgcc2.c (__eh_ffetmnpc): Add support for machines that cannot access globals after throw's epilogue when -fno-sjlj-exceptions is used. * rs6000.c (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise. * mips.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise. (INITIAL_ELIMINATION_OFFSET): Fix RETURN_ADDRESS_POINTER_REGNUM for 64 bit words, with 32 bit pointers and variable endianness. Fixes throwing across shared library lines (useful at times on mips and rs6000) From-SVN: r14168
This commit is contained in:
parent
7ec189f2ec
commit
28174a1465
@ -1966,7 +1966,9 @@ extern struct mips_frame_info current_frame_info;
|
||||
else if ((FROM) == RETURN_ADDRESS_POINTER_REGNUM \
|
||||
&& ((TO) == FRAME_POINTER_REGNUM \
|
||||
|| (TO) == STACK_POINTER_REGNUM)) \
|
||||
(OFFSET) = current_frame_info.gp_sp_offset; \
|
||||
(OFFSET) = current_frame_info.gp_sp_offset \
|
||||
+ ((UNITS_PER_WORD - (POINTER_SIZE / BITS_PER_UNIT)) \
|
||||
* (BYTES_BIG_ENDIAN != 0)); \
|
||||
else \
|
||||
abort (); \
|
||||
}
|
||||
@ -4047,3 +4049,8 @@ while (0)
|
||||
#define NO_BUILTIN_PTRDIFF_TYPE
|
||||
#define PTRDIFF_TYPE (TARGET_LONG64 ? "long int" : "int")
|
||||
#endif
|
||||
|
||||
/* See mips_expand_prologue's use of loadgp for when this should be
|
||||
true. */
|
||||
|
||||
#define DONT_ACCESS_GBLS_AFTER_EPILOGUE (TARGET_ABICALLS && mips_abi != ABI_32)
|
||||
|
@ -3126,3 +3126,7 @@ extern int rs6000_valid_type_attribute_p ();
|
||||
extern void rs6000_set_default_type_attributes ();
|
||||
extern struct rtx_def *rs6000_dll_import_ref ();
|
||||
extern struct rtx_def *rs6000_longcall_ref ();
|
||||
|
||||
/* See nonlocal_goto_receiver for when this must be set. */
|
||||
|
||||
#define DONT_ACCESS_GBLS_AFTER_EPILOGUE (TARGET_TOC && TARGET_MINIMAL_TOC)
|
||||
|
@ -3436,6 +3436,16 @@ __throw ()
|
||||
|
||||
void *__eh_pc;
|
||||
|
||||
/* See expand_builtin_throw for details. */
|
||||
|
||||
void **__eh_ffetmnpc () {
|
||||
static void *buf[2] = {
|
||||
&__find_first_exception_table_match,
|
||||
&__eh_pc
|
||||
};
|
||||
return buf;
|
||||
}
|
||||
|
||||
void
|
||||
__empty ()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user