OSDN Git Service

* elfxx-mips.c (mips_elf_create_dynamic_relocation): Fix handling
authorRichard Sandiford <rsandifo@nildram.co.uk>
Wed, 9 Jul 2003 11:52:52 +0000 (11:52 +0000)
committerRichard Sandiford <rsandifo@nildram.co.uk>
Wed, 9 Jul 2003 11:52:52 +0000 (11:52 +0000)
of relocations whose offset is -2.

bfd/ChangeLog
bfd/elfxx-mips.c

index 426c76c..c2029a0 100644 (file)
@@ -1,5 +1,10 @@
 2003-07-09  Richard Sandiford  <rsandifo@redhat.com>
 
+       * elfxx-mips.c (mips_elf_create_dynamic_relocation): Fix handling
+       of relocations whose offset is -2.
+
+2003-07-09  Richard Sandiford  <rsandifo@redhat.com>
+
        * bfd/elfxx-mips.c (mips_elf_create_dynamic_relocation): Treat
        forced-local symbols like other locals.  Don't create relocations
        against STN_UNDEF in irix objects.
index bef1c79..9ad54fc 100644 (file)
@@ -3875,9 +3875,17 @@ mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
     }
 #endif
 
-  if (outrel[0].r_offset == (bfd_vma) -1
-      || outrel[0].r_offset == (bfd_vma) -2)
+  if (outrel[0].r_offset == (bfd_vma) -1)
+    /* The relocation field has been deleted.  */
     skip = TRUE;
+  else if (outrel[0].r_offset == (bfd_vma) -2)
+    {
+      /* The relocation field has been converted into a relative value of
+        some sort.  Functions like _bfd_elf_write_section_eh_frame expect
+        the field to be fully relocated, so add in the symbol's value.  */
+      skip = TRUE;
+      *addendp += symbol;
+    }
 
   /* If we've decided to skip this relocation, just output an empty
      record.  Note that R_MIPS_NONE == 0, so that this call to memset