Browse Source

Add --enable-linker-version option to bfd linker to add an entry in the .comment section.

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.
users/aburgess/try-core-file-pid0
Nick Clifton 3 years ago
parent
commit
2d5783fad7
  1. 55
      ld/ChangeLog
  2. 4
      ld/NEWS
  3. 30
      ld/ld.texi
  4. 6
      ld/ldgram.y
  5. 28
      ld/ldlang.c
  6. 5
      ld/ldlang.h
  7. 2
      ld/ldlex.h
  8. 1
      ld/ldlex.l
  9. 11
      ld/lexsup.c
  10. 13
      ld/scripttempl/arclinux.sc
  11. 11
      ld/scripttempl/avr.sc
  12. 8
      ld/scripttempl/dlx.sc
  13. 15
      ld/scripttempl/elf.sc
  14. 3
      ld/scripttempl/elf32cr16.sc
  15. 3
      ld/scripttempl/elf32crx.sc
  16. 9
      ld/scripttempl/elf32msp430.sc
  17. 15
      ld/scripttempl/elf64bpf.sc
  18. 14
      ld/scripttempl/elf64hppa.sc
  19. 11
      ld/scripttempl/elf_chaos.sc
  20. 14
      ld/scripttempl/elfarc.sc
  21. 10
      ld/scripttempl/elfarcv2.sc
  22. 11
      ld/scripttempl/elfd10v.sc
  23. 11
      ld/scripttempl/elfd30v.sc
  24. 11
      ld/scripttempl/elfm68hc11.sc
  25. 12
      ld/scripttempl/elfm68hc12.sc
  26. 12
      ld/scripttempl/elfm9s12z.sc
  27. 6
      ld/scripttempl/elfmicroblaze.sc
  28. 12
      ld/scripttempl/elfxgate.sc
  29. 13
      ld/scripttempl/elfxtensa.sc
  30. 13
      ld/scripttempl/epiphany_4x4.sc
  31. 5
      ld/scripttempl/ft32.sc
  32. 11
      ld/scripttempl/ip2k.sc
  33. 12
      ld/scripttempl/iq2000.sc
  34. 12
      ld/scripttempl/mep.sc
  35. 20
      ld/scripttempl/misc-sections.sc
  36. 13
      ld/scripttempl/nds32elf.sc
  37. 10
      ld/scripttempl/pru.sc
  38. 11
      ld/scripttempl/v850.sc
  39. 11
      ld/scripttempl/v850_rh850.sc
  40. 2
      ld/scripttempl/visium.sc
  41. 13
      ld/scripttempl/xstormy16.sc
  42. 6
      ld/scripttempl/z80.sc
  43. 8
      ld/testsuite/ld-scripts/ld-version-2.d
  44. 7
      ld/testsuite/ld-scripts/ld-version.d
  45. 9
      ld/testsuite/ld-scripts/ld-version.t
  46. 2
      ld/testsuite/ld-scripts/script.exp

55
ld/ChangeLog

@ -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> 2023-02-23 Fangrui Song <i@maskray.me>
* emultempl/riscvelf.em: Add option parsing. * emultempl/riscvelf.em: Add option parsing.

4
ld/NEWS

@ -1,5 +1,9 @@
-*- text -*- -*- 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" * The linker script syntax has a new command for output sections: ASCIZ "string"
This will insert a zero-terminated string at the current location. This will insert a zero-terminated string at the current location.

30
ld/ld.texi

@ -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. option is only meaningful on ELF platforms supporting the rtld-audit interface.
The -P option is provided for Solaris compatibility. 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 @kindex --enable-non-contiguous-regions
@item --enable-non-contiguous-regions @item --enable-non-contiguous-regions
This option avoids generating an error if an input section does not This option avoids generating an error if an input section does not
@ -1168,7 +1184,9 @@ in a linker script.
@itemx --version @itemx --version
@itemx -V @itemx -V
Display the version number for @command{ld}. The @option{-V} option also 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 -x
@kindex --discard-all @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 precedence. @xref{Output Section Fill}, for details on the fill
expression. 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 @node Output Section Keywords
@subsection Output Section Keywords @subsection Output Section Keywords
There are a couple of keywords which can appear as output section There are a couple of keywords which can appear as output section

6
ld/ldgram.y

