* elf32-i386.c (allocate_dynrelocs): Don't create a .plt entry

without a reloc when symbol visibilty makes a function local.
This commit is contained in:
Alan Modra 2001-09-27 16:10:28 +00:00
parent 06317a278f
commit ced53ee5da
2 changed files with 43 additions and 33 deletions

View File

@ -1,3 +1,8 @@
2001-09-28 Alan Modra <amodra@bigpond.net.au>
* elf32-i386.c (allocate_dynrelocs): Don't create a .plt entry
without a reloc when symbol visibilty makes a function local.
2001-09-27 Nick Clifton <nickc@cambridge.redhat.com>
* elf32-arm.h (elf32_arm_merge_private_bfd_data): Fix detection of

View File

@ -1263,47 +1263,52 @@ allocate_dynrelocs (h, inf)
return false;
}
s = htab->splt;
if (s == NULL)
abort ();
/* If this is the first .plt entry, make room for the special
first entry. */
if (s->_raw_size == 0)
s->_raw_size += PLT_ENTRY_SIZE;
h->plt.offset = s->_raw_size;
/* If this symbol is not defined in a regular file, and we are
not generating a shared library, then set the symbol to this
location in the .plt. This is required to make function
pointers compare as equal between the normal executable and
the shared library. */
if (! info->shared
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
{
h->root.u.def.section = s;
h->root.u.def.value = h->plt.offset;
}
/* Make room for this entry. */
s->_raw_size += PLT_ENTRY_SIZE;
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
s = htab->sgotplt;
if (s == NULL)
abort ();
s->_raw_size += 4;
if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
{
s = htab->splt;
if (s == NULL)
abort ();
/* If this is the first .plt entry, make room for the special
first entry. */
if (s->_raw_size == 0)
s->_raw_size += PLT_ENTRY_SIZE;
h->plt.offset = s->_raw_size;
/* If this symbol is not defined in a regular file, and we are
not generating a shared library, then set the symbol to this
location in the .plt. This is required to make function
pointers compare as equal between the normal executable and
the shared library. */
if (! info->shared
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
{
h->root.u.def.section = s;
h->root.u.def.value = h->plt.offset;
}
/* Make room for this entry. */
s->_raw_size += PLT_ENTRY_SIZE;
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
s = htab->sgotplt;
if (s == NULL)
abort ();
s->_raw_size += 4;
/* We also need to make an entry in the .rel.plt section. */
s = htab->srelplt;
if (s == NULL)
abort ();
s->_raw_size += sizeof (Elf32_External_Rel);
}
else
{
h->plt.offset = (bfd_vma) -1;
h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
}
}
else
{