[binutils-gdb/binutils-2_36-branch] ld/elf: Ignore section symbols when matching linkonce with comdat
H.J. Lu
hjl@sourceware.org
Mon Jan 18 12:53:35 GMT 2021
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=31768fcb32e1d72fa99fdcedfc967f5437ef81a5
commit 31768fcb32e1d72fa99fdcedfc967f5437ef81a5
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Sun Jan 17 20:01:16 2021 -0800
ld/elf: Ignore section symbols when matching linkonce with comdat
When deciding if a single member comdat group section in file FOO should
be discarded by a linkonce section in file BAR, we check if 2 sections
define the same set of local and global symbols. When only one of the
files doesn't contain the unused section symbols in the symbol table,
such as object files generated by clang or GNU assembler with
commit d1bcae833b32f1408485ce69f844dcd7ded093a8
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Jan 7 06:42:00 2021 -0800
ELF: Don't generate unused section symbols
the check will fail since one file has the extra unused section symbols.
We should ignore both undefined and section symbols in the symbol table
when making such a decision.
bfd/
PR ld/27193
* elflink.c (elf_create_symbuf): Also ignore section symbols.
ld/
PR ld/27193
* testsuite/ld-i386/i386.exp: Run PR ld/27193 test.
* testsuite/ld-i386/pr27193.dd: New file.
* testsuite/ld-i386/pr27193a.o.bz2: Likewise.
* testsuite/ld-i386/pr27193b.s: Likewise.
(cherry picked from commit 994b25132814f4c2be93ce53a616a74139c4cf3c)
Diff:
---
bfd/ChangeLog | 5 +++++
bfd/elflink.c | 6 +++++-
ld/ChangeLog | 8 ++++++++
ld/testsuite/ld-i386/i386.exp | 5 +++++
ld/testsuite/ld-i386/pr27193.dd | 5 +++++
ld/testsuite/ld-i386/pr27193a.o.bz2 | Bin 0 -> 468 bytes
ld/testsuite/ld-i386/pr27193b.s | 8 ++++++++
7 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 4af18e9bc90..eeb5fb4632f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2021-01-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/27193
+ * elflink.c (elf_create_symbuf): Also ignore section symbols.
+
2021-01-18 H.J. Lu <hongjiu.lu@intel.com>
PR ld/23169
diff --git a/bfd/elflink.c b/bfd/elflink.c
index acc959d526a..27564adb8c3 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -8126,8 +8126,12 @@ elf_create_symbuf (size_t symcount, Elf_Internal_Sym *isymbuf)
if (indbuf == NULL)
return NULL;
+ /* NB: When checking if 2 sections define the same set of local and
+ global symbols, ignore both undefined and section symbols in the
+ symbol table. */
for (ind = indbuf, i = 0; i < symcount; i++)
- if (isymbuf[i].st_shndx != SHN_UNDEF)
+ if (isymbuf[i].st_shndx != SHN_UNDEF
+ && ELF_ST_TYPE (isymbuf[i].st_info) != STT_SECTION)
*ind++ = &isymbuf[i];
indbufend = ind;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 6bd5477229d..6b437fed243 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2021-01-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/27193
+ * testsuite/ld-i386/i386.exp: Run PR ld/27193 test.
+ * testsuite/ld-i386/pr27193.dd: New file.
+ * testsuite/ld-i386/pr27193a.o.bz2: Likewise.
+ * testsuite/ld-i386/pr27193b.s: Likewise.
+
2021-01-18 H.J. Lu <hongjiu.lu@intel.com>
PR ld/23169
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index 655f83df53a..9bfc70c9fb9 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -245,6 +245,11 @@ set i386tests {
"-melf_i386 -shared -Bsymbolic -z notext" ""
"--32 -mx86-used-note=yes"
{ pr19827a.S } {{readelf {-rW} pr19827.rd}} "pr19827.so"}
+ {"Build pr27193.so"
+ "-melf_i386 -shared" ""
+ "--32"
+ { pr27193a.o.bz2 pr27193b.s }
+ {{objdump {-dw} pr27193.dd}} "pr27193.so"}
}
proc iamcu_tests {} {
diff --git a/ld/testsuite/ld-i386/pr27193.dd b/ld/testsuite/ld-i386/pr27193.dd
new file mode 100644
index 00000000000..7d1e7993de0
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr27193.dd
@@ -0,0 +1,5 @@
+#...
+0+[a-f0-9]+ <__x86.get_pc_thunk.bx>:
+ +[a-f0-9]+: 8b 1c 24 mov \(%esp\),%ebx
+ +[a-f0-9]+: c3 ret
+#pass
diff --git a/ld/testsuite/ld-i386/pr27193a.o.bz2 b/ld/testsuite/ld-i386/pr27193a.o.bz2
new file mode 100644
index 00000000000..365899db9d5
Binary files /dev/null and b/ld/testsuite/ld-i386/pr27193a.o.bz2 differ
diff --git a/ld/testsuite/ld-i386/pr27193b.s b/ld/testsuite/ld-i386/pr27193b.s
new file mode 100644
index 00000000000..9b27a6f7631
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr27193b.s
@@ -0,0 +1,8 @@
+ .section .text.__x86.get_pc_thunk.bx,"axG",%progbits,__x86.get_pc_thunk.bx,comdat
+ .globl __x86.get_pc_thunk.bx
+ .hidden __x86.get_pc_thunk.bx
+ .type __x86.get_pc_thunk.bx, %function
+ .p2align 4
+__x86.get_pc_thunk.bx:
+ mov (%esp),%ebx
+ ret
More information about the Binutils-cvs
mailing list