@ -126,7 +126,7 @@ static int error_index;
%token END %token END
%left <token> '(' %left <token> '('
%token <token> ALIGN_K BLOCK BIND QUAD SQUAD LONG SHORT BYTE ASCIZ %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 DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END
%token SORT_BY_NAME SORT_BY_ALIGNMENT SORT_NONE %token SORT_BY_NAME SORT_BY_ALIGNMENT SORT_NONE
%token SORT_BY_INIT_PRIORITY %token SORT_BY_INIT_PRIORITY
@ -676,6 +676,10 @@ statement:
{ {
lang_add_fill ($3); lang_add_fill ($3);
} }
| LINKER_VERSION
{
lang_add_version_string ();
}
| ASSERT_K | ASSERT_K
{ ldlex_expression (); } { ldlex_expression (); }
'(' exp ',' NAME ')' separator '(' exp ',' NAME ')' separator

28
ld/ldlang.c

@ -27,7 +27,6 @@
#include "obstack.h" #include "obstack.h"
#include "bfdlink.h" #include "bfdlink.h"
#include "ctf-api.h" #include "ctf-api.h"
#include "ld.h" #include "ld.h"
#include "ldmain.h" #include "ldmain.h"
#include "ldexp.h" #include "ldexp.h"
@ -42,9 +41,11 @@
#include "demangle.h" #include "demangle.h"
#include "hashtab.h" #include "hashtab.h"
#include "elf-bfd.h" #include "elf-bfd.h"
#include "bfdver.h"
#if BFD_SUPPORTS_PLUGINS #if BFD_SUPPORTS_PLUGINS
#include "plugin.h" #include "plugin.h"
#endif /* BFD_SUPPORTS_PLUGINS */ #endif
#ifndef offsetof #ifndef offsetof
#define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER)) #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 had_output_filename = false;
bool lang_float_flag = false; bool lang_float_flag = false;
bool delete_output_file_on_failure = false; bool delete_output_file_on_failure = false;
bool enable_linker_version = false;
struct lang_phdr *lang_phdr_list; struct lang_phdr *lang_phdr_list;
struct lang_nocrossrefs *nocrossref_list; struct lang_nocrossrefs *nocrossref_list;
struct asneeded_minfo **asneeded_list_tail; struct asneeded_minfo **asneeded_list_tail;
@ -8261,6 +8263,28 @@ lang_process (void)
lang_end (); 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 */ /* EXPORTED TO YACC */
void void

5
ld/ldlang.h

@ -530,6 +530,7 @@ extern bool lang_has_input_file;
extern lang_statement_list_type statement_list; extern lang_statement_list_type statement_list;
extern lang_statement_list_type *stat_ptr; extern lang_statement_list_type *stat_ptr;
extern bool delete_output_file_on_failure; extern bool delete_output_file_on_failure;
extern bool enable_linker_version;
extern struct bfd_sym_chain entry_symbol; extern struct bfd_sym_chain entry_symbol;
extern const char *entry_section; extern const char *entry_section;
@ -735,6 +736,8 @@ extern void
lang_add_gc_name (const char *); lang_add_gc_name (const char *);
extern bool 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 #endif

2
ld/ldlex.h

@ -170,6 +170,8 @@ enum option_values
OPTION_NO_WARN_EXECSTACK, OPTION_NO_WARN_EXECSTACK,
OPTION_WARN_RWX_SEGMENTS, OPTION_WARN_RWX_SEGMENTS,
OPTION_NO_WARN_RWX_SEGMENTS, OPTION_NO_WARN_RWX_SEGMENTS,
OPTION_ENABLE_LINKER_VERSION,
OPTION_DISABLE_LINKER_VERSION,
}; };
/* The initial parser states. */ /* The initial parser states. */

1
ld/ldlex.l

