Only discard space for pc-relative relocs symbols
When building PIE, we should only discard space for pc-relative relocs symbols which turn out to need copy relocs. bfd/ PR ld/17827 * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): For PIE, only discard space for pc-relative relocs symbols which turn out to need copy relocs. ld/testsuite/ PR ld/17827 * ld-x86-64/pr17689.out: Updated. * ld-x86-64/pr17689b.S: Likewise. * ld-x86-64/pr17827.rd: New file. * ld-x86-64/x86-64.exp: Run PR ld/17827 test.
This commit is contained in:
parent
b2fb95e006
commit
9d1d54d5a7
7 changed files with 53 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2015-01-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/17827
|
||||||
|
* elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): For PIE,
|
||||||
|
only discard space for pc-relative relocs symbols which turn
|
||||||
|
out to need copy relocs.
|
||||||
|
|
||||||
2015-01-09 Nick Clifton <nickc@redhat.com>
|
2015-01-09 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* tekhex.c (getvalue): Fix thinko in test for correct extraction
|
* tekhex.c (getvalue): Fix thinko in test for correct extraction
|
||||||
|
|
|
@ -2742,13 +2742,23 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
|
||||||
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
|
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
/* For PIE, discard space for relocs against symbols which
|
/* For PIE, discard space for pc-relative relocs against
|
||||||
turn out to need copy relocs. */
|
symbols which turn out to need copy relocs. */
|
||||||
else if (info->executable
|
else if (info->executable
|
||||||
&& (h->needs_copy || eh->needs_copy)
|
&& (h->needs_copy || eh->needs_copy)
|
||||||
&& h->def_dynamic
|
&& h->def_dynamic
|
||||||
&& !h->def_regular)
|
&& !h->def_regular)
|
||||||
eh->dyn_relocs = NULL;
|
{
|
||||||
|
struct elf_dyn_relocs **pp;
|
||||||
|
|
||||||
|
for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
|
||||||
|
{
|
||||||
|
if (p->pc_count != 0)
|
||||||
|
*pp = p->next;
|
||||||
|
else
|
||||||
|
pp = &p->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ELIMINATE_COPY_RELOCS)
|
else if (ELIMINATE_COPY_RELOCS)
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
2015-01-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/17827
|
||||||
|
* ld-x86-64/pr17689.out: Updated.
|
||||||
|
* ld-x86-64/pr17689b.S: Likewise.
|
||||||
|
|
||||||
|
* ld-x86-64/pr17827.rd: New file.
|
||||||
|
|
||||||
|
* ld-x86-64/x86-64.exp: Run PR ld/17827 test.
|
||||||
|
|
||||||
2015-01-08 Jan Beulich <jbeulich@suse.com>
|
2015-01-08 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
* ld-x86-64/pr14207.d: Adjust expecations to cover the
|
* ld-x86-64/pr14207.d: Adjust expecations to cover the
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
PASS
|
PASS
|
||||||
|
PASS
|
||||||
|
|
|
@ -5,8 +5,18 @@ main:
|
||||||
subq $8, %rsp
|
subq $8, %rsp
|
||||||
movq bar_alias(%rip), %rdi
|
movq bar_alias(%rip), %rdi
|
||||||
call foo@PLT
|
call foo@PLT
|
||||||
|
movq ptr(%rip), %rax
|
||||||
|
movq (%rax), %rdi
|
||||||
|
call foo@PLT
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
addq $8, %rsp
|
addq $8, %rsp
|
||||||
ret
|
ret
|
||||||
.size main, .-main
|
.size main, .-main
|
||||||
|
.globl ptr
|
||||||
|
.section .data.rel,"aw",@progbits
|
||||||
|
.align 8
|
||||||
|
.type ptr, @object
|
||||||
|
.size ptr, 8
|
||||||
|
ptr:
|
||||||
|
.quad bar_alias
|
||||||
.section .note.GNU-stack,"",@progbits
|
.section .note.GNU-stack,"",@progbits
|
||||||
|
|
4
ld/testsuite/ld-x86-64/pr17827.rd
Normal file
4
ld/testsuite/ld-x86-64/pr17827.rd
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#failif
|
||||||
|
#...
|
||||||
|
[0-9a-f ]+R_X86_64_NONE.*
|
||||||
|
#...
|
|
@ -432,6 +432,14 @@ if { [isnative] && [which $CC] != 0 } {
|
||||||
{{readelf {-Wr} pr17689.rd}} \
|
{{readelf {-Wr} pr17689.rd}} \
|
||||||
"pr17689" \
|
"pr17689" \
|
||||||
] \
|
] \
|
||||||
|
[list \
|
||||||
|
"Build pr17827 with PIE without -fPIE" \
|
||||||
|
"tmpdir/pr17689.so -pie" \
|
||||||
|
"" \
|
||||||
|
{ pr17689b.S } \
|
||||||
|
{{readelf {-Wr} pr17827.rd}} \
|
||||||
|
"pr17827" \
|
||||||
|
] \
|
||||||
]
|
]
|
||||||
|
|
||||||
run_ld_link_exec_tests [] [list \
|
run_ld_link_exec_tests [] [list \
|
||||||
|
|
Loading…
Reference in a new issue