2002-02-08 Eric Christopher <echristo@redhat.com>
authorEric Christopher <echristo@gmail.com>
Sat, 9 Feb 2002 04:40:18 +0000 (04:40 +0000)
committerEric Christopher <echristo@gmail.com>
Sat, 9 Feb 2002 04:40:18 +0000 (04:40 +0000)
From Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

* elf32-mips.c (_bfd_mips_elf_fake_sections): Don't create .rela
sections for the O32 ABI.

bfd/ChangeLog
bfd/elf32-mips.c

index af6ac67c5d58f77d14750027c6fc017041161b30..750fea195a158ebded6cd9fbde88292a94c421fa 100644 (file)
@@ -1,3 +1,10 @@
+2002-02-08  Eric Christopher  <echristo@redhat.com>
+
+       From Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+       * elf32-mips.c (_bfd_mips_elf_fake_sections): Don't create .rela
+       sections for the O32 ABI.
+
 2002-02-08  Chris Demetriou  <cgd@broadcom.com>
 
        * elf32-arm.h: Fix formatting of _("...").
index 6cddbb3d58dd78d2e860532d977cbbac55a5cce0..73eba75de99b8a587df985a2c3e1c13bedf215b6 100644 (file)
@@ -3583,8 +3583,16 @@ _bfd_mips_elf_fake_sections (abfd, hdr, sec)
 
   /* The generic elf_fake_sections will set up REL_HDR using the
      default kind of relocations.  But, we may actually need both
-     kinds of relocations, so we set up the second header here.  */
-  if ((sec->flags & SEC_RELOC) != 0)
+     kinds of relocations, so we set up the second header here.
+
+     This is not necessary for the O32 ABI since that only uses Elf32_Rel
+     relocations (cf. System V ABI, MIPS RISC Processor Supplement,
+     3rd Edition, p. 4-17).  It breaks the IRIX 5/6 32-bit ld, since one
+     of the resulting empty .rela.<section> sections starts with
+     sh_offset == object size, and ld doesn't allow that.  While the check
+     is arguably bogus for empty or SHT_NOBITS sections, it can easily be
+     avoided by not emitting those useless sections in the first place.  */
+  if (IRIX_COMPAT (abfd) != ict_irix5 && (sec->flags & SEC_RELOC) != 0)
     {
       struct bfd_elf_section_data *esd;
       bfd_size_type amt = sizeof (Elf_Internal_Shdr);