* 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.
This commit is contained in:
Richard Sandiford 2008-08-07 20:01:38 +00:00
parent 23cc69b663
commit aff469fa8d
2 changed files with 13 additions and 15 deletions

View 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.

View 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)