public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] ld/elf: Ignore section symbols when matching linkonce with comdat
@ 2021-01-16 23:51 H.J. Lu
  2021-01-18  3:53 ` Alan Modra
  2021-01-18 11:47 ` Nick Clifton
  0 siblings, 2 replies; 4+ messages in thread
From: H.J. Lu @ 2021-01-16 23:51 UTC (permalink / raw)
  To: binutils

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 decision.

This patch applies to both master and 2.36 branch.


H.J.
---
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.
---
 bfd/elflink.c                       |   6 +++++-
 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 ++++++++
 5 files changed, 23 insertions(+), 1 deletion(-)
 create mode 100644 ld/testsuite/ld-i386/pr27193.dd
 create mode 100644 ld/testsuite/ld-i386/pr27193a.o.bz2
 create mode 100644 ld/testsuite/ld-i386/pr27193b.s

diff --git a/bfd/elflink.c b/bfd/elflink.c
index 8794864f54c..59a6080f37a 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/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index f3e62a4151e..0be6b861dab 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..a9ba40bbb7c
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr27193.dd
@@ -0,0 +1,5 @@
+#...
+0+1040 <__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 0000000000000000000000000000000000000000..365899db9d58abcbf8e737299a223aa50407e56e
GIT binary patch
literal 468
zcmV;_0W1DOT4*^jL0KkKS<U*Xy8r=xf8YQ9@f~E(ML>7Ojs*Yj-(ac?00aO8NB}?p
z07L);umN?0FiMDRP)(@xo<!3onmr>=Q$~O=OpJpd0QDcL15-w$6vQW@8fm6zMw%K7
zO${1kWE&*WkPH$elx;xC>SzrO00000XaE3c271PG$qOd15}`;w09K>j+GS?(Fg#Et
zDNC=zt1iM9j(#fpHutck6^9(wuN%UFEJX~>q?`!grAZvpt!xM?N04{%VPev9Rh<;7
zUKa6bTf!1SCXx%Wr9|;FB+_+a8n(uU(rqUwNFj!cI+`RoG$I&-OI8I#7FCLcx0YWy
zNwjNC7QEylt>aFK1=~fNJU=;<xhYp?*@Xx<u*CujV-+@v8Y{FSw+HDUQw&(+N_L#_
z16l9wlA7hphDUFGIkt!8u0(u5tz7j82i1&35+uHu{MYxIK;&FGTPispCasm&rRIey
zHO<^q1RNy|8Nr5w2<^ItBjhnoo2>d80-kx)5neGUdINGJ6V|H(C(9{-EQ@0$wK{;p
z9U?j}VfvWtt4mrVUa1iKkS+2QpgKVLQUQj7YWf^96L{9bCbVlhJBFXCd{^?n#oUoj
K6eKf#s&2sVqr?CJ

literal 0
HcmV?d00001

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
-- 
2.29.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ld/elf: Ignore section symbols when matching linkonce with comdat
  2021-01-16 23:51 [PATCH] ld/elf: Ignore section symbols when matching linkonce with comdat H.J. Lu
@ 2021-01-18  3:53 ` Alan Modra
  2021-01-18  4:03   ` H.J. Lu
  2021-01-18 11:47 ` Nick Clifton
  1 sibling, 1 reply; 4+ messages in thread
From: Alan Modra @ 2021-01-18  3:53 UTC (permalink / raw)
  To: H.J. Lu; +Cc: binutils, Nick Clifton

On Sat, Jan 16, 2021 at 03:51:24PM -0800, H.J. Lu wrote:
> 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.

OK.  I do think it would have been better to wait until 2.35 branched
before "ELF: Don't generate unused section symbols" was committed.

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ld/elf: Ignore section symbols when matching linkonce with comdat
  2021-01-18  3:53 ` Alan Modra
@ 2021-01-18  4:03   ` H.J. Lu
  0 siblings, 0 replies; 4+ messages in thread
From: H.J. Lu @ 2021-01-18  4:03 UTC (permalink / raw)
  To: Alan Modra; +Cc: Binutils, Nick Clifton

On Sun, Jan 17, 2021 at 7:53 PM Alan Modra <amodra@gmail.com> wrote:
>
> On Sat, Jan 16, 2021 at 03:51:24PM -0800, H.J. Lu wrote:
> > 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.
>
> OK.  I do think it would have been better to wait until 2.35 branched
> before "ELF: Don't generate unused section symbols" was committed.
>

True.  Timing isn't great.  Here is another patch for master and 2.36 branch:

https://sourceware.org/pipermail/binutils/2021-January/114980.html

-- 
H.J.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ld/elf: Ignore section symbols when matching linkonce with comdat
  2021-01-16 23:51 [PATCH] ld/elf: Ignore section symbols when matching linkonce with comdat H.J. Lu
  2021-01-18  3:53 ` Alan Modra
@ 2021-01-18 11:47 ` Nick Clifton
  1 sibling, 0 replies; 4+ messages in thread
From: Nick Clifton @ 2021-01-18 11:47 UTC (permalink / raw)
  To: H.J. Lu, binutils

Hi H.J.

> 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.

Approved for 2.36 branch.

Cheers
   Nick


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-01-18 11:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-16 23:51 [PATCH] ld/elf: Ignore section symbols when matching linkonce with comdat H.J. Lu
2021-01-18  3:53 ` Alan Modra
2021-01-18  4:03   ` H.J. Lu
2021-01-18 11:47 ` Nick Clifton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).