Add --enable-linker-version option to bfd linker to add an entry in the .comment...
authorNick Clifton <nickc@redhat.com>
Wed, 15 Mar 2023 14:27:21 +0000 (14:27 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 15 Mar 2023 14:27:21 +0000 (14:27 +0000)
   PR 30187
  * NEWS: Mention the new feature. * ld.texi: Document the new feature. * ldgram.y: Handle LINKER_VERSION token. * ldlang.c (lang_add_version): New function. (enable_linker_version): New global variable. * ldlang.h (land_add_version): Prototype. (enable_linker_version): Export. * ldlex.h (OPTION_ENABLE_LINKER_VERSION): Define. (OPTION_DISABLE_LINKER_VERSION): Define. * ldlex.l (LINKER_VERSION): Add token. * lexsup.c (ld_options): Add --enable-linker-version and --disable-linker-version. (parse_args): Handle the new options. * scripttempl/arclinux.sc: Remove stabs and comment sections and replace with inclusion of misc-sections.sc * scripttempl/avr.sc: Likewise. * scripttempl/dlx.sc: Likewise. * scripttempl/elf.sc: Likewise. * scripttempl/elf32cr16.sc: Likewise. * scripttempl/elf32crx.sc: Likewise. * scripttempl/elf32msp430.sc: Likewise. * scripttempl/elf64bpf.sc: Likewise. * scripttempl/elf64hppa.sc: Likewise. * scripttempl/elf_chaos.sc: Likewise. * scripttempl/elfarc.sc: Likewise. * scripttempl/elfarcv2.sc: Likewise. * scripttempl/elfd10v.sc: Likewise. * scripttempl/elfd30v.sc: Likewise. * scripttempl/elfm68hc11.sc: Likewise. * scripttempl/elfm68hc12.sc: Likewise. * scripttempl/elfm9s12z.sc: Likewise. * scripttempl/elfmicroblaze.sc: Likewise. * scripttempl/elfxgate.sc: Likewise. * scripttempl/elfxtensa.sc: Likewise. * scripttempl/epiphany_4x4.sc: Likewise. * scripttempl/ft32.sc: Likewise. * scripttempl/ip2k.sc: Likewise. * scripttempl/iq2000.sc: Likewise. * scripttempl/mep.sc: Likewise. * scripttempl/nds32elf.sc: Likewise. * scripttempl/pru.sc: Likewise. * scripttempl/v850.sc: Likewise. * scripttempl/v850_rh850.sc: Likewise. * scripttempl/visium.sc: Likewise. * scripttempl/xstormy16.sc: Likewise. * scripttempl/z80.sc: Likewise. * testsuite/ld-scripts/script.exp: Run new tests. * scripttempl/misc-sections.sc: New file. * testsuite/ld-scripts/ld-version-2.d: New file. * testsuite/ld-scripts/ld-version.d: New file. * testsuite/ld-scripts/ld-version.t: New file.

46 files changed:
ld/ChangeLog
ld/NEWS
ld/ld.texi
ld/ldgram.y
ld/ldlang.c
ld/ldlang.h
ld/ldlex.h
ld/ldlex.l
ld/lexsup.c
ld/scripttempl/arclinux.sc
ld/scripttempl/avr.sc
ld/scripttempl/dlx.sc
ld/scripttempl/elf.sc
ld/scripttempl/elf32cr16.sc
ld/scripttempl/elf32crx.sc
ld/scripttempl/elf32msp430.sc
ld/scripttempl/elf64bpf.sc
ld/scripttempl/elf64hppa.sc
ld/scripttempl/elf_chaos.sc
ld/scripttempl/elfarc.sc
ld/scripttempl/elfarcv2.sc
ld/scripttempl/elfd10v.sc
ld/scripttempl/elfd30v.sc
ld/scripttempl/elfm68hc11.sc
ld/scripttempl/elfm68hc12.sc
ld/scripttempl/elfm9s12z.sc
ld/scripttempl/elfmicroblaze.sc
ld/scripttempl/elfxgate.sc
ld/scripttempl/elfxtensa.sc
ld/scripttempl/epiphany_4x4.sc
ld/scripttempl/ft32.sc
ld/scripttempl/ip2k.sc
ld/scripttempl/iq2000.sc
ld/scripttempl/mep.sc
ld/scripttempl/misc-sections.sc [new file with mode: 0644]
ld/scripttempl/nds32elf.sc
ld/scripttempl/pru.sc
ld/scripttempl/v850.sc
ld/scripttempl/v850_rh850.sc
ld/scripttempl/visium.sc
ld/scripttempl/xstormy16.sc
ld/scripttempl/z80.sc
ld/testsuite/ld-scripts/ld-version-2.d [new file with mode: 0644]
ld/testsuite/ld-scripts/ld-version.d [new file with mode: 0644]
ld/testsuite/ld-scripts/ld-version.t [new file with mode: 0644]
ld/testsuite/ld-scripts/script.exp

index 9e876b63d9f2f804fb039762f99889e25d843077..698b3ea4c11979616810e48e50e0ff8652cd2daa 100644 (file)
@@ -1,3 +1,58 @@
+2023-03-15  Nick Clifton  <nickc@redhat.com>
+
+       PR 30187
+       * NEWS: Mention the new feature.
+       * ld.texi: Document the new feature.
+       * ldgram.y: Handle LINKER_VERSION token.
+       * ldlang.c (lang_add_version): New function.
+       (enable_linker_version): New global variable.
+       * ldlang.h (land_add_version): Prototype.
+       (enable_linker_version): Export.
+       * ldlex.h (OPTION_ENABLE_LINKER_VERSION): Define.
+       (OPTION_DISABLE_LINKER_VERSION): Define.
+       * ldlex.l (LINKER_VERSION): Add token.
+       * lexsup.c (ld_options): Add --enable-linker-version and
+       --disable-linker-version.
+       (parse_args): Handle the new options.
+       * scripttempl/arclinux.sc: Remove stabs and comment sections and
+       replace with inclusion of misc-sections.sc
+       * scripttempl/avr.sc: Likewise.
+       * scripttempl/dlx.sc: Likewise.
+       * scripttempl/elf.sc: Likewise.
+       * scripttempl/elf32cr16.sc: Likewise.
+       * scripttempl/elf32crx.sc: Likewise.
+       * scripttempl/elf32msp430.sc: Likewise.
+       * scripttempl/elf64bpf.sc: Likewise.
+       * scripttempl/elf64hppa.sc: Likewise.
+       * scripttempl/elf_chaos.sc: Likewise.
+       * scripttempl/elfarc.sc: Likewise.
+       * scripttempl/elfarcv2.sc: Likewise.
+       * scripttempl/elfd10v.sc: Likewise.
+       * scripttempl/elfd30v.sc: Likewise.
+       * scripttempl/elfm68hc11.sc: Likewise.
+       * scripttempl/elfm68hc12.sc: Likewise.
+       * scripttempl/elfm9s12z.sc: Likewise.
+       * scripttempl/elfmicroblaze.sc: Likewise.
+       * scripttempl/elfxgate.sc: Likewise.
+       * scripttempl/elfxtensa.sc: Likewise.
+       * scripttempl/epiphany_4x4.sc: Likewise.
+       * scripttempl/ft32.sc: Likewise.
+       * scripttempl/ip2k.sc: Likewise.
+       * scripttempl/iq2000.sc: Likewise.
+       * scripttempl/mep.sc: Likewise.
+       * scripttempl/nds32elf.sc: Likewise.
+       * scripttempl/pru.sc: Likewise.
+       * scripttempl/v850.sc: Likewise.
+       * scripttempl/v850_rh850.sc: Likewise.
+       * scripttempl/visium.sc: Likewise.
+       * scripttempl/xstormy16.sc: Likewise.
+       * scripttempl/z80.sc: Likewise.
+       * testsuite/ld-scripts/script.exp: Run new tests.
+       * scripttempl/misc-sections.sc: New file.
+       * testsuite/ld-scripts/ld-version-2.d: New file.
+       * testsuite/ld-scripts/ld-version.d: New file.
+       * testsuite/ld-scripts/ld-version.t: New file.
+
 2023-02-23  Fangrui Song  <i@maskray.me>
 
        * emultempl/riscvelf.em: Add option parsing.
diff --git a/ld/NEWS b/ld/NEWS
index 4ce7e19d40b9222dce7cb7bd9db6b2437b54c271..37041e7456f207b476402bfda708aca4a54971e6 100644 (file)
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,5 +1,9 @@
 -*- text -*-
 
+* For most ELF based targets, if the --enable-linker-version option is used
+  then the version of the linker will be inserted as a string into the .comment
+  section.
+
 * The linker script syntax has a new command for output sections: ASCIZ "string"
   This will insert a zero-terminated string at the current location.
 
index 8205d4e67714219c3dd8124367318f25c71caf7f..736563e1e3ee73e83c264643a0571bab4f3aaca7 100644 (file)
@@ -461,6 +461,22 @@ will contain a colon separated list of audit interfaces to use.  This
 option is only meaningful on ELF platforms supporting the rtld-audit interface.
 The -P option is provided for Solaris compatibility.
 
+@kindex --enable-linker-version
+@item   --enable-linker-version
+Enables the @code{LINKER_VERSION} linker script directive, described
+in @ref{Output Section Data}.  If this directive is used in a linker
+script and this option has been enabled then a string containing the
+linker version will be inserted at the current point.
+
+Note - this location of this option on the linker command line is
+significant.  It will only affect linker scripts that come after it on
+the command line, or which are built into the linker.
+
+@kindex --disable-linker-version
+@item   --disable-linker-version
+Disables the @code{LINKER_VERSION} linker script directive, so that it
+does not insert a version string.  This is the default.
+
 @kindex --enable-non-contiguous-regions
 @item --enable-non-contiguous-regions
 This option avoids generating an error if an input section does not
@@ -1168,7 +1184,9 @@ in a linker script.
 @itemx --version
 @itemx -V
 Display the version number for @command{ld}.  The @option{-V} option also
-lists the supported emulations.
+lists the supported emulations.  See also the description of the
+@option{--enable-linker-version} in @ref{Options,,Command-line Options}
+which can be used to insert the linker version string into a binary.
 
 @kindex -x
 @kindex --discard-all
@@ -5393,6 +5411,16 @@ entire section.  If both are used, the @code{FILL} command takes
 precedence.  @xref{Output Section Fill}, for details on the fill
 expression.
 
+@kindex LINKER_VERSION
+@cindex LINKER_VERSION
+Inserts a string containing the version of the linker at the current
+point.  Note - by default this directive is disabled and will do
+nothing.  It only becomes active if the
+@option{--enable-linker-version} command line option is used.
+
+Built-in linker scripts for ELF based targets already include this
+directive in their @samp{.comment} section.
+
 @node Output Section Keywords
 @subsection Output Section Keywords
 There are a couple of keywords which can appear as output section
index 8240cf97327d226e985fd8fb103b2ef34119904d..4ced9edf7a353128e9b70411d4a90d0aaf474d74 100644 (file)
@@ -126,7 +126,7 @@ static int error_index;
 %token END
 %left <token> '('
 %token <token> ALIGN_K BLOCK BIND QUAD SQUAD LONG SHORT BYTE ASCIZ
-%token SECTIONS PHDRS INSERT_K AFTER BEFORE
+%token SECTIONS PHDRS INSERT_K AFTER BEFORE LINKER_VERSION
 %token DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END
 %token SORT_BY_NAME SORT_BY_ALIGNMENT SORT_NONE
 %token SORT_BY_INIT_PRIORITY
@@ -676,6 +676,10 @@ statement:
                {
                  lang_add_fill ($3);
                }
+       | LINKER_VERSION
+               {
+                 lang_add_version_string ();
+               }
        | ASSERT_K
                { ldlex_expression (); }
          '(' exp ',' NAME ')' separator
index 61de63809cd36a6d07d304316cd602745a078cdb..b684e2d479acf18f58076a3b5c78627caa6d8e4f 100644 (file)
@@ -27,7 +27,6 @@
 #include "obstack.h"
 #include "bfdlink.h"
 #include "ctf-api.h"
-
 #include "ld.h"
 #include "ldmain.h"
 #include "ldexp.h"
 #include "demangle.h"
 #include "hashtab.h"
 #include "elf-bfd.h"
+#include "bfdver.h"
+
 #if BFD_SUPPORTS_PLUGINS
 #include "plugin.h"
-#endif /* BFD_SUPPORTS_PLUGINS */
+#endif
 
 #ifndef offsetof
 #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
@@ -131,6 +132,7 @@ bool lang_has_input_file = false;
 bool had_output_filename = false;
 bool lang_float_flag = false;
 bool delete_output_file_on_failure = false;
+bool enable_linker_version = false;
 struct lang_phdr *lang_phdr_list;
 struct lang_nocrossrefs *nocrossref_list;
 struct asneeded_minfo **asneeded_list_tail;
@@ -8261,6 +8263,28 @@ lang_process (void)
   lang_end ();
 }
 
