summaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2023-03-27 11:10:10 +0100
committerNick Clifton <nickc@redhat.com>2023-03-27 11:10:10 +0100
commiteb42b9d6f914b233d740da88d5e21c6690170b7d (patch)
tree3c3d3b8bdf2c5c32aad922421f098d42925ce58d /gold
parent1770eca698ad0018cd504b9744306fc9928d9a86 (diff)
downloadbinutils-gdb-eb42b9d6f914b233d740da88d5e21c6690170b7d.tar.gz
Add an option to the gold linker to put its version string into the .comment section.
PR 30187 * options.h (class General_options): Add enable-linker-version. * layout.cc (Layout::create_gold_note): If linker-version is enabled put the version string into the .comment section.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog7
-rw-r--r--gold/layout.cc39
-rw-r--r--gold/options.h4
3 files changed, 40 insertions, 10 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 2aec5d608ae..8dfb150f60e 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,10 @@
+2023-03-27 Nick Clifton <nickc@redhat.com>
+
+ PR 30187
+ * options.h (class General_options): Add enable-linker-version.
+ * layout.cc (Layout::create_gold_note): If linker-version is
+ enabled put the version string into the .comment section.
+
2023-01-03 Nick Clifton <nickc@redhat.com>
* po/ro.po: Updated Romainian translation.
diff --git a/gold/layout.cc b/gold/layout.cc
index 899d4af0707..a50086897bb 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -3333,19 +3333,38 @@ Layout::create_gold_note()
std::string desc = std::string("gold ") + gold::get_version_string();
- size_t trailing_padding;
- Output_section* os = this->create_note("GNU", elfcpp::NT_GNU_GOLD_VERSION,
- ".note.gnu.gold-version", desc.size(),
- false, &trailing_padding);
- if (os == NULL)
- return;
+ Output_section* os;
+ Output_section_data* posd;
- Output_section_data* posd = new Output_data_const(desc, 4);
- os->add_output_section_data(posd);
+ if (!parameters->options().enable_linker_version())
+ {
+ size_t trailing_padding;
+
+ os = this->create_note("GNU", elfcpp::NT_GNU_GOLD_VERSION,
+ ".note.gnu.gold-version", desc.size(),
+ false, &trailing_padding);
+ if (os == NULL)
+ return;
+
+ posd = new Output_data_const(desc, 4);
+ os->add_output_section_data(posd);
- if (trailing_padding > 0)
+ if (trailing_padding > 0)
+ {
+ posd = new Output_data_zero_fill(trailing_padding, 0);
+ os->add_output_section_data(posd);
+ }
+ }
+ else
{
- posd = new Output_data_zero_fill(trailing_padding, 0);
+ os = this->choose_output_section(NULL, ".comment",
+ elfcpp::SHT_PROGBITS, 0,
+ false, ORDER_INVALID,
+ false, false, false);
+ if (os == NULL)
+ return;
+
+ posd = new Output_data_const(desc, 1);
os->add_output_section_data(posd);
}
}
diff --git a/gold/options.h b/gold/options.h
index 1aa451c7711..46f658f23ea 100644
--- a/gold/options.h
+++ b/gold/options.h
@@ -847,6 +847,10 @@ class General_options
N_("Enable use of DT_RUNPATH"),
N_("Disable use of DT_RUNPATH"));
+ DEFINE_enable(linker_version, options::EXACTLY_TWO_DASHES, '\0', false,
+ N_("Put the linker version string into the .comment section"),
+ N_("Put the linker version string into the .note.gnu.gold-version section"));
+
DEFINE_bool(enum_size_warning, options::TWO_DASHES, '\0', true, NULL,
N_("(ARM only) Do not warn about objects with incompatible "
"enum sizes"));