@ -310,6 +310,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
<WILD>"SHORT" { RTOKEN(SHORT); } <WILD>"SHORT" { RTOKEN(SHORT); }
<WILD>"BYTE" { RTOKEN(BYTE); } <WILD>"BYTE" { RTOKEN(BYTE); }
<WILD>"ASCIZ" { RTOKEN(ASCIZ); } <WILD>"ASCIZ" { RTOKEN(ASCIZ); }
<WILD>"LINKER_VERSION" { RTOKEN(LINKER_VERSION); }
<SCRIPT>"NOFLOAT" { RTOKEN(NOFLOAT); } <SCRIPT>"NOFLOAT" { RTOKEN(NOFLOAT); }
<SCRIPT,EXPRESSION>"NOCROSSREFS" { RTOKEN(NOCROSSREFS); } <SCRIPT,EXPRESSION>"NOCROSSREFS" { RTOKEN(NOCROSSREFS); }
<SCRIPT,EXPRESSION>"NOCROSSREFS_TO" { RTOKEN(NOCROSSREFS_TO); } <SCRIPT,EXPRESSION>"NOCROSSREFS_TO" { RTOKEN(NOCROSSREFS_TO); }

11
ld/lexsup.c

@ -130,6 +130,10 @@ static const struct ld_option ld_options[] =
'\0', NULL, N_("Enable support of non-contiguous memory regions"), TWO_DASHES }, '\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}, { {"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 }, '\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}, { {"EB", no_argument, NULL, OPTION_EB},
'\0', NULL, N_("Link big-endian objects"), ONE_DASH }, '\0', NULL, N_("Link big-endian objects"), ONE_DASH },
{ {"EL", no_argument, NULL, OPTION_EL}, { {"EL", no_argument, NULL, OPTION_EL},
@ -1095,6 +1099,13 @@ parse_args (unsigned argc, char **argv)
break; break;
#endif #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: case OPTION_UNDEFINED_VERSION:
link_info.allow_undefined_version = true; link_info.allow_undefined_version = true;
break; break;

13
ld/scripttempl/arclinux.sc

@ -656,18 +656,7 @@ EOF
test -z "${NON_ALLOC_DYN}" || emit_dyn test -z "${NON_ALLOC_DYN}" || emit_dyn
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) }
EOF
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc

11
ld/scripttempl/avr.sc

@ -328,16 +328,9 @@ cat <<EOF
EOF EOF
fi fi
cat <<EOF . $srcdir/scripttempl/misc-sections.sc
/* Stabs debugging sections. */ cat <<EOF
.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) } .note.gnu.build-id ${RELOCATING-0} : { *(.note.gnu.build-id) }
EOF EOF

8
ld/scripttempl/dlx.sc

@ -38,5 +38,13 @@ SECTIONS
${RELOCATING+*(COMMON)} ${RELOCATING+*(COMMON)}
${RELOCATING+end = .;} ${RELOCATING+end = .;}
} }
EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc
cat <<EOF
} }
EOF EOF

15
ld/scripttempl/elf.sc

@ -722,20 +722,7 @@ EOF
test -z "${NON_ALLOC_DYN}" || emit_dyn test -z "${NON_ALLOC_DYN}" || emit_dyn
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) }
.gnu.build.attributes : { *(.gnu.build.attributes${RELOCATING+ .gnu.build.attributes.*}) }
EOF
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc

3
ld/scripttempl/elf32cr16.sc

@ -169,10 +169,9 @@ SECTIONS
__ISTACK_START = .; __ISTACK_START = .;
}${RELOCATING+ > ram} }${RELOCATING+ > ram}
.comment 0 : { *(.comment) }
EOF EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

3
ld/scripttempl/elf32crx.sc

@ -167,10 +167,9 @@ SECTIONS
__ISTACK_START = .; __ISTACK_START = .;
} > ram } > ram
.comment 0 : { *(.comment) }
EOF EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

9
ld/scripttempl/elf32msp430.sc

@ -330,16 +330,9 @@ SECTIONS
/* Stabs for profiling information*/ /* Stabs for profiling information*/
.profiler 0 : { *(.profiler) } .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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
test -n "${RELOCATING}" && cat <<EOF test -n "${RELOCATING}" && cat <<EOF

15
ld/scripttempl/elf64bpf.sc

@ -679,20 +679,7 @@ EOF
test -z "${NON_ALLOC_DYN}" || emit_dyn test -z "${NON_ALLOC_DYN}" || emit_dyn
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) }
.gnu.build.attributes : { *(.gnu.build.attributes${RELOCATING+ .gnu.build.attributes.*}) }
EOF
cat <<EOF cat <<EOF
${ATTRS_SECTIONS} ${ATTRS_SECTIONS}

14
ld/scripttempl/elf64hppa.sc