+void
+lang_add_version_string (void)
+{
+  if (! enable_linker_version)
+    return;
+
+  const char * str = "GNU ld ";
+  int len = strlen (str);
+  int i;
+
+  for (i = 0 ; i < len ; i++)
+    lang_add_data (BYTE, exp_intop (str[i]));
+
+  str = BFD_VERSION_STRING;
+  len = strlen (str);
+
+  for (i = 0 ; i < len ; i++)
+    lang_add_data (BYTE, exp_intop (str[i]));
+
+  lang_add_data (BYTE, exp_intop ('\0'));
+}
+
 /* EXPORTED TO YACC */
 
 void
index 32819066b8a41e249bb0d3d9aab84e1ebd1259f8..463cce394e935c564f14e2b4585ae9eb5a8a222b 100644 (file)
@@ -530,6 +530,7 @@ extern bool lang_has_input_file;
 extern lang_statement_list_type statement_list;
 extern lang_statement_list_type *stat_ptr;
 extern bool delete_output_file_on_failure;
+extern bool enable_linker_version;
 
 extern struct bfd_sym_chain entry_symbol;
 extern const char *entry_section;
@@ -735,6 +736,8 @@ extern void
 lang_add_gc_name (const char *);
 
 extern bool
-print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr);
+print_one_symbol (struct bfd_link_hash_entry *, void *);
 
