File 0001-COFF-Check-for-symbols-defined-in-discarded-section.patch of Package mingw64-binutils
From 2219ae0b0ebe14373850b000c2abaa31dab1d741 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Fri, 15 Mar 2019 22:19:01 +0800
Subject: [PATCH] COFF: Check for symbols defined in discarded section
For LTO, a symbol may defined in discarded section. We should mark it
as undefined so that LTO plugin will make IR definition available.
PR ld/24267
* coffgen.c (_bfd_coff_section_already_linked): Skip discarded
section.
* cofflink.c (coff_link_add_symbols): Check for symbols defined
in discarded section.
---
bfd/ChangeLog | 8 ++++++++
bfd/coffgen.c | 3 +++
bfd/cofflink.c | 6 +++++-
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 5db35c7ddf..ccf4b4302c 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -2652,6 +2652,9 @@ _bfd_coff_section_already_linked (bfd *abfd,
struct bfd_section_already_linked_hash_entry *already_linked_list;
struct coff_comdat_info *s_comdat;
+ if (sec->output_section == bfd_abs_section_ptr)
+ return FALSE;
+
flags = sec->flags;
if ((flags & SEC_LINK_ONCE) == 0)
return FALSE;
diff --git a/bfd/cofflink.c b/bfd/cofflink.c
index e4031b9a31..ac07d05e57 100644
--- a/bfd/cofflink.c
+++ b/bfd/cofflink.c
@@ -310,7 +310,9 @@ coff_link_add_symbols (bfd *abfd,
case COFF_SYMBOL_GLOBAL:
flags = BSF_EXPORT | BSF_GLOBAL;
section = coff_section_from_bfd_index (abfd, sym.n_scnum);
- if (! obj_pe (abfd))
+ if (discarded_section (section))
+ section = bfd_und_section_ptr;
+ else if (! obj_pe (abfd))
value -= section->vma;
break;
@@ -327,6 +329,8 @@ coff_link_add_symbols (bfd *abfd,
case COFF_SYMBOL_PE_SECTION:
flags = BSF_SECTION_SYM | BSF_GLOBAL;
section = coff_section_from_bfd_index (abfd, sym.n_scnum);
+ if (discarded_section (section))
+ section = bfd_und_section_ptr;
break;
}
--
2.21.0