x86-64: Check ELF_COMMON_DEF_P for common symbols
bfd/ PR ld/22064 * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Check ELF_COMMON_DEF_P for common symbols. ld/ PR ld/22064 * testsuite/ld-x86-64/pr22064a.S: New file. * testsuite/ld-x86-64/pr22064b.c: Likewise. * testsuite/ld-x86-64/x86-64.exp: Run PR ld/22064 test.
This commit is contained in:
parent
96d01d93c4
commit
ad71ce8de7
@ -1,3 +1,9 @@
|
||||
2017-09-01 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/22064
|
||||
* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Check
|
||||
ELF_COMMON_DEF_P for common symbols.
|
||||
|
||||
2017-09-02 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf-eh-frame.c (offset_adjust): Avoid false positive gcc warning.
|
||||
|
@ -5330,7 +5330,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
|
||||
else if (bfd_link_pic (info)
|
||||
&& SYMBOL_REFERENCES_LOCAL (info, h))
|
||||
{
|
||||
if (!h->def_regular)
|
||||
if (!(h->def_regular || ELF_COMMON_DEF_P (h)))
|
||||
return FALSE;
|
||||
BFD_ASSERT((h->got.offset & 1) != 0);
|
||||
rela.r_info = htab->r_info (0, R_X86_64_RELATIVE);
|
||||
|
@ -1,3 +1,10 @@
|
||||
2017-09-01 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/22064
|
||||
* testsuite/ld-x86-64/pr22064a.S: New file.
|
||||
* testsuite/ld-x86-64/pr22064b.c: Likewise.
|
||||
* testsuite/ld-x86-64/x86-64.exp: Run PR ld/22064 test.
|
||||
|
||||
2017-09-02 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* emultempl/msp430.em (eval_upper_either_sections): Make base_sec_name
|
||||
|
33
ld/testsuite/ld-x86-64/pr22064a.S
Normal file
33
ld/testsuite/ld-x86-64/pr22064a.S
Normal file
@ -0,0 +1,33 @@
|
||||
.section .rodata.str1.1,"aMS",@progbits,1
|
||||
.LC0:
|
||||
.string "PASS"
|
||||
.text
|
||||
.globl main
|
||||
.type main, @function
|
||||
main:
|
||||
movq foo@GOTPCREL(%rip), %rax
|
||||
cmpl $0, (%rax)
|
||||
jne .L4
|
||||
subq $8, %rsp
|
||||
call foo_p@PLT
|
||||
cmpq foo@GOTPCREL(%rip), %rax
|
||||
jne .L2
|
||||
movq bar@GOTPCREL(%rip), %rax
|
||||
cmpl $-1, (%rax)
|
||||
jne .L2
|
||||
call bar_p@PLT
|
||||
cmpq bar@GOTPCREL(%rip), %rax
|
||||
jne .L2
|
||||
leaq .LC0(%rip), %rdi
|
||||
call puts@PLT
|
||||
.L2:
|
||||
movl $0, %eax
|
||||
addq $8, %rsp
|
||||
ret
|
||||
.L4:
|
||||
movl $0, %eax
|
||||
ret
|
||||
.size main, .-main
|
||||
.comm bar,8,4
|
||||
.comm foo,4,4
|
||||
.section .note.GNU-stack,"",@progbits
|
14
ld/testsuite/ld-x86-64/pr22064b.c
Normal file
14
ld/testsuite/ld-x86-64/pr22064b.c
Normal file
@ -0,0 +1,14 @@
|
||||
int foo[2];
|
||||
int bar[2] = { -1, -1 };
|
||||
|
||||
int *
|
||||
foo_p (void)
|
||||
{
|
||||
return foo;
|
||||
}
|
||||
|
||||
int *
|
||||
bar_p (void)
|
||||
{
|
||||
return bar;
|
||||
}
|
@ -1073,6 +1073,20 @@ if { [isnative] && [which $CC] != 0 } {
|
||||
{{error_output "pr21997-1a.err"}} \
|
||||
"pr21997-1a" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr22064a.o" \
|
||||
"" \
|
||||
"" \
|
||||
{ pr22064a.S } \
|
||||
] \
|
||||
[list \
|
||||
"Build pr22064.so" \
|
||||
"-shared" \
|
||||
"-fPIC" \
|
||||
{ pr22064b.c } \
|
||||
{} \
|
||||
"pr22064.so" \
|
||||
] \
|
||||
]
|
||||
|
||||
if {[istarget "x86_64-*-linux*-gnux32"]} {
|
||||
@ -1363,6 +1377,15 @@ if { [isnative] && [which $CC] != 0 } {
|
||||
"pass.out" \
|
||||
"-fPIC" \
|
||||
] \
|
||||
[list \
|
||||
"Run pr22064" \
|
||||
"-pie -Wl,--no-as-needed tmpdir/pr22064a.o tmpdir/pr22064.so" \
|
||||
"" \
|
||||
{ dummy.s } \
|
||||
"pr22064-pie" \
|
||||
"pass.out" \
|
||||
"-fPIE" \
|
||||
] \
|
||||
]
|
||||
|
||||
# Run-time tests which require working ifunc attribute support.
|
||||
|
Loading…
x
Reference in New Issue
Block a user