+extern void lang_add_version_string
+  (void);
 #endif
index 0538f0a06a1e5ad061966373dd753ef2ebcd6e02..48d323d0265fc15aff98df0413f57e3f54729607 100644 (file)
@@ -170,6 +170,8 @@ enum option_values
   OPTION_NO_WARN_EXECSTACK,
   OPTION_WARN_RWX_SEGMENTS,
   OPTION_NO_WARN_RWX_SEGMENTS,
+  OPTION_ENABLE_LINKER_VERSION,
+  OPTION_DISABLE_LINKER_VERSION,
 };
 
 /* The initial parser states.  */
index 32336cf0be2c7d06a9fdd106f1f0ab4d5acf2e3d..3b55e794c5770479a9e0f8be0fb983c384ab79cb 100644 (file)
@@ -310,6 +310,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
 <WILD>"SHORT"                          { RTOKEN(SHORT); }
 <WILD>"BYTE"                           { RTOKEN(BYTE); }
 <WILD>"ASCIZ"                          { RTOKEN(ASCIZ); }
+<WILD>"LINKER_VERSION"                 { RTOKEN(LINKER_VERSION); }
 <SCRIPT>"NOFLOAT"                      { RTOKEN(NOFLOAT); }
 <SCRIPT,EXPRESSION>"NOCROSSREFS"       { RTOKEN(NOCROSSREFS); }
 <SCRIPT,EXPRESSION>"NOCROSSREFS_TO"    { RTOKEN(NOCROSSREFS_TO); }
