aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2021-01-17 20:01:16 -0800
committerH.J. Lu <hjl.tools@gmail.com>2021-01-17 20:01:30 -0800
commit994b25132814f4c2be93ce53a616a74139c4cf3c (patch)
tree1b04e54141f4a3bc8179260b36ebf4bd480521cb
parent25294ff049728a081c703b68f848d2cc04eef483 (diff)
downloadfsf-binutils-gdb-994b25132814f4c2be93ce53a616a74139c4cf3c.zip
fsf-binutils-gdb-994b25132814f4c2be93ce53a616a74139c4cf3c.tar.gz
fsf-binutils-gdb-994b25132814f4c2be93ce53a616a74139c4cf3c.tar.bz2
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.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elflink.c6
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/testsuite/ld-i386/i386.exp5
-rw-r--r--ld/testsuite/ld-i386/pr27193.dd5
-rw-r--r--ld/testsuite/ld-i386/pr27193a.o.bz2bin0 -> 468 bytes
-rw-r--r--ld/testsuite/ld-i386/pr27193b.s8
7 files changed, 36 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index dbb240a..b947c51 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2021-01-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/27193
+ * elflink.c (elf_create_symbuf): Also ignore section symbols.
+
2021-01-16 H.J. Lu <hongjiu.lu@intel.com>
PR ld/23169
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 8794864..59a6080 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 6b602d6..92fa8a4 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2021-01-17 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-16 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/23460
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index f3e62a4..0be6b86 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 0000000..7d1e799
--- /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 0000000..365899d
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr27193a.o.bz2
Binary files differ
diff --git a/ld/testsuite/ld-i386/pr27193b.s b/ld/testsuite/ld-i386/pr27193b.s
new file mode 100644
index 0000000..9b27a6f
--- /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