diff options
author | Cary Coutant <ccoutant@gmail.com> | 2016-12-19 16:37:48 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2016-12-19 17:22:10 -0800 |
commit | 412ffd830b94a860e81e8515140ba5ebc5aa82be (patch) | |
tree | 0bb7f768ff3401fa8e532e1fb70c7277629e3ab8 /gold/script-sections.cc | |
parent | ec5882fbd19a80299e7ae738fca016ef27830ad4 (diff) | |
download | gdb-412ffd830b94a860e81e8515140ba5ebc5aa82be.zip gdb-412ffd830b94a860e81e8515140ba5ebc5aa82be.tar.gz gdb-412ffd830b94a860e81e8515140ba5ebc5aa82be.tar.bz2 |
Fix problem where linker does not place .note sections according to script.
gold/
PR gold/14676
PR gold/20983
* layout.h (Layout::choose_output_section): Add match_input_spec
parameter. Adjust all callers.
* layout.cc (Layout::choose_output_section): Likewise. Pass
match_input_spec to Script_sections::output_section_name().
(Layout::create_note): Pass true for match_input_spec.
* script-sections.h (Script_sections::output_section_name): Add
match_input_spec parameter.
* script-sections.cc (Sections_element::output_section_name): Likewise.
(Output_section_definition::output_section_name): Likewise.
(Script_sections::output_section_name): Likewise.
Diffstat (limited to 'gold/script-sections.cc')
-rw-r--r-- | gold/script-sections.cc | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/gold/script-sections.cc b/gold/script-sections.cc index ffd4666..3acb39b 100644 --- a/gold/script-sections.cc +++ b/gold/script-sections.cc @@ -632,7 +632,7 @@ class Sections_element // Output_section_definition. virtual const char* output_section_name(const char*, const char*, Output_section***, - Script_sections::Section_type*, bool*) + Script_sections::Section_type*, bool*, bool) { return NULL; } // Initialize OSP with an output section. @@ -2003,7 +2003,7 @@ class Output_section_definition : public Sections_element const char* output_section_name(const char* file_name, const char* section_name, Output_section***, Script_sections::Section_type*, - bool*); + bool*, bool); // Initialize OSP with an output section. void @@ -2289,11 +2289,12 @@ Output_section_definition::output_section_name( const char* section_name, Output_section*** slot, Script_sections::Section_type* psection_type, - bool* keep) + bool* keep, + bool match_input_spec) { - // If the input section is linker-created, just look for a match + // If the section is a linker-created output section, just look for a match // on the output section name. - if (file_name == NULL && this->name_ != "/DISCARD/") + if (!match_input_spec && this->name_ != "/DISCARD/") { if (this->name_ != section_name) return NULL; @@ -3568,7 +3569,8 @@ Script_sections::output_section_name( const char* section_name, Output_section*** output_section_slot, Script_sections::Section_type* psection_type, - bool* keep) + bool* keep, + bool is_input_section) { for (Sections_elements::const_iterator p = this->sections_elements_->begin(); p != this->sections_elements_->end(); @@ -3576,7 +3578,8 @@ Script_sections::output_section_name( { const char* ret = (*p)->output_section_name(file_name, section_name, output_section_slot, - psection_type, keep); + psection_type, keep, + is_input_section); if (ret != NULL) { |