index a1c6140100deb12a540f85f810a7d62609d0e8f5..7dc2228a833a2f6d2f2d744114c7e2c484124607 100644 (file)
@@ -130,6 +130,10 @@ static const struct ld_option ld_options[] =
     '\0', NULL, N_("Enable support of non-contiguous memory regions"), TWO_DASHES },
   { {"enable-non-contiguous-regions-warnings", no_argument, NULL, OPTION_NON_CONTIGUOUS_REGIONS_WARNINGS},
     '\0', NULL, N_("Enable warnings when --enable-non-contiguous-regions may cause unexpected behaviour"), TWO_DASHES },
+  { {"disable-linker-version", no_argument, NULL, OPTION_DISABLE_LINKER_VERSION},
+    '\0', NULL, N_("Disable the LINKER_VERSION linker script directive"), TWO_DASHES },
+  { {"enable-linker-version", no_argument, NULL, OPTION_ENABLE_LINKER_VERSION},
+    '\0', NULL, N_("Enable the LINKER_VERSION linker script directive"), TWO_DASHES },
   { {"EB", no_argument, NULL, OPTION_EB},
     '\0', NULL, N_("Link big-endian objects"), ONE_DASH },
   { {"EL", no_argument, NULL, OPTION_EL},
@@ -1095,6 +1099,13 @@ parse_args (unsigned argc, char **argv)
          break;
 #endif
 
+       case OPTION_ENABLE_LINKER_VERSION:
+         enable_linker_version = true;
+         break;
+       case OPTION_DISABLE_LINKER_VERSION:
+         enable_linker_version = false;
+         break;
+
        case OPTION_UNDEFINED_VERSION:
          link_info.allow_undefined_version = true;
          break;
index 7ebf7adbb1b98827e0081d308f532cbbae9189c1..9c24e5bc12c6afe238d4174306315759b008e224 100644 (file)
@@ -656,18 +656,7 @@ EOF
 
 test -z "${NON_ALLOC_DYN}" || emit_dyn
 
-cat <<EOF
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
-EOF
+. $srcdir/scripttempl/misc-sections.sc
 
 . $srcdir/scripttempl/DWARF.sc
 
index 9abfc536121cdfad67dfed295d4d879fa3722b1b..3677e07eeb975d5f6db38ccae3ce82b33009bf62 100644 (file)
@@ -328,16 +328,9 @@ cat <<EOF
 EOF
 fi
 
-cat <<EOF
+. $srcdir/scripttempl/misc-sections.sc
 
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment 0 : { *(.comment) }
+cat <<EOF
   .note.gnu.build-id ${RELOCATING-0} : { *(.note.gnu.build-id) }
 EOF
 
index 1a1774c9082275bbb5c88979a0fb4c703e758a2c..f5673f4c05b2e1efc1b41060e6f756e5d06f215e 100644 (file)
@@ -38,5 +38,13 @@ SECTIONS
    ${RELOCATING+*(COMMON)}
    ${RELOCATING+end = .;}
   }
