x86: Add COPY_INPUT_RELOC_P
Add COPY_INPUT_RELOC_P which returns TRUE if input relocation should be copied to output. * elfxx-x86.h (COPY_INPUT_RELOC_P): New. * elf32-i386.c (elf_i386_relocate_section): Use it. * elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
This commit is contained in:
parent
aebcc8ffd2
commit
e74399c47c
|
@ -1,3 +1,9 @@
|
|||
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elfxx-x86.h (COPY_INPUT_RELOC_P): New.
|
||||
* elf32-i386.c (elf_i386_relocate_section): Use it.
|
||||
* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
|
||||
|
||||
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf32-i386.c (X86_SIZE_TYPE_P): New.
|
||||
|
|
|
@ -2778,12 +2778,7 @@ disallow_got32:
|
|||
|
||||
if (skip)
|
||||
memset (&outrel, 0, sizeof outrel);
|
||||
else if (h != NULL
|
||||
&& h->dynindx != -1
|
||||
&& (r_type == R_386_PC32
|
||||
|| !(bfd_link_executable (info)
|
||||
|| SYMBOLIC_BIND (info, h))
|
||||
|| !h->def_regular))
|
||||
else if (COPY_INPUT_RELOC_P (info, h, r_type))
|
||||
outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
|
||||
else
|
||||
{
|
||||
|
|
|
@ -3126,14 +3126,7 @@ direct:
|
|||
if (skip)
|
||||
memset (&outrel, 0, sizeof outrel);
|
||||
|
||||
/* h->dynindx may be -1 if this symbol was marked to
|
||||
become local. */
|
||||
else if (h != NULL
|
||||
&& h->dynindx != -1
|
||||
&& (X86_PCREL_TYPE_P (r_type)
|
||||
|| !(bfd_link_executable (info)
|
||||
|| SYMBOLIC_BIND (info, h))
|
||||
|| ! h->def_regular))
|
||||
else if (COPY_INPUT_RELOC_P (info, h, r_type))
|
||||
{
|
||||
outrel.r_info = htab->r_info (h->dynindx, r_type);
|
||||
outrel.r_addend = rel->r_addend;
|
||||
|
|
|
@ -143,6 +143,15 @@
|
|||
&& (((EH)->elf.def_dynamic && !(EH)->elf.def_regular) \
|
||||
|| (EH)->elf.root.type == bfd_link_hash_undefined)))
|
||||
|
||||
/* TRUE if this input relocation should be copied to output. H->dynindx
|
||||
may be -1 if this symbol was marked to become local. */
|
||||
#define COPY_INPUT_RELOC_P(INFO, H, R_TYPE) \
|
||||
((H) != NULL \
|
||||
&& (H)->dynindx != -1 \
|
||||
&& (X86_PCREL_TYPE_P (R_TYPE) \
|
||||
|| !(bfd_link_executable (INFO) || SYMBOLIC_BIND ((INFO), (H))) \
|
||||
|| !(H)->def_regular))
|
||||
|
||||
/* TRUE if this is actually a static link, or it is a -Bsymbolic link
|
||||
and the symbol is defined locally, or the symbol was forced to be
|
||||
local because of a version file. */
|
||||
|
|
Loading…
Reference in New Issue