bfd/
authorRichard Sandiford <rdsandiford@googlemail.com>
Thu, 7 Aug 2008 20:01:38 +0000 (20:01 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Thu, 7 Aug 2008 20:01:38 +0000 (20:01 +0000)
* elfxx-mips.c (mips_elf_record_relocs): Defer allocation of a
global GOT entry when deferring allocation of dynamic relocations.
(allocate_dynrelocs): When allocating deferred dynamic relocations,
also do the deferred allocation of a GOT entry.

bfd/ChangeLog
bfd/elfxx-mips.c

index 581e89b0bd0223f65bb27b0e0b2d801b820ca3bb..9b6d8088ed7e0f7d30b6193230b11157cd75158b 100644 (file)
@@ -1,3 +1,10 @@
+2008-08-07  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * elfxx-mips.c (mips_elf_record_relocs): Defer allocation of a
+       global GOT entry when deferring allocation of dynamic relocations.
+       (allocate_dynrelocs): When allocating deferred dynamic relocations,
+       also do the deferred allocation of a GOT entry.
+
 2008-08-07  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * elfxx-mips.c (mips_got_info): Add a "reloc_only_gotno" field.
index 36c94d52bebab79c64f50c706f651398f08537f2..4e1481b2b6b906ca96829c6e4340687e1153f35d 100644 (file)
@@ -7274,21 +7274,6 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
                       are relocations against the text segment.  */
                    hmips->readonly_reloc = TRUE;
                }
-
-             /* Even though we don't directly need a GOT entry for
-                this symbol, a symbol must have a dynamic symbol
-                table index greater that DT_MIPS_GOTSYM if there are
-                dynamic relocations against it.  This does not apply
-                to VxWorks, which does not have the usual coupling
-                between global GOT entries and .dynsym entries.  */
-             if (h != NULL && !htab->is_vxworks)
-               {
-                 struct mips_elf_link_hash_entry *hmips;
-
-                 hmips = (struct mips_elf_link_hash_entry *) h;
-                 if (hmips->global_got_area > GGA_RELOC_ONLY)
-                   hmips->global_got_area = GGA_RELOC_ONLY;
-               }
            }
 
          if (SGI_COMPAT (abfd))
@@ -7585,6 +7570,12 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 
       if (do_copy)
        {
+         /* Even though we don't directly need a GOT entry for this symbol,
+            a symbol must have a dynamic symbol table index greater that
+            DT_MIPS_GOTSYM if there are dynamic relocations against it.  */
+         if (hmips->global_got_area > GGA_RELOC_ONLY)
+           hmips->global_got_area = GGA_RELOC_ONLY;
+
          mips_elf_allocate_dynamic_relocations
            (dynobj, info, hmips->possibly_dynamic_relocs);
          if (hmips->readonly_reloc)