[binutils-gdb] COFF: Check for symbols defined in discarded section

H.J.Lu hjl@sourceware.org
Fri Mar 15 14:20:00 GMT 2019


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

commit 2219ae0b0ebe14373850b000c2abaa31dab1d741
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Mar 15 22:19:01 2019 +0800

    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.

Diff:
---
 bfd/ChangeLog  | 8 ++++++++
 bfd/coffgen.c  | 3 +++
 bfd/cofflink.c | 6 +++++-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index b044fad..b019ca6 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2019-03-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	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.
+
 2019-03-15  Alan Modra  <amodra@gmail.com>
 
 	PR 24339
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 5db35c7..ccf4b43 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 e4031b9..ac07d05 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;
 	    }



More information about the Binutils-cvs mailing list