summaryrefslogtreecommitdiff
path: root/bfd/elf32-i386.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-10-06 00:40:56 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-10-06 00:41:58 -0700
commitaebcc8ffd201adbee973b414818b01876dabe1a0 (patch)
treef1df81a7e76c022163872dfc39268a198ac6ffd2 /bfd/elf32-i386.c
parentcf1070f1a1ca1f8be1cd88aa6ece55a25e6a887b (diff)
x86: Add GENERATE_DYNAMIC_RELOCATION_P
Add GENERATE_DYNAMIC_RELOCATION_P which returns TRUE if dynamic relocation should be generated. * elf32-i386.c (X86_SIZE_TYPE_P): New. (elf_i386_relocate_section): Use GENERATE_DYNAMIC_RELOCATION_P. * elf64-x86-64.c (X86_SIZE_TYPE_P): New. (elf_x86_64_relocate_section): Use GENERATE_DYNAMIC_RELOCATION_P. * elfxx-x86.h (GENERATE_DYNAMIC_RELOCATION_P): New.
Diffstat (limited to 'bfd/elf32-i386.c')
-rw-r--r--bfd/elf32-i386.c28
1 files changed, 5 insertions, 23 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index b6c478d901..0c63d26744 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -184,6 +184,8 @@ static reloc_howto_type elf_howto_table[]=
#define X86_PCREL_TYPE_P(TYPE) ((TYPE) == R_386_PC32)
+#define X86_SIZE_TYPE_P(TYPE) ((TYPE) == R_386_SIZE32)
+
#ifdef DEBUG_GEN_RELOC
#define TRACE(str) \
fprintf (stderr, "i386 bfd reloc lookup %d (%s)\n", code, str)
@@ -2749,29 +2751,9 @@ disallow_got32:
|| is_vxworks_tls)
break;
- /* Copy dynamic function pointer relocations. Don't generate
- dynamic relocations against resolved undefined weak symbols
- in PIE, except for R_386_PC32. */
- if ((bfd_link_pic (info)
- && (h == NULL
- || ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
- && (!resolved_to_zero
- || r_type == R_386_PC32))
- || h->root.type != bfd_link_hash_undefweak))
- && ((r_type != R_386_PC32 && r_type != R_386_SIZE32)
- || !SYMBOL_CALLS_LOCAL (info, h)))
- || (ELIMINATE_COPY_RELOCS
- && !bfd_link_pic (info)
- && h != NULL
- && h->dynindx != -1
- && (!h->non_got_ref
- || eh->func_pointer_refcount > 0
- || (h->root.type == bfd_link_hash_undefweak
- && !resolved_to_zero))
- && ((h->def_dynamic && !h->def_regular)
- /* Undefined weak symbol is bound locally when
- PIC is false. */
- || h->root.type == bfd_link_hash_undefweak)))
+ if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type,
+ FALSE, resolved_to_zero,
+ (r_type == R_386_PC32)))
{
Elf_Internal_Rela outrel;
bfd_boolean skip, relocate;