[PATCH 01/17] ld/PE: adjust .reloc and .edata section flags
Jan Beulich
jbeulich@suse.com
Mon Aug 4 09:13:23 GMT 2025
Both really want to be SEC_DATA, even if _bfd_XXi_swap_scnhdr_out()
makes sure that IMAGE_SCN_CNT_INITIALIZED_DATA is set in the final
section header. Otoh, .reloc - being IMAGE_SCN_MEM_DISCARDABLE at least
by default - shouldn't have SEC_ALLOC set.
In an early form of the patch I also dropped SEC_ALLOC for .reloc. While
I've undone that, I think the then necessary testsuite adjustments still
want retaining:
1) I can't explain why the removal of _both_ SEC_ALLOC and SEC_LOAD for
.reloc causes ld-scripts/provide-8 to XPASS on PE targets. Placing a
symbol outside of the image isn't well-defined in PE anyway though, so
convert the xfail-s to notarget-s.
2) Similarly it's not quite clear why ld-pe/pe-aarch64 fails due to the
SEC_LOAD removal; the expectation of ___tls_end__ where _start should
appear was pretty likely bogus, though. If, due to multiple symbols
sitting at the same address, unpredictable behavior can result, the
expectation needs to be relaxed accordingly. Assuming it's random what
the disassembler picks, allow (about) any symbol to appear there, as
further symbols are at the same address as per the symbol table.
---
#skip may be better than #notarget, except that binutils-common.exp
demands that it only be used "in groups", which isn't the case here.
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -1081,6 +1081,7 @@ build_filler_bfd (bool include_edata)
edata_s = bfd_make_section_old_way (filler_bfd, ".edata");
if (edata_s == NULL
|| !bfd_set_section_flags (edata_s, (SEC_HAS_CONTENTS
+ | SEC_DATA
| SEC_ALLOC
| SEC_LOAD
| SEC_KEEP
@@ -1095,7 +1096,7 @@ build_filler_bfd (bool include_edata)
reloc_s = bfd_make_section_old_way (filler_bfd, ".reloc");
if (reloc_s == NULL
|| !bfd_set_section_flags (reloc_s, (SEC_HAS_CONTENTS
- | SEC_ALLOC
+ | SEC_DATA
| SEC_LOAD
| SEC_KEEP
| SEC_IN_MEMORY)))
--- a/ld/testsuite/ld-pe/pe-aarch64.d
+++ b/ld/testsuite/ld-pe/pe-aarch64.d
@@ -6,7 +6,7 @@
Disassembly of section .text:
-0000000140001000 <___tls_end__>:
+0000000140001000 <_.*>:
140001000: d2800281 mov x1, #0x14 // #20
140001004: 14000001 b 140001008 <foo>
--- a/ld/testsuite/ld-scripts/provide-8.d
+++ b/ld/testsuite/ld-scripts/provide-8.d
@@ -1,7 +1,8 @@
#source: provide-5.s
#ld: -T provide-8.t
#nm: -B
-#xfail: mmix-*-* *-*-pe spu-*-* *-*-mingw* *-*-cygwin
+#xfail: mmix-*-* spu-*-*
+#notarget: *-*-pe *-*-mingw* *-*-cygwin
#...
0+4000 D __FOO
More information about the Binutils
mailing list