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>
* 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;
}
/* This symbol has an entry in the procedure linkage table. Set
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 ();
VERIFY_PLT_ENTRY (info, h, plt, gotplt, relplt, local_undefweak)
/* Get the index in the procedure linkage table which
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;
}
/* This symbol has an entry in the procedure linkage table. Set
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 ();
VERIFY_PLT_ENTRY (info, h, plt, gotplt, relplt, local_undefweak)
/* Get the index in the procedure linkage table which
corresponds to this symbol. This is the index of this symbol

View File

@ -196,6 +196,18 @@
&& (H)->dynindx == -1 \
&& (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. */
struct elf_x86_link_hash_entry