summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils-mips-relocs.patch65
1 files changed, 15 insertions, 50 deletions
diff --git a/binutils-mips-relocs.patch b/binutils-mips-relocs.patch
index e5e3d0a..e7674b0 100644
--- a/binutils-mips-relocs.patch
+++ b/binutils-mips-relocs.patch
@@ -101,62 +101,27 @@ diff -u -r1.2114 ChangeLog
+ (tc_gen_reloc): Put back pc rel handling.
+ * config/tc-mips.h: Defines DIFF_EXPR_OK.
+
-Index: gas/config/tc-mips.c
-===================================================================
-RCS file: /cvsroot/gcc/src-cvs/src/gas/config/tc-mips.c,v
-retrieving revision 1.263
-diff -u -r1.263 tc-mips.c
---- gas/config/tc-mips.c.orig 2004-11-22 21:33:32.000000000 +0100
-+++ gas/config/tc-mips.c 2004-11-23 23:59:24.000000000 +0100
-@@ -10932,8 +10932,6 @@
+--- gas/config/tc-mips.c.orig 2005-12-20 23:43:56.000000000 +0100
++++ gas/config/tc-mips.c 2005-12-21 22:47:56.000000000 +0100
+@@ -11401,8 +11401,6 @@
buf = (bfd_byte *) (fixP->fx_frag->fr_literal + fixP->fx_where);
-- assert (! fixP->fx_pcrel);
+- assert (! fixP->fx_pcrel || fixP->fx_r_type == BFD_RELOC_16_PCREL_S2);
-
/* Don't treat parts of a composite relocation as done. There are two
reasons for this:
-@@ -10944,7 +10942,7 @@
- constants. The easiest way of dealing with the pathological
- exceptions is to generate a relocation against STN_UNDEF and
- leave everything up to the linker. */
-- if (fixP->fx_addsy == NULL && fixP->fx_tcbit == 0)
-+ if (fixP->fx_addsy == NULL && (! fixP->fx_pcrel) && fixP->fx_tcbit == 0)
- fixP->fx_done = 1;
-
- switch (fixP->fx_r_type)
-@@ -12800,8 +12798,27 @@
- *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
- reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+@@ -13247,8 +13245,6 @@
-- assert (! fixp->fx_pcrel);
-- reloc->addend = fixp->fx_addnumber;
-+ if (fixp->fx_pcrel)
-+ {
-+ bfd_vma pcrel_address;
-+
-+ pcrel_address = reloc->address;
-+
-+ if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
-+ {
-+ /* At this point, fx_addnumber is "symbol offset - pcrel_address".
-+ Relocations want only the symbol offset. */
-+ reloc->addend = fixp->fx_addnumber + pcrel_address;
-+ }
-+ else
-+ {
-+ /* A gruesome hack which is a result of the gruesome gas reloc
-+ handling. */
-+ reloc->addend = pcrel_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. */
-@@ -12812,6 +12829,34 @@
+ if (fixp->fx_pcrel)
+ {
+- assert (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2);
+-
+ /* At this point, fx_addnumber is "symbol offset - pcrel address".
+ Relocations want only the symbol offset. */
+ reloc->addend = fixp->fx_addnumber + reloc->address;
+@@ -13273,6 +13269,34 @@
}
code = fixp->fx_r_type;
@@ -189,8 +154,8 @@ diff -u -r1.263 tc-mips.c
+ }
+ }
- /* 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
+ reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
+ if (reloc->howto == NULL)
Index: gas/config/tc-mips.h
===================================================================
RCS file: /cvsroot/gcc/src-cvs/src/gas/config/tc-mips.h,v