[binutils-gdb] [GOLD] Fix spurious "plugin needed to handle lto object" warnings

Alan Modra amodra@sourceware.org
Fri Sep 20 07:35:00 GMT 2019


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

commit 4c51dacacf8a97194a1241ad5e1cbf7be00a59a3
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Sep 20 14:52:54 2019 +0930

    [GOLD] Fix spurious "plugin needed to handle lto object" warnings
    
    lto_slim_object_ was unitialized.  I also thought it worth adding
    a sanity check on the .gnu.lto_.lto.* section size, and made some
    other tidies.
    
    	PR 24768
    	* layout.cc (Layout::Layout): Init lto_slim_object_.
    	* object.cc (Sized_relobj_file::do_layout): Wrap overlong line.
    	Don't use C cast.  Validate section size.  Don't copy contents.

Diff:
---
 gold/ChangeLog |  7 +++++++
 gold/layout.cc |  1 +
 gold/object.cc | 13 +++++++++----
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 8ec7014..37643cc 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,12 @@
 2019-09-20  Alan Modra  <amodra@gmail.com>
 
+	PR 24768
+	* layout.cc (Layout::Layout): Init lto_slim_object_.
+	* object.cc (Sized_relobj_file::do_layout): Wrap overlong line.
+	Don't use C cast.  Validate section size.  Don't copy contents.
+
+2019-09-20  Alan Modra  <amodra@gmail.com>
+
 	* powerpc.cc (Target_powerpc::Scan::check_non_pic): Move REL24
 	to 32-bit supported.
 
diff --git a/gold/layout.cc b/gold/layout.cc
index fc7cdf8..194d088 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -466,6 +466,7 @@ Layout::Layout(int number_of_input_files, Script_options* script_options)
     unique_segment_for_sections_specified_(false),
     incremental_inputs_(NULL),
     record_output_section_data_from_script_(false),
+    lto_slim_object_(false),
     script_output_section_data_list_(),
     segment_states_(NULL),
     relaxation_debug_check_(NULL),
diff --git a/gold/object.cc b/gold/object.cc
index d505ce4..2fca7eb 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -1884,10 +1884,15 @@ Sized_relobj_file<size, big_endian>::do_layout(Symbol_table* symtab,
       if (strncmp (name, lto_section_name, strlen (lto_section_name)) == 0)
 	{
 	  section_size_type contents_len;
-	  const unsigned char* pcontents = this->section_contents(i, &contents_len, false);
-	  struct lto_section lsection = *(const lto_section*)pcontents;
-	  if (lsection.slim_object)
-	    layout->set_lto_slim_object ();
+	  const unsigned char* pcontents
+	    = this->section_contents(i, &contents_len, false);
+	  if (contents_len >= sizeof(lto_section))
+	    {
+	      const lto_section* lsection
+		= reinterpret_cast<const lto_section*>(pcontents);
+	      if (lsection->slim_object)
+		layout->set_lto_slim_object();
+	    }
 	}
     }



More information about the Binutils-cvs mailing list