diff options
author | Alan Modra <amodra@gmail.com> | 2019-09-20 14:52:54 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2019-09-20 15:37:11 +0930 |
commit | 4c51dacacf8a97194a1241ad5e1cbf7be00a59a3 (patch) | |
tree | 6f089a1e722057350343f53e8d96468ff3ca8b95 | |
parent | e59a1001222d853f0517c7e974bb51589ba86710 (diff) | |
download | binutils-4c51dacacf8a97194a1241ad5e1cbf7be00a59a3.zip binutils-4c51dacacf8a97194a1241ad5e1cbf7be00a59a3.tar.gz binutils-4c51dacacf8a97194a1241ad5e1cbf7be00a59a3.tar.bz2 |
[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.
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/layout.cc | 1 | ||||
-rw-r--r-- | 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..194d088c 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(); + } } } |