+
+EOF
+
+. $srcdir/scripttempl/misc-sections.sc
+
+. $srcdir/scripttempl/DWARF.sc
+
+cat <<EOF
 }
 EOF
index 5d3b0d31b1bbb5903730a785c32937939931d1cf..92f100b462352621f8fc9c919a55cf99026b574d 100644 (file)
@@ -722,20 +722,7 @@ EOF
 
 test -z "${NON_ALLOC_DYN}" || emit_dyn
 
-cat <<EOF
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
-  .gnu.build.attributes : { *(.gnu.build.attributes${RELOCATING+ .gnu.build.attributes.*}) }
-
-EOF
+. $srcdir/scripttempl/misc-sections.sc
 
 . $srcdir/scripttempl/DWARF.sc
 
index f45ce8071ee535e99bb4a19592c9359e03614c73..aedc17bd430e240520fa290b323770d9ef281831 100644 (file)
@@ -169,10 +169,9 @@ SECTIONS
     __ISTACK_START = .;
   }${RELOCATING+ > ram}
 
-  .comment        0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index fa2481358f606da21a1b41b557304f7b21b07a14..747bfbb1cadb628c51fc28b7cfbd3afa7844f9f8 100644 (file)
@@ -167,10 +167,9 @@ SECTIONS
     __ISTACK_START = .;
   } > ram
 
-  .comment        0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 83613fc1cb841f9e148f42c15e0bc22be4e32f4c..4b0ac8d7e93ebd4c4318ca5702efa1ccda65d41e 100644 (file)
@@ -330,16 +330,9 @@ SECTIONS
   /* Stabs for profiling information*/
   .profiler 0 : { *(.profiler) }
 
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment 0 : { *(.comment) }
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 test -n "${RELOCATING}" && cat <<EOF
index 48cda5b34736f1fbf883f80d180c3d3f73afe2e4..8ff588bc1fbbbdabaee04ca2c58bb174726cbe28 100644 (file)
@@ -679,20 +679,7 @@ EOF
 
 test -z "${NON_ALLOC_DYN}" || emit_dyn
 
-cat <<EOF
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
-  .gnu.build.attributes : { *(.gnu.build.attributes${RELOCATING+ .gnu.build.attributes.*}) }
-
-EOF
+. $srcdir/scripttempl/misc-sections.sc
 
 cat <<EOF
   ${ATTRS_SECTIONS}
index 5f5d690f4ddd8c78dd8ac1e19cd1220e53a8045f..e80d248363081b208b46f275431d0077c289295a 100644 (file)
@@ -533,19 +533,7 @@ if test -n "${NON_ALLOC_DYN}"; then
   rm -f ldscripts/dyntmp.$$
 fi
 
-cat <<EOF
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
-EOF
-
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 30bbe0b5a6a9bc79ebdf115556b61f517de9eeb3..f3b2776ef57933699d7fa81cc71b0081afd2f2fb 100644 (file)
@@ -325,18 +325,9 @@ cat <<EOF
   ${RELOCATING+PROVIDE (end = .);}
   ${STACK_ADDR+${STACK}}
 
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 1d3c043a4d798a145a328c29f5322a8852abd060..ccba4a1113d54964a5b731fb8d8bc0d0161c6827 100644 (file)
@@ -409,19 +409,7 @@ test -n "${RELOCATING}" && cat <<EOF
   }
 EOF
 
-cat <<EOF
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-  .note.gnu.build-id : { *(.note.gnu.build-id) }
-EOF
-
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index bf84c7648db658ea5b2d6879c7890dbeedbacd8d..5b547c15a9f8985a023148a290c703ee3aa19f31 100644 (file)
@@ -291,18 +291,10 @@ SECTIONS
   ${RELOCATING+ PROVIDE (__stack_top = (ORIGIN (${DATA_MEMORY}) + LENGTH (${DATA_MEMORY}) - 1) & -4);}
   ${RELOCATING+ PROVIDE (__end_heap = ORIGIN (${DATA_MEMORY}) + LENGTH (${DATA_MEMORY}) - 1);}
 
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
   .note.gnu.build-id : { *(.note.gnu.build-id) }
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 4261f8371dca6eab72e7a91204dbbfd38270a02b..c08192c9288af9673e49b03f91b6a32f72ba06a6 100644 (file)
@@ -172,18 +172,9 @@ SECTIONS
 
   ${RELOCATING+$STACK}
 
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment 0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 4bb0efcae8a7c63a6c68321b1ed0207e6acf72f0..2c95f5c16ec26afd977ceb7442b01d477d37aa95 100644 (file)
@@ -197,18 +197,9 @@ SECTIONS
     ${RELOCATING+ PROVIDE (__eit_end = .) ; }
   } ${RELOCATING+ > eit}
 
