From 43d24f250fc609dae5f3455a1201f7466848ad9b Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 2 Mar 2005 12:54:47 +0000 Subject: gcc 3.4.0 also needs to not emit embedded pic relocs for mips --- toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch diff --git a/toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch b/toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch new file mode 100644 index 000000000..c126b787d --- /dev/null +++ b/toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch @@ -0,0 +1,83 @@ +From: cgd at broadcom dot com +To: gcc-patches at gcc dot gnu dot org +Cc: mark at codesourcery dot com +Date: 13 Jun 2004 22:51:30 -0700 +Subject: [trunk + 3.4-branch RFA] don't use empic relocs for mips-linuxeh + +This patch changes mips-linux to avoid using embedded-pic relocs for +its eh data. (Support for generating these for new code is removed in +current binutils srcs.) + +Relating to this, previously, mips-linux and mips64-linux would use +different representations for their EH data (even for mips64-linux o32 +abi), due to the mips64-linux n32/64 BFDs not supporting the +embedded-pic relocs. This was a bug. + +For more explanation, see the thread of the URL quoted in the comment +in linux.h. + + +Tested the same w/ sources of about a week ago for c/c++ for +mips-linux (native) before/after. Also verified .o compatibility +before/after just to be sure. + +I'd like this approved for the branch as well, so 3.4.1 will work +nicely w/ the next major binutils release. + + +thanks, + +chris + +2004-06-13 Chris Demetriou + + * config/mips/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Redefine + to return DW_EH_PE_absptr. + * config/mips/linux64.h (ASM_PREFERRED_EH_DATA_FORMAT): Remove. + +Index: config/mips/linux.h +=================================================================== +RCS file: /cvs/gcc/gcc/gcc/config/mips/linux.h,v +retrieving revision 1.77 +diff -u -p -r1.77 linux.h +--- gcc/gcc/config/mips/linux.h 19 Feb 2004 22:07:51 -0000 1.77 ++++ gcc/gcc/config/mips/linux.h 14 Jun 2004 05:49:51 -0000 +@@ -170,10 +170,11 @@ Boston, MA 02111-1307, USA. */ + #undef FUNCTION_NAME_ALREADY_DECLARED + #define FUNCTION_NAME_ALREADY_DECLARED 1 + +-#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ +- (flag_pic \ +- ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4\ +- : DW_EH_PE_absptr) ++/* If possible, we should attempt to use GP-relative relocs for this ++ (see http://sources.redhat.com/ml/binutils/2004-05/msg00227.html). ++ However, until that is implement, this just uses standard, absolute ++ references. */ ++#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) DW_EH_PE_absptr + + /* The glibc _mcount stub will save $v0 for us. Don't mess with saving + it, since ASM_OUTPUT_REG_PUSH/ASM_OUTPUT_REG_POP do not work in the +Index: config/mips/linux64.h +=================================================================== +RCS file: /cvs/gcc/gcc/gcc/config/mips/linux64.h,v +retrieving revision 1.7 +diff -u -p -r1.7 linux64.h +--- gcc/gcc/config/mips/linux64.h 18 Feb 2004 15:05:10 -0000 1.7 ++++ gcc/gcc/config/mips/linux64.h 14 Jun 2004 05:49:51 -0000 +@@ -81,14 +81,6 @@ Boston, MA 02111-1307, USA. */ + specification. The SGI/MIPS ABI defines it to be the same as PTR_SIZE. */ + #define DWARF_OFFSET_SIZE PTR_SIZE + +-#undef ASM_PREFERRED_EH_DATA_FORMAT +-#if 0 /* We can't use relative addressing modes on NEWABI :-( */ +-#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ +- (flag_pic \ +- ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_sdata4 \ +- : DW_EH_PE_absptr) +-#endif +- + /* GNU/Linux doesn't use the same floating-point format that IRIX uses + for long double. There's no need to override this here, since + ieee_quad_format is the default, but let's put this here to make + -- cgit v1.2.3