@ -533,19 +533,7 @@ if test -n "${NON_ALLOC_DYN}"; then
rm -f ldscripts/dyntmp.$$ rm -f ldscripts/dyntmp.$$
fi 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) }
EOF
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

11
ld/scripttempl/elf_chaos.sc

@ -325,18 +325,9 @@ cat <<EOF
${RELOCATING+PROVIDE (end = .);} ${RELOCATING+PROVIDE (end = .);}
${STACK_ADDR+${STACK}} ${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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

14
ld/scripttempl/elfarc.sc

@ -409,19 +409,7 @@ test -n "${RELOCATING}" && cat <<EOF
} }
EOF EOF
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) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
EOF
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

10
ld/scripttempl/elfarcv2.sc

@ -291,18 +291,10 @@ SECTIONS
${RELOCATING+ PROVIDE (__stack_top = (ORIGIN (${DATA_MEMORY}) + LENGTH (${DATA_MEMORY}) - 1) & -4);} ${RELOCATING+ PROVIDE (__stack_top = (ORIGIN (${DATA_MEMORY}) + LENGTH (${DATA_MEMORY}) - 1) & -4);}
${RELOCATING+ PROVIDE (__end_heap = ORIGIN (${DATA_MEMORY}) + LENGTH (${DATA_MEMORY}) - 1);} ${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) } .note.gnu.build-id : { *(.note.gnu.build-id) }
EOF EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

11
ld/scripttempl/elfd10v.sc

@ -172,18 +172,9 @@ SECTIONS
${RELOCATING+$STACK} ${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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

11
ld/scripttempl/elfd30v.sc

@ -197,18 +197,9 @@ SECTIONS
${RELOCATING+ PROVIDE (__eit_end = .) ; } ${RELOCATING+ PROVIDE (__eit_end = .) ; }
} ${RELOCATING+ > eit} } ${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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

11
ld/scripttempl/elfm68hc11.sc

@ -428,18 +428,9 @@ SECTIONS
${RELOCATING+${VECTORS}} ${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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

12
ld/scripttempl/elfm68hc12.sc

@ -430,17 +430,11 @@ SECTIONS
} ${RELOCATING+ > ${EEPROM_MEMORY}} } ${RELOCATING+ > ${EEPROM_MEMORY}}
${RELOCATING+${VECTORS}} ${RELOCATING+${VECTORS}}
EOF
/* Stabs debugging sections. */ . $srcdir/scripttempl/misc-sections.sc
.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
/* Treatment of DWARF debug section must be at end of the linker /* Treatment of DWARF debug section must be at end of the linker
script to avoid problems when there are undefined symbols. It's necessary script to avoid problems when there are undefined symbols. It's necessary
to avoid that the DWARF section is relocated before such undefined to avoid that the DWARF section is relocated before such undefined

12
ld/scripttempl/elfm9s12z.sc

@ -420,17 +420,11 @@ SECTIONS
} ${RELOCATING+ > ${EEPROM_MEMORY}} } ${RELOCATING+ > ${EEPROM_MEMORY}}
${RELOCATING+${VECTORS}} ${RELOCATING+${VECTORS}}
EOF
/* Stabs debugging sections. */ . $srcdir/scripttempl/misc-sections.sc
.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
/* Treatment of DWARF debug section must be at end of the linker /* Treatment of DWARF debug section must be at end of the linker
script to avoid problems when there are undefined symbols. It's necessary script to avoid problems when there are undefined symbols. It's necessary
to avoid that the DWARF section is relocated before such undefined to avoid that the DWARF section is relocated before such undefined

6
ld/scripttempl/elfmicroblaze.sc

@ -232,5 +232,11 @@ SECTIONS
${RELOCATING+*(.tbss.*)} ${RELOCATING+*(.tbss.*)}
${RELOCATING+*(.gnu.linkonce.tb.*)} ${RELOCATING+*(.gnu.linkonce.tb.*)}
} }
EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc
cat <<EOF
} }
EOF EOF

12
ld/scripttempl/elfxgate.sc

@ -430,19 +430,9 @@ SECTIONS
} ${RELOCATING+ > ${EEPROM_MEMORY}} } ${RELOCATING+ > ${EEPROM_MEMORY}}
${RELOCATING+${VECTORS}} ${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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

13
ld/scripttempl/elfxtensa.sc

@ -543,18 +543,7 @@ if test -n "${NON_ALLOC_DYN}"; then
rm -f ldscripts/dyntmp.$$ rm -f ldscripts/dyntmp.$$
fi 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) }
EOF
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc

13
ld/scripttempl/epiphany_4x4.sc

@ -626,18 +626,7 @@ if test -n "${NON_ALLOC_DYN}"; then
rm -f ldscripts/dyntmp.$$ rm -f ldscripts/dyntmp.$$
fi 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) }
EOF
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc

5
ld/scripttempl/ft32.sc

@ -69,10 +69,5 @@ SECTIONS
{ {
*(.stabstr) *(.stabstr)
} }
EOF
. $srcdir/scripttempl/DWARF.sc
cat <<EOF
} }
EOF EOF

11
ld/scripttempl/ip2k.sc

@ -135,17 +135,10 @@ SECTIONS
/* Stack. */ /* Stack. */
PROVIDE (__stack = 0x01000FFF); 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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