-  /* Stabs debugging sections.  */
-  .stab                 0 : { *(.stab) }
-  .stabstr      0 : { *(.stabstr) }
-  .stab.excl    0 : { *(.stab.excl) }
-  .stab.exclstr         0 : { *(.stab.exclstr) }
-  .stab.index   0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment      0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index d029bae34db48cd54c1be23bba5635623f089aef..e796a5f7ca089b550fc11971b5fb770d6cd75351 100644 (file)
@@ -428,18 +428,9 @@ SECTIONS
 
   ${RELOCATING+${VECTORS}}
 
-  /* Stabs debugging sections.  */
-  .stab                 0 : { *(.stab) }
-  .stabstr      0 : { *(.stabstr) }
-  .stab.excl    0 : { *(.stab.excl) }
-  .stab.exclstr         0 : { *(.stab.exclstr) }
-  .stab.index   0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment      0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 32ba5c3a16cacc9ede94c8d6a02da8ba289ca21b..6fa708977fa43820bbeaf7bfd19dfbd12445de30 100644 (file)
@@ -430,17 +430,11 @@ SECTIONS
   } ${RELOCATING+ > ${EEPROM_MEMORY}}
 
   ${RELOCATING+${VECTORS}}
+EOF
 
-  /* Stabs debugging sections.  */
-  .stab                 0 : { *(.stab) }
-  .stabstr      0 : { *(.stabstr) }
-  .stab.excl    0 : { *(.stab.excl) }
-  .stab.exclstr         0 : { *(.stab.exclstr) }
-  .stab.index   0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment      0 : { *(.comment) }
+. $srcdir/scripttempl/misc-sections.sc
 
+cat <<EOF
   /* Treatment of DWARF debug section must be at end of the linker
      script to avoid problems when there are undefined symbols. It's necessary
      to avoid that the DWARF section is relocated before such undefined
index aaa137b91961041f666dab4adebefbcbafba2d1b..d77e2130a98ef1c4b0006c3852f29c1b95bf539f 100644 (file)
@@ -420,17 +420,11 @@ SECTIONS
   } ${RELOCATING+ > ${EEPROM_MEMORY}}
 
   ${RELOCATING+${VECTORS}}
+EOF
 
-  /* Stabs debugging sections.  */
-  .stab                 0 : { *(.stab) }
-  .stabstr      0 : { *(.stabstr) }
-  .stab.excl    0 : { *(.stab.excl) }
-  .stab.exclstr         0 : { *(.stab.exclstr) }
-  .stab.index   0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment      0 : { *(.comment) }
+. $srcdir/scripttempl/misc-sections.sc
 
+cat <<EOF
   /* Treatment of DWARF debug section must be at end of the linker
      script to avoid problems when there are undefined symbols. It's necessary
      to avoid that the DWARF section is relocated before such undefined
index 8d99ea181c671ed4175efb195e424b987001f69d..6c17172bf50801a6e7553ea15d4be45336b41d4c 100644 (file)
@@ -232,5 +232,11 @@ SECTIONS
     ${RELOCATING+*(.tbss.*)}
     ${RELOCATING+*(.gnu.linkonce.tb.*)}
   }
+EOF
+
+. $srcdir/scripttempl/misc-sections.sc
+. $srcdir/scripttempl/DWARF.sc
+
+cat <<EOF
 }
 EOF
index af8beb0e0cdf9c1717ac086f78be6b48633ea635..f810788929e037b9e9da0517bcafc187cda55803 100644 (file)
@@ -430,19 +430,9 @@ SECTIONS
   } ${RELOCATING+ > ${EEPROM_MEMORY}}
 
   ${RELOCATING+${VECTORS}}
-
-  /* Stabs debugging sections.  */
-  .stab                 0 : { *(.stab) }
-  .stabstr      0 : { *(.stabstr) }
-  .stab.excl    0 : { *(.stab.excl) }
-  .stab.exclstr         0 : { *(.stab.exclstr) }
-  .stab.index   0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment      0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index eb0e675b46dbb77b022102cafd1f311fe2919c37..a6cd174ccd0ba78a714c027768e2896af943ae29 100644 (file)
@@ -543,18 +543,7 @@ if test -n "${NON_ALLOC_DYN}"; then
   rm -f ldscripts/dyntmp.$$
 fi
 
