diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-10-06 00:40:56 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-10-06 00:41:58 -0700 |
commit | aebcc8ffd201adbee973b414818b01876dabe1a0 (patch) | |
tree | f1df81a7e76c022163872dfc39268a198ac6ffd2 /bfd/elf32-i386.c | |
parent | cf1070f1a1ca1f8be1cd88aa6ece55a25e6a887b (diff) | |
download | gdb-aebcc8ffd201adbee973b414818b01876dabe1a0.zip gdb-aebcc8ffd201adbee973b414818b01876dabe1a0.tar.gz gdb-aebcc8ffd201adbee973b414818b01876dabe1a0.tar.bz2 |
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.c | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index b6c478d..0c63d26 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; |