mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 21:41:47 +08:00
x86: Add VERIFY_PLT_ENTRY
Add VERIFY_PLT_ENTRY to verify that symbol has an entry in the procedure linkage table. * elfxx-x86.h (VERIFY_PLT_ENTRY): New. * elf32-i386.c (elf_i386_finish_dynamic_symbol): Use it. * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* elfxx-x86.h (VERIFY_PLT_ENTRY): New.
|
||||||
|
* elf32-i386.c (elf_i386_finish_dynamic_symbol): Use it.
|
||||||
|
* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
|
||||||
|
|
||||||
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* elfxx-x86.h (COPY_INPUT_RELOC_P): New.
|
* elfxx-x86.h (COPY_INPUT_RELOC_P): New.
|
||||||
|
@ -3577,18 +3577,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
relplt = htab->elf.irelplt;
|
relplt = htab->elf.irelplt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This symbol has an entry in the procedure linkage table. Set
|
VERIFY_PLT_ENTRY (info, h, plt, gotplt, relplt, local_undefweak)
|
||||||
it up. */
|
|
||||||
|
|
||||||
if ((h->dynindx == -1
|
|
||||||
&& !local_undefweak
|
|
||||||
&& !((h->forced_local || bfd_link_executable (info))
|
|
||||||
&& h->def_regular
|
|
||||||
&& h->type == STT_GNU_IFUNC))
|
|
||||||
|| plt == NULL
|
|
||||||
|| gotplt == NULL
|
|
||||||
|| relplt == NULL)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Get the index in the procedure linkage table which
|
/* Get the index in the procedure linkage table which
|
||||||
corresponds to this symbol. This is the index of this symbol
|
corresponds to this symbol. This is the index of this symbol
|
||||||
|
@ -3939,17 +3939,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
relplt = htab->elf.irelplt;
|
relplt = htab->elf.irelplt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This symbol has an entry in the procedure linkage table. Set
|
VERIFY_PLT_ENTRY (info, h, plt, gotplt, relplt, local_undefweak)
|
||||||
it up. */
|
|
||||||
if ((h->dynindx == -1
|
|
||||||
&& !local_undefweak
|
|
||||||
&& !((h->forced_local || bfd_link_executable (info))
|
|
||||||
&& h->def_regular
|
|
||||||
&& h->type == STT_GNU_IFUNC))
|
|
||||||
|| plt == NULL
|
|
||||||
|| gotplt == NULL
|
|
||||||
|| relplt == NULL)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Get the index in the procedure linkage table which
|
/* Get the index in the procedure linkage table which
|
||||||
corresponds to this symbol. This is the index of this symbol
|
corresponds to this symbol. This is the index of this symbol
|
||||||
|
@ -196,6 +196,18 @@
|
|||||||
&& (H)->dynindx == -1 \
|
&& (H)->dynindx == -1 \
|
||||||
&& (TLS_TYPE & GOT_TLS_IE))
|
&& (TLS_TYPE & GOT_TLS_IE))
|
||||||
|
|
||||||
|
/* Verify that the symbol has an entry in the procedure linkage table. */
|
||||||
|
#define VERIFY_PLT_ENTRY(INFO, H, PLT, GOTPLT, RELPLT, LOCAL_UNDEFWEAK) \
|
||||||
|
if (((H)->dynindx == -1 \
|
||||||
|
&& !LOCAL_UNDEFWEAK \
|
||||||
|
&& !(((H)->forced_local || bfd_link_executable (INFO)) \
|
||||||
|
&& (H)->def_regular \
|
||||||
|
&& (H)->type == STT_GNU_IFUNC)) \
|
||||||
|
|| (PLT) == NULL \
|
||||||
|
|| (GOTPLT) == NULL \
|
||||||
|
|| (RELPLT) == NULL) \
|
||||||
|
abort ();
|
||||||
|
|
||||||
/* x86 ELF linker hash entry. */
|
/* x86 ELF linker hash entry. */
|
||||||
|
|
||||||
struct elf_x86_link_hash_entry
|
struct elf_x86_link_hash_entry
|
||||||
|
Reference in New Issue
Block a user