diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2016-04-20 05:34:02 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2016-04-20 05:34:15 -0700 |
commit | 466ee2af4a927fc6aaaaa62b0abd3b0cff9bcef7 (patch) | |
tree | fd1b6f03bb7bbee3d8be51584755205fb7f71af2 /bfd/elf64-x86-64.c | |
parent | d968975277ba280372002800c6c25bb1b29f496e (diff) | |
download | gdb-466ee2af4a927fc6aaaaa62b0abd3b0cff9bcef7.zip gdb-466ee2af4a927fc6aaaaa62b0abd3b0cff9bcef7.tar.gz gdb-466ee2af4a927fc6aaaaa62b0abd3b0cff9bcef7.tar.bz2 |
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.
Diffstat (limited to 'bfd/elf64-x86-64.c')
-rw-r--r-- | bfd/elf64-x86-64.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 5533b4a..197a1b8 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -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; } |