[binutils-gdb] bfd / PE/COFF: avoid setting SEC_ALLOC when finding IMAGE_SCN_MEM_DISCARDABLE

Jan Beulich jbeulich@sourceware.org
Fri Oct 10 14:05:02 GMT 2025


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

commit ef3816215dfa95a298d26bad0be8ccf7cb74153f
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Oct 10 15:58:30 2025 +0200

    bfd / PE/COFF: avoid setting SEC_ALLOC when finding IMAGE_SCN_MEM_DISCARDABLE
    
    Before teaching _bfd_XXi_swap_scnhdr_out() to respect SEC_ALLOC when
    considering whether to force IMAGE_SCN_MEM_DISCARDABLE for a section,
    make sure we won't "invert" present wrong behavior when transforming an
    incoming object's section attributes to an outgoing one's (objcopy or
    "ld -r"): Right now, IMAGE_SCN_MEM_DISCARDABLE would appear out of the
    blue for certain sections. We don't want the opposite, though, i.e. we
    want avoid silently dropping IMAGE_SCN_MEM_DISCARDABLE when it's present
    for an incoming object's section.

Diff:
---
 bfd/coffcode.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index 4a1f4be3773..a466af19736 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -1347,6 +1347,11 @@ styp_to_sec_flags (bfd *abfd,
 	  || startswith (name, ".sdata")))
     sec_flags |= SEC_SMALL_DATA;
 
+  /* As there is no internal representation of the "discardable" flag,
+     reflect it by keeping SEC_ALLOC clear.  */
+  if (internal_s->s_flags & IMAGE_SCN_MEM_DISCARDABLE)
+    sec_flags &= ~SEC_ALLOC;
+
 #if defined (COFF_LONG_SECTION_NAMES) && defined (COFF_SUPPORT_GNU_LINKONCE)
   /* As a GNU extension, if the name begins with .gnu.linkonce, we
      only link a single copy of the section.  This is used to support


More information about the Binutils-cvs mailing list