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:
H.J. Lu
2017-10-06 00:46:56 -07:00
parent e74399c47c
commit f3180fa9ee
4 changed files with 20 additions and 23 deletions

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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