mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
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:
@ -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>
|
2017-09-02 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* elf-eh-frame.c (offset_adjust): Avoid false positive gcc warning.
|
* 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)
|
else if (bfd_link_pic (info)
|
||||||
&& SYMBOL_REFERENCES_LOCAL (info, h))
|
&& SYMBOL_REFERENCES_LOCAL (info, h))
|
||||||
{
|
{
|
||||||
if (!h->def_regular)
|
if (!(h->def_regular || ELF_COMMON_DEF_P (h)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
BFD_ASSERT((h->got.offset & 1) != 0);
|
BFD_ASSERT((h->got.offset & 1) != 0);
|
||||||
rela.r_info = htab->r_info (0, R_X86_64_RELATIVE);
|
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>
|
2017-09-02 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* emultempl/msp430.em (eval_upper_either_sections): Make base_sec_name
|
* 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"}} \
|
{{error_output "pr21997-1a.err"}} \
|
||||||
"pr21997-1a" \
|
"pr21997-1a" \
|
||||||
] \
|
] \
|
||||||
|
[list \
|
||||||
|
"Build pr22064a.o" \
|
||||||
|
"" \
|
||||||
|
"" \
|
||||||
|
{ pr22064a.S } \
|
||||||
|
] \
|
||||||
|
[list \
|
||||||
|
"Build pr22064.so" \
|
||||||
|
"-shared" \
|
||||||
|
"-fPIC" \
|
||||||
|
{ pr22064b.c } \
|
||||||
|
{} \
|
||||||
|
"pr22064.so" \
|
||||||
|
] \
|
||||||
]
|
]
|
||||||
|
|
||||||
if {[istarget "x86_64-*-linux*-gnux32"]} {
|
if {[istarget "x86_64-*-linux*-gnux32"]} {
|
||||||
@ -1363,6 +1377,15 @@ if { [isnative] && [which $CC] != 0 } {
|
|||||||
"pass.out" \
|
"pass.out" \
|
||||||
"-fPIC" \
|
"-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.
|
# Run-time tests which require working ifunc attribute support.
|
||||||
|
Reference in New Issue
Block a user