diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-08-28 15:40:00 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-08-28 15:40:00 -0700 |
commit | 0fb0a7677827aea3e7ca1fdb2dfd1ccbdf6c2f71 (patch) | |
tree | f3f1a5de496dd06006cf49eb320fb8cf14a135ef | |
parent | 5e89eb3ab04a378133ff3da1ed23d4bd89a56b5e (diff) | |
download | gdb-0fb0a7677827aea3e7ca1fdb2dfd1ccbdf6c2f71.zip gdb-0fb0a7677827aea3e7ca1fdb2dfd1ccbdf6c2f71.tar.gz gdb-0fb0a7677827aea3e7ca1fdb2dfd1ccbdf6c2f71.tar.bz2 |
Remove unused _bfd_elf_ifunc_get_synthetic_symtab
Since _bfd_elf_ifunc_get_synthetic_symtab is no longer called by x86
get_synthetic_symtab, it is now unused. This patch removes it.
* elf-bfd.h (_bfd_elf_ifunc_get_synthetic_symtab): Removed.
* elf-ifunc.c (_bfd_elf_ifunc_get_synthetic_symtab): Likewise.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf-bfd.h | 3 | ||||
-rw-r--r-- | bfd/elf-ifunc.c | 125 |
3 files changed, 5 insertions, 128 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 419c311..351fe83 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,10 @@ 2017-08-28 H.J. Lu <hongjiu.lu@intel.com> + * elf-bfd.h (_bfd_elf_ifunc_get_synthetic_symtab): Removed. + * elf-ifunc.c (_bfd_elf_ifunc_get_synthetic_symtab): Likewise. + +2017-08-28 H.J. Lu <hongjiu.lu@intel.com> + PR binutils/22018 * elf32-i386.c (elf_i386_get_synthetic_symtab): Check for valid PLT section size. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 79b9dbc..fd08748 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -2659,9 +2659,6 @@ extern bfd_boolean _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *, struct elf_link_hash_entry *, struct elf_dyn_relocs **, bfd_boolean *, unsigned int, unsigned int, unsigned int, bfd_boolean); -extern long _bfd_elf_ifunc_get_synthetic_symtab - (bfd *, long, asymbol **, long, asymbol **, asymbol **, asection *, - bfd_vma *(*) (bfd *, asymbol **, asection *, asection *)); extern void elf_append_rela (bfd *, asection *, Elf_Internal_Rela *); extern void elf_append_rel (bfd *, asection *, Elf_Internal_Rela *); diff --git a/bfd/elf-ifunc.c b/bfd/elf-ifunc.c index 8db7997..4bd64d6 100644 --- a/bfd/elf-ifunc.c +++ b/bfd/elf-ifunc.c @@ -355,128 +355,3 @@ keep: return TRUE; } - -/* Similar to _bfd_elf_get_synthetic_symtab, optimized for unsorted PLT - entries. PLT is the PLT section. PLT_SYM_VAL is a function pointer - which returns an array of PLT entry symbol values. */ - -long -_bfd_elf_ifunc_get_synthetic_symtab - (bfd *abfd, long symcount ATTRIBUTE_UNUSED, - asymbol **syms ATTRIBUTE_UNUSED, long dynsymcount, asymbol **dynsyms, - asymbol **ret, asection *plt, - bfd_vma *(*get_plt_sym_val) (bfd *, asymbol **, asection *, asection *)) -{ - const struct elf_backend_data *bed = get_elf_backend_data (abfd); - asection *relplt; - asymbol *s; - const char *relplt_name; - bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean); - arelent *p; - long count, i, n; - size_t size; - Elf_Internal_Shdr *hdr; - char *names; - bfd_vma *plt_sym_val; - - *ret = NULL; - - if (plt == NULL) - return 0; - - if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0) - return 0; - - if (dynsymcount <= 0) - return 0; - - relplt_name = bed->relplt_name; - if (relplt_name == NULL) - relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt"; - relplt = bfd_get_section_by_name (abfd, relplt_name); - if (relplt == NULL) - return 0; - - hdr = &elf_section_data (relplt)->this_hdr; - if (hdr->sh_link != elf_dynsymtab (abfd) - || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA)) - return 0; - - slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table; - if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE)) - return -1; - - count = relplt->size / hdr->sh_entsize; - size = count * sizeof (asymbol); - p = relplt->relocation; - for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel) - { - size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt"); - if (p->addend != 0) - { -#ifdef BFD64 - size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64); -#else - size += sizeof ("+0x") - 1 + 8; -#endif - } - } - - plt_sym_val = get_plt_sym_val (abfd, dynsyms, plt, relplt); - if (plt_sym_val == NULL) - return -1; - - s = *ret = (asymbol *) bfd_malloc (size); - if (s == NULL) - { - free (plt_sym_val); - return -1; - } - - names = (char *) (s + count); - p = relplt->relocation; - n = 0; - for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel) - { - size_t len; - bfd_vma addr; - - addr = plt_sym_val[i]; - if (addr == (bfd_vma) -1) - continue; - - *s = **p->sym_ptr_ptr; - /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since - we are defining a symbol, ensure one of them is set. */ - if ((s->flags & BSF_LOCAL) == 0) - s->flags |= BSF_GLOBAL; - s->flags |= BSF_SYNTHETIC; - s->section = plt; - s->value = addr - plt->vma; - s->name = names; - s->udata.p = NULL; - len = strlen ((*p->sym_ptr_ptr)->name); - memcpy (names, (*p->sym_ptr_ptr)->name, len); - names += len; - if (p->addend != 0) - { - char buf[30], *a; - - memcpy (names, "+0x", sizeof ("+0x") - 1); - names += sizeof ("+0x") - 1; - bfd_sprintf_vma (abfd, buf, p->addend); - for (a = buf; *a == '0'; ++a) - ; - len = strlen (a); - memcpy (names, a, len); - names += len; - } - memcpy (names, "@plt", sizeof ("@plt")); - names += sizeof ("@plt"); - ++s, ++n; - } - - free (plt_sym_val); - - return n; -} |