-cat <<EOF
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
-EOF
+. $srcdir/scripttempl/misc-sections.sc
 
 . $srcdir/scripttempl/DWARF.sc
 
index bbed7e1a23c49cf564362183041e15354418bc76..42e2f7e761379404f64cd361f188258f3365d354 100644 (file)
@@ -626,18 +626,7 @@ if test -n "${NON_ALLOC_DYN}"; then
   rm -f ldscripts/dyntmp.$$
 fi
 
-cat <<EOF
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
-EOF
+. $srcdir/scripttempl/misc-sections.sc
 
 . $srcdir/scripttempl/DWARF.sc
 
index ef7f332aa504382111cea22e17e335a01e57c351..e2d5a6bdfc90e2e64ee7e8f6d4bf5d0d3405983c 100644 (file)
@@ -69,10 +69,5 @@ SECTIONS
   {
     *(.stabstr)
   }
-EOF
-
-. $srcdir/scripttempl/DWARF.sc
-
-cat <<EOF
 }
 EOF
index 5e78132e1bf161f0f035e5b6210a9c564ea562eb..89a2f1639e729eed8dc74473d867a9134d94d5ee 100644 (file)
@@ -135,17 +135,10 @@ SECTIONS
        /* Stack.  */
        PROVIDE (__stack = 0x01000FFF);
 
-       /* Stabs debugging sections.  */
-       .stab           0 : { *(.stab) }
-       .stabstr        0 : { *(.stabstr) }
-       .stab.excl      0 : { *(.stab.excl) }
-       .stab.exclstr   0 : { *(.stab.exclstr) }
-       .stab.index     0 : { *(.stab.index) }
-       .stab.indexstr  0 : { *(.stab.indexstr) }
-       .comment        0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
+
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 13c8a905806dd332012a694519c50fbc7b1ed255..44228e7f1a88daa1a4f1627c838fb070a706f232 100644 (file)
@@ -406,18 +406,10 @@ cat <<EOF
   ${RELOCATING+_end = .;}
   ${RELOCATING+PROVIDE (end = .);}
 
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment 0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
+
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 77892cb38311f41ebe865b356d397cf0124a1591..1a0252d907340255998b53bbeb260668958cb374 100644 (file)
@@ -406,18 +406,10 @@ cat <<EOF
   ${RELOCATING+PROVIDE (end = .);}
   ${RELOCATING+${DATA_SEGMENT_END}}
 
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
+
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
diff --git a/ld/scripttempl/misc-sections.sc b/ld/scripttempl/misc-sections.sc
new file mode 100644 (file)
index 0000000..115ef1a
--- /dev/null
@@ -0,0 +1,20 @@
+# Copyright (C) 2014-2023 Free Software Foundation, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+#
+cat <<EOF
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+
+  .comment         : { *(.comment); LINKER_VERSION; }
+
+  .gnu.build.attributes : { *(.gnu.build.attributes${RELOCATING+ .gnu.build.attributes.*}) }
+
+EOF
index 279e4249e30ad660cd7445f7215af8d56f733be6..b3acb0167807992ef14501085a0b1ad0f5b35bd6 100644 (file)
@@ -601,18 +601,7 @@ EOF
 
 test -z "${NON_ALLOC_DYN}" || emit_dyn
 
-cat <<EOF
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment       0 : { *(.comment) }
-
-EOF
+. $srcdir/scripttempl/misc-sections.sc
 
 . $srcdir/scripttempl/DWARF.sc
 
index 4229bed99bb821f11db58ff6280040d79a310049..a24005b0f669784b3c67ad931d4b4d26e5fa7082 100644 (file)
@@ -201,17 +201,11 @@ SECTIONS
      place it in the target dmem memory.  */
   .pru_irq_map 0 : { *(.pru_irq_map) }
 
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment 0 : { *(.comment) }
   .note.gnu.build-id ${RELOCATING-0} : { *(.note.gnu.build-id) }
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
+
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 713dfaef88629e191ff1e7bdce70311db070ffa9..515aeb149a9a023b685120b0b1e3a8a3052e420b 100644 (file)
@@ -196,17 +196,10 @@ SECTIONS
 
   .note.renesas 0 : { KEEP(*(.note.renesas)) }
 
