]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
ld/PE: adjust .reloc and .edata section flags
authorJan Beulich <jbeulich@suse.com>
Fri, 10 Oct 2025 13:57:36 +0000 (15:57 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 10 Oct 2025 13:57:36 +0000 (15:57 +0200)
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) The ld-pe/pe-aarch64 fragility is now dealt with in a separate patch.

ld/pe-dll.c
ld/testsuite/ld-scripts/provide-8.d

index c730b54750208e501d8f4caf31304ee886249526..2ce8ac5c81722624d8a702fada9d7614fdd9fd94 100644 (file)
@@ -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)))
index 1dd5553ed32b4d4dcfd0e64aca8893dce4516c9d..250b0441479762b541e0749fdb90a3fbabbdc40a 100644 (file)
@@ -1,7 +1,9 @@
 #source: provide-5.s
 #ld: -T provide-8.t
 #nm: -B
-#xfail: mmix-*-* *-*-pe spu-*-* *-*-mingw* *-*-cygwin
+#xfail: mmix-*-* spu-*-*
+# Placing a symbol outside of the image isn't well-defined in PE.
+#notarget: *-*-pe *-*-mingw* *-*-cygwin
 
 #...
 0+4000 D __FOO