From 0a9fdbbfd319c09e48ac176fd6386b445534cf42 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 20 Sep 2019 14:52:54 +0930 Subject: [PATCH] [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. (cherry picked from commit 4c51dacacf8a97194a1241ad5e1cbf7be00a59a3) --- 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 77a72e3..d49a37c 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2019-09-20 Alan Modra + + 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-09 Phil Blundell binutils 2.33 branch created. 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::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(pcontents); + if (lsection->slim_object) + layout->set_lto_slim_object(); + } } } -- 2.7.4