[binutils-gdb] elf: Clear entsize when clearing SEC_MERGE|SEC_STRINGS

H.J. Lu hjl@sourceware.org
Wed Aug 20 23:28:08 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9c0adb10c7fcfb5a317095201cf144cdada6ca08

commit 9c0adb10c7fcfb5a317095201cf144cdada6ca08
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Wed Aug 20 12:27:53 2025 -0700

    elf: Clear entsize when clearing SEC_MERGE|SEC_STRINGS
    
    When generating an output from input SEC_MERGE|SEC_STRINGS sections with
    different entsizes, we clear the SEC_MERGE|SEC_STRINGS bits.  We also need
    to clear entsize.
    
            PR ld/33291
            * ldlang.c (lang_add_section): Clearing entsize when clearing
            SEC_MERGE|SEC_STRINGS.
            * testsuite/ld-elf/pr33291.d: New file.
            * testsuite/ld-elf/pr33291a.s: Likewise.
            * testsuite/ld-elf/pr33291b.s: Likewise.
    
    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>

Diff:
---
 ld/ldlang.c                    | 1 +
 ld/testsuite/ld-elf/pr33291.d  | 9 +++++++++
 ld/testsuite/ld-elf/pr33291a.s | 8 ++++++++
 ld/testsuite/ld-elf/pr33291b.s | 7 +++++++
 4 files changed, 25 insertions(+)

diff --git a/ld/ldlang.c b/ld/ldlang.c
index 8ba95b04e23..0bb4a17df19 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -2861,6 +2861,7 @@ lang_add_section (lang_statement_list_type *ptr,
 	      && output->bfd_section->entsize != section->entsize))
 	{
 	  output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
+	  output->bfd_section->entsize = 0;
 	  flags &= ~ (SEC_MERGE | SEC_STRINGS);
 	}
     }
diff --git a/ld/testsuite/ld-elf/pr33291.d b/ld/testsuite/ld-elf/pr33291.d
new file mode 100644
index 00000000000..22a83361e63
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr33291.d
@@ -0,0 +1,9 @@
+#source: pr33291a.s
+#source: pr33291b.s
+#ld: -shared
+#readelf: -S --wide
+#xfail: ![check_shared_lib_support]
+
+#...
+  \[[ 0-9]+\] \.rodata[ 	]+PROGBITS[ 	]+[0-9a-f]+ [0-9a-f]+ 0+9 00 +A +0 +0 +8
+#...
diff --git a/ld/testsuite/ld-elf/pr33291a.s b/ld/testsuite/ld-elf/pr33291a.s
new file mode 100644
index 00000000000..587c0fb05dd
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr33291a.s
@@ -0,0 +1,8 @@
+	.globl	foo
+	.section	.rodata.cst8,"aM",%progbits,8
+	.p2align 3
+	.type	foo, %object
+	.size	foo, 8
+foo:
+	.quad	131073
+	.section	.note.GNU-stack,"",%progbits
diff --git a/ld/testsuite/ld-elf/pr33291b.s b/ld/testsuite/ld-elf/pr33291b.s
new file mode 100644
index 00000000000..69f6b3db594
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr33291b.s
@@ -0,0 +1,7 @@
+	.globl	bar
+	.section	.rodata.cst1,"aM",%progbits,1
+	.type	bar, %object
+	.size	bar, 1
+bar:
+	.byte	1
+	.section	.note.GNU-stack,"",%progbits


More information about the Binutils-cvs mailing list