From d21bcbad8a199147055257d03774ee3fbc963f23 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Thu, 7 Aug 2008 20:01:38 +0000 Subject: [PATCH] bfd/ * 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 | 7 +++++++ bfd/elfxx-mips.c | 21 ++++++--------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 581e89b0bd..9b6d8088ed 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,12 @@ 2008-08-07 Richard Sandiford + * 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 + * elfxx-mips.c (mips_got_info): Add a "reloc_only_gotno" field. (mips_elf_got_section): Delete. (mips_elf_sort_hash_table): Use g->reloc_only_gotno to decide diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 36c94d52be..4e1481b2b6 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -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) -- 2.11.0