buildrootschalter/toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch
Eric Andersen cd2388d5b3 Fix things the other way round. Instead of restoring the mips
embedded pic support into binutils, instead fixup gcc to not emit
any embedded pic relocations.
2005-03-02 12:30:29 +00:00

60 lines
2.2 KiB
Diff

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 <cgd@broadcom.com>
* config/mips/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Redefine
to return DW_EH_PE_absptr.
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 <a href="http://sources.redhat.com/ml/binutils/2004-05/msg00227.html">http://sources.redhat.com/ml/binutils/2004-05/msg00227.html</a>).
+ 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