-  /* Stabs debugging sections.  */
-  .stab 0              : { *(.stab) }
-  .stabstr 0           : { *(.stabstr) }
-  .stab.excl 0         : { *(.stab.excl) }
-  .stab.exclstr 0      : { *(.stab.exclstr) }
-  .stab.index 0                : { *(.stab.index) }
-  .stab.indexstr 0     : { *(.stab.indexstr) }
-  .comment 0           : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
+
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index a68ab8e31c26d89a1f0bc1d7f746c121a8e6db8c..a06889354ad811f5e5cc126d0674d380d34eb418 100644 (file)
@@ -216,17 +216,10 @@ SECTIONS
 
   .note.renesas 0 : { KEEP(*(.note.renesas)) }
 
-  /* Stabs debugging sections.  */
-  .stab 0              : { *(.stab) }
-  .stabstr 0           : { *(.stabstr) }
-  .stab.excl 0         : { *(.stab.excl) }
-  .stab.exclstr 0      : { *(.stab.exclstr) }
-  .stab.index 0                : { *(.stab.index) }
-  .stab.indexstr 0     : { *(.stab.indexstr) }
-  .comment 0           : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
+
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 743553097a7e19bb8d13838a6bce5e8dbf299c25..def19ca84bbbd9e35fdac6b121740cd69ff2e544 100644 (file)
@@ -163,7 +163,7 @@ SECTIONS
   .stab.index    0 : { *(.stab.index) }
   .stab.indexstr 0 : { *(.stab.indexstr) }
 
-  .comment       0 : { *(.comment) }
+  .comment       0 : { *(.comment); LINKER_VERSION; }
 
 EOF
 
index e0f7fcc3c7dafea02e25053bc3d950e88aa74424..2b3c05196193ed5a78a3dd86ba7b9ea4cd04ea41 100644 (file)
@@ -203,19 +203,10 @@ SECTIONS
   ${RELOCATING+PROVIDE (etext = .);}
   ${RELOCATING+${OTHER_READONLY_SECTIONS}}
 
-
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-
-  .comment 0 : { *(.comment) }
-
 EOF
 
+. $srcdir/scripttempl/misc-sections.sc
+
 . $srcdir/scripttempl/DWARF.sc
 
 cat <<EOF
index 3e2c48bdc6b0f2257f391bf87e707c866bfdccae..75a6a4a797230475aa2ecc3b44524e8cbefe509d 100644 (file)
@@ -49,5 +49,11 @@ SECTIONS
        *(bss)
        ${RELOCATING+ __Hbss = .;}
        }
+EOF
+
+. $srcdir/scripttempl/misc-sections.sc
+. $srcdir/scripttempl/DWARF.sc
+
+cat <<EOF
 }
 EOF
diff --git a/ld/testsuite/ld-scripts/ld-version-2.d b/ld/testsuite/ld-scripts/ld-version-2.d
new file mode 100644 (file)
index 0000000..7612349
--- /dev/null
@@ -0,0 +1,8 @@
+# source: data.s
+# ld: --enable-linker-version -e 0
+# readelf: -p.comment
+# target: [is_elf_format]
+# skip: ft32-*-* pru-*-*
+
+String dump of section '.comment':
+.*GNU ld \(GNU Binutils\) 2.*
diff --git a/ld/testsuite/ld-scripts/ld-version.d b/ld/testsuite/ld-scripts/ld-version.d
new file mode 100644 (file)
index 0000000..a55fc5e
--- /dev/null
@@ -0,0 +1,7 @@
+# source: data.s
+# ld: --enable-linker-version -T ld-version.t 
+# readelf: -p.comment
+# target: [is_elf_format]
+
+String dump of section '.comment':
+.*GNU ld \(GNU Binutils\) 2.*
diff --git a/ld/testsuite/ld-scripts/ld-version.t b/ld/testsuite/ld-scripts/ld-version.t
new file mode 100644 (file)
index 0000000..5e7d22c
--- /dev/null
@@ -0,0 +1,9 @@
+SECTIONS
+{
+       .comment :
+       {
+               *(.comment);
+               LINKER_VERSION;
+       }
+       /DISCARD/ : { *(*) }
+}
index a574dde034c6b990f50f663e2b50030e18c3f0f4..28cc6daf51d01fa0a38183f4be819e7856e55687 100644 (file)
@@ -231,6 +231,8 @@ run_dump_test "asciz"
 run_dump_test "align-with-input"
 run_dump_test "pr20302"
 run_dump_test "output-section-types"
+run_dump_test "ld-version"
+run_dump_test "ld-version-2"
 
 run_dump_test "segment-start" {{name (default)}}
 run_dump_test "segment-start" {{name (overridden)} \