aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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