]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add an option to the gold linker to put its version string into the .comment section.
authorNick Clifton <nickc@redhat.com>
Mon, 27 Mar 2023 10:10:10 +0000 (11:10 +0100)
committerNick Clifton <nickc@redhat.com>
Mon, 27 Mar 2023 10:10:10 +0000 (11:10 +0100)
  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.

gold/ChangeLog
gold/layout.cc
gold/options.h

index 2aec5d608aef9926c8c1cb9d62a71d56681e8f73..8dfb150f60e2d9bada0af064f06908cc93cc9b18 100644 (file)
@@ -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.
index 899d4af07076b575af2424d7a8401b6f32b573c8..a50086897bbb000b1dc4c7634cf98e60a0f98aad 100644 (file)
@@ -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);
     }
 }
index 1aa451c7711a7ac3eac90e2f420cc411962d62d8..46f658f23ea62a047bb35963426c36987ae68f25 100644 (file)
@@ -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"));