diff options
author | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-06-06 23:18:36 +0000 |
---|---|---|
committer | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-06-06 23:18:36 +0000 |
commit | ca7e521fc5c16116f8e90eb902c490e36ae5feea (patch) | |
tree | e1ac1e967ef794bea51ee8cff6e71c8cf9964543 /gcc/config/mips | |
parent | 861ca0c44e8a8f5e9730cbcb965c97e0dcc131b3 (diff) |
* 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)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@14168 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/mips')
-rw-r--r-- | gcc/config/mips/mips.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 3ae6e9a99f7..f1e985a2ab5 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -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) |