From cd2388d5b308df21fe0c36f61ef65defbd5e195d Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 2 Mar 2005 12:30:29 +0000 Subject: [PATCH] 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. --- .../117_mips_symbolic_link.patch | 44 ----------- .../450-mips-restore-embedded-pic.patch | 75 ------------------- .../gcc/3.3.5/820-no-mips-empic-relocs.patch | 59 +++++++++++++++ 3 files changed, 59 insertions(+), 119 deletions(-) delete mode 100644 toolchain/binutils/2.15.94.0.2.2/117_mips_symbolic_link.patch delete mode 100644 toolchain/binutils/2.15.94.0.2.2/450-mips-restore-embedded-pic.patch create mode 100644 toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch diff --git a/toolchain/binutils/2.15.94.0.2.2/117_mips_symbolic_link.patch b/toolchain/binutils/2.15.94.0.2.2/117_mips_symbolic_link.patch deleted file mode 100644 index 45d1dd5caa..0000000000 --- a/toolchain/binutils/2.15.94.0.2.2/117_mips_symbolic_link.patch +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -e -## 117_mips_symbolic_link.dpatch -## -## DP: Description: Handle symbolic multigot links. (#270619) -## DP: Author: Thiemo Seufer -## DP: Upstream status: Not submitted -## DP: Date: 2004-09-08 - -if [ $# -lt 1 ]; then - echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 - exit 1 -fi - -[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts -patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}" - -case "$1" in - -patch) patch -p1 ${patch_opts} < $0;; - -unpatch) patch -R -p1 ${patch_opts} < $0;; - *) - echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 - exit 1;; -esac - -exit 0 - -@DPATCH@ -diff -urpN binutils-2.15.orig/bfd/elfxx-mips.c binutils-2.15/bfd/elfxx-mips.c ---- binutils-2.15.orig/bfd/elfxx-mips.c 2004-05-17 21:36:03.000000000 +0200 -+++ binutils-2.15/bfd/elfxx-mips.c 2004-08-29 08:48:22.000000000 +0200 -@@ -3909,11 +3910,8 @@ mips_elf_create_dynamic_relocation (bfd - /* We must now calculate the dynamic symbol table index to use - in the relocation. */ - if (h != NULL -- && (! info->symbolic || (h->root.elf_link_hash_flags -- & ELF_LINK_HASH_DEF_REGULAR) == 0) -- /* h->root.dynindx may be -1 if this symbol was marked to -- become local. */ -- && h->root.dynindx != -1) -+ && ((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0 -+ || (h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)) - { - indx = h->root.dynindx; - if (SGI_COMPAT (output_bfd)) diff --git a/toolchain/binutils/2.15.94.0.2.2/450-mips-restore-embedded-pic.patch b/toolchain/binutils/2.15.94.0.2.2/450-mips-restore-embedded-pic.patch deleted file mode 100644 index 93c1c59504..0000000000 --- a/toolchain/binutils/2.15.94.0.2.2/450-mips-restore-embedded-pic.patch +++ /dev/null @@ -1,75 +0,0 @@ ---- binutils/gas/config/tc-mips.c.orig 2004-12-20 12:16:50.000000000 -0700 -+++ binutils/gas/config/tc-mips.c 2005-03-02 03:42:08.000000000 -0700 -@@ -10955,8 +10955,6 @@ - - buf = (bfd_byte *) (fixP->fx_frag->fr_literal + fixP->fx_where); - -- assert (! fixP->fx_pcrel); -- - /* Don't treat parts of a composite relocation as done. There are two - reasons for this: - -@@ -11000,7 +10998,6 @@ - case BFD_RELOC_MIPS_CALL_HI16: - case BFD_RELOC_MIPS_CALL_LO16: - case BFD_RELOC_MIPS16_GPREL: -- assert (! fixP->fx_pcrel); - /* Nothing needed to do. The value comes from the reloc entry */ - break; - -@@ -12867,8 +12864,23 @@ - *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); - reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; - -- assert (! fixp->fx_pcrel); -- reloc->addend = fixp->fx_addnumber; -+ if (fixp->fx_pcrel) -+ { -+ if (OUTPUT_FLAVOR == bfd_target_elf_flavour) -+ { -+ /* At this point, fx_addnumber is "symbol offset - reloc->address". -+ Relocations want only the symbol offset. */ -+ reloc->addend = fixp->fx_addnumber + reloc->address; -+ } -+ else -+ { -+ /* A gruesome hack which is a result of the gruesome gas reloc -+ handling. */ -+ reloc->addend = reloc->address; -+ } -+ } -+ else -+ reloc->addend = fixp->fx_addnumber; - - /* Since the old MIPS ELF ABI uses Rel instead of Rela, encode the vtable - entry to be used in the relocation's section offset. */ -@@ -12879,6 +12891,16 @@ - } - - code = fixp->fx_r_type; -+ if (fixp->fx_pcrel) -+ { -+ if (code == BFD_RELOC_32) -+ code = BFD_RELOC_32_PCREL; -+ else -+ as_bad_where (fixp->fx_file, fixp->fx_line, -+ _("Cannot make %s relocation PC relative"), -+ bfd_get_reloc_code_name (code)); -+ } -+ - - /* To support a PC relative reloc, we used a Cygnus extension. - We check for that here to make sure that we don't let such a ---- binutils/gas/config/tc-mips.h 29 Apr 2004 05:14:22 -0000 1.35 -+++ binutils/gas/config/tc-mips.h 5 May 2004 17:38:51 -0000 -@@ -58,6 +58,10 @@ - - #define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2) - -+/* We permit PC relative difference expressions when generating -+ embedded PIC code. */ -+#define DIFF_EXPR_OK -+ - /* Tell assembler that we have an itbl_mips.h header file to include. */ - #define HAVE_ITBL_CPU - diff --git a/toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch b/toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch new file mode 100644 index 0000000000..d5c4c9cb58 --- /dev/null +++ b/toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch @@ -0,0 +1,59 @@ +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. + +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 -- 2.30.2