aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/coffcode.h15
2 files changed, 17 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index af09b00..7379e7b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2021-03-04 Jan Beulich <jbeulich@suse.com>
+
+ * coffcode.h (sec_to_styp_flags): Don't set IMAGE_SCN_LNK_* in
+ final PE images.
+
2021-03-04 Alan Modra <amodra@gmail.com>
* rs6000-core.c (rs6000coff_core_p): Correct prototype.
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index 2fd699f..814922e 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -672,22 +672,31 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
/* skip ROM */
/* skip constRUCTOR */
/* skip CONTENTS */
+#ifndef COFF_IMAGE_WITH_PE
+ /* I don't think any of the IMAGE_SCN_LNK_* flags set below should be set
+ when the output is PE. Only object files should have them, for the linker
+ to consume. */
if ((sec_flags & SEC_IS_COMMON) != 0)
styp_flags |= IMAGE_SCN_LNK_COMDAT;
+#endif
if ((sec_flags & SEC_DEBUGGING) != 0)
styp_flags |= IMAGE_SCN_MEM_DISCARDABLE;
- if ((sec_flags & SEC_EXCLUDE) != 0 && !is_dbg)
- styp_flags |= IMAGE_SCN_LNK_REMOVE;
- if ((sec_flags & SEC_NEVER_LOAD) != 0 && !is_dbg)
+ if ((sec_flags & (SEC_EXCLUDE | SEC_NEVER_LOAD)) != 0 && !is_dbg)
+#ifdef COFF_IMAGE_WITH_PE
+ styp_flags |= IMAGE_SCN_MEM_DISCARDABLE;
+#else
styp_flags |= IMAGE_SCN_LNK_REMOVE;
+#endif
/* skip IN_MEMORY */
/* skip SORT */
+#ifndef COFF_IMAGE_WITH_PE
if (sec_flags & SEC_LINK_ONCE)
styp_flags |= IMAGE_SCN_LNK_COMDAT;
if ((sec_flags
& (SEC_LINK_DUPLICATES_DISCARD | SEC_LINK_DUPLICATES_SAME_CONTENTS
| SEC_LINK_DUPLICATES_SAME_SIZE)) != 0)
styp_flags |= IMAGE_SCN_LNK_COMDAT;
+#endif
/* skip LINKER_CREATED */