[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