[binutils-gdb/binutils-2_29-branch] x86-64: Check ELF_COMMON_DEF_P for common symbols
H.J.Lu
hjl@sourceware.org
Sat Sep 2 02:55:00 GMT 2017
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=78a6a9c3a3a37868fd7014a67606281aea1c2c84
commit 78a6a9c3a3a37868fd7014a67606281aea1c2c84
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Fri Sep 1 18:53:26 2017 -0700
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.
(cherry picked from commit ad71ce8de7dba823f5fc478e6d5eba03f1a2e822)
Diff:
---
bfd/ChangeLog | 6 ++++++
bfd/elf64-x86-64.c | 2 +-
ld/ChangeLog | 7 +++++++
ld/testsuite/ld-x86-64/pr22064a.S | 33 +++++++++++++++++++++++++++++++++
ld/testsuite/ld-x86-64/pr22064b.c | 14 ++++++++++++++
ld/testsuite/ld-x86-64/x86-64.exp | 23 +++++++++++++++++++++++
6 files changed, 84 insertions(+), 1 deletion(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 9314254..b5f1204 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,11 @@
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-01 H.J. Lu <hongjiu.lu@intel.com>
+
PR ld/22061
* elf32-i386.c (elf_i386_link_setup_gnu_properties): Create
.eh_frame section for the second PLT.
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index bc60012..59926b6 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -6181,7 +6181,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);
diff --git a/ld/ChangeLog b/ld/ChangeLog
index f4335cf..24d0ed2 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,12 @@
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-01 H.J. Lu <hongjiu.lu@intel.com>
+
PR ld/22061
* testsuite/ld-i386/ibt-plt-1.d: Pass --hash-style=sysv to ld.
Updated.
diff --git a/ld/testsuite/ld-x86-64/pr22064a.S b/ld/testsuite/ld-x86-64/pr22064a.S
new file mode 100644
index 0000000..8065a11
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr22064a.S
@@ -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
diff --git a/ld/testsuite/ld-x86-64/pr22064b.c b/ld/testsuite/ld-x86-64/pr22064b.c
new file mode 100644
index 0000000..d906545
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr22064b.c
@@ -0,0 +1,14 @@
+int foo[2];
+int bar[2] = { -1, -1 };
+
+int *
+foo_p (void)
+{
+ return foo;
+}
+
+int *
+bar_p (void)
+{
+ return bar;
+}
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 13c68b8..2535fb7 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -1039,6 +1039,20 @@ if { [isnative] && [which $CC] != 0 } {
{{readelf {-n} property-7.r}} \
"property-7b.o" \
] \
+ [list \
+ "Build pr22064a.o" \
+ "" \
+ "" \
+ { pr22064a.S } \
+ ] \
+ [list \
+ "Build pr22064.so" \
+ "-shared" \
+ "-fPIC" \
+ { pr22064b.c } \
+ {} \
+ "pr22064.so" \
+ ] \
]
run_ld_link_exec_tests [list \
@@ -1215,6 +1229,15 @@ if { [isnative] && [which $CC] != 0 } {
{property-x86-2.S property-x86-1.S pass.c property-stack.S} \
"property-5-static" "pass.out" \
] \
+ [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.
More information about the Binutils-cvs
mailing list