12
ld/scripttempl/iq2000.sc

@ -406,18 +406,10 @@ cat <<EOF
${RELOCATING+_end = .;} ${RELOCATING+_end = .;}
${RELOCATING+PROVIDE (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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

12
ld/scripttempl/mep.sc

@ -406,18 +406,10 @@ cat <<EOF
${RELOCATING+PROVIDE (end = .);} ${RELOCATING+PROVIDE (end = .);}
${RELOCATING+${DATA_SEGMENT_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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

20
ld/scripttempl/misc-sections.sc

@ -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

13
ld/scripttempl/nds32elf.sc

@ -601,18 +601,7 @@ EOF
test -z "${NON_ALLOC_DYN}" || emit_dyn test -z "${NON_ALLOC_DYN}" || emit_dyn
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) }
EOF
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc

10
ld/scripttempl/pru.sc

@ -201,17 +201,11 @@ SECTIONS
place it in the target dmem memory. */ place it in the target dmem memory. */
.pru_irq_map 0 : { *(.pru_irq_map) } .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) } .note.gnu.build-id ${RELOCATING-0} : { *(.note.gnu.build-id) }
EOF EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

11
ld/scripttempl/v850.sc

@ -196,17 +196,10 @@ SECTIONS
.note.renesas 0 : { KEEP(*(.note.renesas)) } .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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

11
ld/scripttempl/v850_rh850.sc

@ -216,17 +216,10 @@ SECTIONS
.note.renesas 0 : { KEEP(*(.note.renesas)) } .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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

2
ld/scripttempl/visium.sc

@ -163,7 +163,7 @@ SECTIONS
.stab.index 0 : { *(.stab.index) } .stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) } .stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) } .comment 0 : { *(.comment); LINKER_VERSION; }
EOF EOF

13
ld/scripttempl/xstormy16.sc

@ -203,19 +203,10 @@ SECTIONS
${RELOCATING+PROVIDE (etext = .);} ${RELOCATING+PROVIDE (etext = .);}
${RELOCATING+${OTHER_READONLY_SECTIONS}} ${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 EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc . $srcdir/scripttempl/DWARF.sc
cat <<EOF cat <<EOF

6
ld/scripttempl/z80.sc

@ -49,5 +49,11 @@ SECTIONS
*(bss) *(bss)
${RELOCATING+ __Hbss = .;} ${RELOCATING+ __Hbss = .;}
} }
EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc
cat <<EOF
} }
EOF EOF

8
ld/testsuite/ld-scripts/ld-version-2.d

@ -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.*

7
ld/testsuite/ld-scripts/ld-version.d

@ -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.*

9
ld/testsuite/ld-scripts/ld-version.t

@ -0,0 +1,9 @@
SECTIONS
{
.comment :
{
*(.comment);
LINKER_VERSION;
}
/DISCARD/ : { *(*) }
}

2
ld/testsuite/ld-scripts/script.exp

@ -231,6 +231,8 @@ run_dump_test "asciz"
run_dump_test "align-with-input" run_dump_test "align-with-input"
run_dump_test "pr20302" run_dump_test "pr20302"
run_dump_test "output-section-types" 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 (default)}}
run_dump_test "segment-start" {{name (overridden)} \ run_dump_test "segment-start" {{name (overridden)} \

Loading…
Cancel
Save