From ef3816215dfa95a298d26bad0be8ccf7cb74153f Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 10 Oct 2025 15:58:30 +0200 Subject: [PATCH] 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. --- 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 -- 2.47.3