aboutsummaryrefslogtreecommitdiff
path: root/gold/script-sections.cc
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2016-12-19 16:37:48 -0800
committerCary Coutant <ccoutant@gmail.com>2016-12-19 17:22:10 -0800
commit412ffd830b94a860e81e8515140ba5ebc5aa82be (patch)
tree0bb7f768ff3401fa8e532e1fb70c7277629e3ab8 /gold/script-sections.cc
parentec5882fbd19a80299e7ae738fca016ef27830ad4 (diff)
downloadgdb-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.cc17
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)
{