diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2014-07-16 11:15:56 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2014-07-16 11:15:56 -0700 |
commit | cca5b8b64b3286bb96cd7a2c18232d1acea85cd9 (patch) | |
tree | 6c1c671315f38ed1dd7590a1a341133d1a30195c /bfd | |
parent | 144bed8d4d8a1bdc0067f55f2ee71c07e5594677 (diff) | |
download | gdb-cca5b8b64b3286bb96cd7a2c18232d1acea85cd9.zip gdb-cca5b8b64b3286bb96cd7a2c18232d1acea85cd9.tar.gz gdb-cca5b8b64b3286bb96cd7a2c18232d1acea85cd9.tar.bz2 |
Match PLT entry only for ELFOSABI_GNU input
* elf32-i386.c (elf_i386_plt_sym_val): Match PLT entry only for
ELFOSABI_GNU input.
* elf64-x86-64.c (elf_x86_64_plt_sym_val): Likewise.
(elf_x86_64_plt_sym_val_offset_plt_bnd): Likewise.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf32-i386.c | 4 | ||||
-rw-r--r-- | bfd/elf64-x86-64.c | 8 |
3 files changed, 19 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5e9ce0f..9be9b8cf 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,12 @@ 2014-07-16 H.J. Lu <hongjiu.lu@intel.com> + * elf32-i386.c (elf_i386_plt_sym_val): Match PLT entry only for + ELFOSABI_GNU input. + * elf64-x86-64.c (elf_x86_64_plt_sym_val): Likewise. + (elf_x86_64_plt_sym_val_offset_plt_bnd): Likewise. + +2014-07-16 H.J. Lu <hongjiu.lu@intel.com> + PR binutils/17154 * elf32-i386.c (elf_i386_plt_sym_val): Only match R_*_JUMP_SLOT and R_*_IRELATIVE relocation offset with PLT entry. diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index aa01a7a..7c4b4bb 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -4994,6 +4994,10 @@ elf_i386_plt_sym_val (bfd_vma i, const asection *plt, const arelent *rel) abfd = plt->owner; bed = get_elf_i386_backend_data (abfd); plt_offset = bed->plt->plt_entry_size; + + if (elf_elfheader (abfd)->e_ident[EI_OSABI] != ELFOSABI_GNU) + return plt->vma + (i + 1) * plt_offset; + while (plt_offset < plt->size) { bfd_vma reloc_offset; diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 5eea810..f71291e 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -5311,6 +5311,10 @@ elf_x86_64_plt_sym_val (bfd_vma i, const asection *plt, abfd = plt->owner; bed = get_elf_x86_64_backend_data (abfd); plt_offset = bed->plt_entry_size; + + if (elf_elfheader (abfd)->e_ident[EI_OSABI] != ELFOSABI_GNU) + return plt->vma + (i + 1) * plt_offset; + while (plt_offset < plt->size) { bfd_vma reloc_index; @@ -5340,6 +5344,10 @@ elf_x86_64_plt_sym_val_offset_plt_bnd (bfd_vma i, const asection *plt) const struct elf_x86_64_backend_data *bed = &elf_x86_64_bnd_arch_bed; bfd *abfd = plt->owner; bfd_vma plt_offset = bed->plt_entry_size; + + if (elf_elfheader (abfd)->e_ident[EI_OSABI] != ELFOSABI_GNU) + return i * sizeof (elf_x86_64_legacy_plt2_entry); + while (plt_offset < plt->size) { bfd_vma reloc_index; |