Browse Source
We shouldn't issue an error for read-only segment with dynamic IFUNC relocations when dynamic relocations are against normal symbols. bfd/ PR ld/19939 * elf-bfd.h (_bfd_elf_allocate_ifunc_dyn_relocs): Add a pointer to bfd_boolean. * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Updated. Set *readonly_dynrelocs_against_ifunc_p to TRUE if dynamic reloc applies to read-only section. * elf32-i386.c (elf_i386_link_hash_table): Add readonly_dynrelocs_against_ifunc. (elf_i386_allocate_dynrelocs): Updated. (elf_i386_size_dynamic_sections): Issue an error for read-only segment with dynamic IFUNC relocations only if readonly_dynrelocs_against_ifunc is TRUE. * elf64-x86-64.c (elf_x86_64_link_hash_table): Add readonly_dynrelocs_against_ifunc. (elf_x86_64_allocate_dynrelocs): Updated. (elf_x86_64_size_dynamic_sections): Issue an error for read-only segment with dynamic IFUNC relocations only if readonly_dynrelocs_against_ifunc is TRUE. * elfnn-aarch64.c (elfNN_aarch64_allocate_ifunc_dynrelocs): Updated. ld/ PR ld/19939 * testsuite/ld-i386/i386.exp: Run PR ld/19939 tests. * testsuite/ld-x86-64/x86-64.exp: Likewise. * testsuite/ld-i386/pr19939.s: New file. * testsuite/ld-i386/pr19939a.d: Likewise. * testsuite/ld-i386/pr19939b.d: Likewise. * testsuite/ld-x86-64/pr19939.s: Likewise. * testsuite/ld-x86-64/pr19939a.d: Likewise. * testsuite/ld-x86-64/pr19939b.d: Likewise.binutils-2_27-branch
15 changed files with 110 additions and 6 deletions
@ -0,0 +1,9 @@ |
|||
.text |
|||
selector: |
|||
movl foo@GOT(%eax), %eax |
|||
mov $bar, %ebx |
|||
ret |
|||
.type selector, %gnu_indirect_function |
|||
.globl bar |
|||
bar: |
|||
jmp selector@PLT |
|||
@ -0,0 +1,4 @@ |
|||
#source: pr19939.s |
|||
#as: --32 |
|||
#ld: -melf_i386 -shared -z defs |
|||
#error: undefined reference to `foo' |
|||
@ -0,0 +1,8 @@ |
|||
#source: pr19939.s |
|||
#as: --32 |
|||
#ld: -melf_i386 -shared |
|||
#readelf: -d --wide |
|||
|
|||
#... |
|||
.*\(TEXTREL\).* |
|||
#pass |
|||
@ -0,0 +1,9 @@ |
|||
.text |
|||
selector: |
|||
movq foo@GOTPCREL(%rip), %rax |
|||
movabs $bar, %rbx |
|||
ret |
|||
.type selector, %gnu_indirect_function |
|||
.globl bar |
|||
bar: |
|||
jmp selector@PLT |
|||
@ -0,0 +1,4 @@ |
|||
#source: pr19939.s |
|||
#as: --64 |
|||
#ld: -melf_x86_64 -shared -z defs |
|||
#error: undefined reference to `foo' |
|||
@ -0,0 +1,8 @@ |
|||
#source: pr19939.s |
|||
#as: --64 |
|||
#ld: -melf_x86_64 -shared |
|||
#readelf: -d --wide |
|||
|
|||
#... |
|||
.*\(TEXTREL\).* |
|||
#pass |
|||
Loading…
Reference in new issue