mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-10 05:52:21 +08:00
Call _bfd_elf_create_ifunc_sections only for ifunc
Since x86 check_relocs is called after opening all input files, we need to call _bfd_elf_create_ifunc_sections only for STT_GNU_IFUNC symbols. * elf32-i386.c (elf_i386_check_relocs): Call _bfd_elf_create_ifunc_sections only for STT_GNU_IFUNC symbol. * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
This commit is contained in:
@ -1,3 +1,9 @@
|
||||
2016-04-20 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf32-i386.c (elf_i386_check_relocs): Call
|
||||
_bfd_elf_create_ifunc_sections only for STT_GNU_IFUNC symbol.
|
||||
* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
|
||||
|
||||
2016-04-20 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf-bfd.h (_bfd_elf_link_check_relocs): New.
|
||||
|
@ -1603,10 +1603,6 @@ elf_i386_check_relocs (bfd *abfd,
|
||||
eh = (struct elf_i386_link_hash_entry *) h;
|
||||
if (h != NULL)
|
||||
{
|
||||
/* Create the ifunc sections for static executables. If we
|
||||
never see an indirect function symbol nor we are building
|
||||
a static executable, those sections will be empty and
|
||||
won't appear in output. */
|
||||
switch (r_type)
|
||||
{
|
||||
default:
|
||||
@ -1621,7 +1617,10 @@ elf_i386_check_relocs (bfd *abfd,
|
||||
case R_386_GOT32X:
|
||||
if (htab->elf.dynobj == NULL)
|
||||
htab->elf.dynobj = abfd;
|
||||
if (!_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info))
|
||||
/* Create the ifunc sections for static executables. */
|
||||
if (h->type == STT_GNU_IFUNC
|
||||
&& !_bfd_elf_create_ifunc_sections (htab->elf.dynobj,
|
||||
info))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -1712,10 +1712,6 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
|
||||
if (h != NULL)
|
||||
{
|
||||
/* Create the ifunc sections for static executables. If we
|
||||
never see an indirect function symbol nor we are building
|
||||
a static executable, those sections will be empty and
|
||||
won't appear in output. */
|
||||
switch (r_type)
|
||||
{
|
||||
default:
|
||||
@ -1774,7 +1770,10 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
case R_X86_64_GOTPCREL64:
|
||||
if (htab->elf.dynobj == NULL)
|
||||
htab->elf.dynobj = abfd;
|
||||
if (!_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info))
|
||||
/* Create the ifunc sections for static executables. */
|
||||
if (h->type == STT_GNU_IFUNC
|
||||
&& !_bfd_elf_create_ifunc_sections (htab->elf.dynobj,
|
||||
info))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user