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>
* emultempl/riscvelf.em: Add option parsing.

4
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.

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

6
ld/ldgram.y

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

28
ld/ldlang.c

@ -27,7 +27,6 @@
#include "obstack.h"
#include "bfdlink.h"
#include "ctf-api.h"
#include "ld.h"
#include "ldmain.h"
#include "ldexp.h"
@ -42,9 +41,11 @@
#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

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

2
ld/ldlex.h

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

1
ld/ldlex.l

@ -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); }

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 },
{ {"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;

13
ld/scripttempl/arclinux.sc

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

11
ld/scripttempl/avr.sc

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

8
ld/scripttempl/dlx.sc

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

15
ld/scripttempl/elf.sc

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

3
ld/scripttempl/elf32cr16.sc

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

3
ld/scripttempl/elf32crx.sc

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

9
ld/scripttempl/elf32msp430.sc

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

15
ld/scripttempl/elf64bpf.sc

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

14
ld/scripttempl/elf64hppa.sc

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

11
ld/scripttempl/elf_chaos.sc

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

14
ld/scripttempl/elfarc.sc

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

10
ld/scripttempl/elfarcv2.sc

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

11
ld/scripttempl/elfd10v.sc

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

11
ld/scripttempl/elfd30v.sc

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

11
ld/scripttempl/elfm68hc11.sc

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

12
ld/scripttempl/elfm68hc12.sc

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

12
ld/scripttempl/elfm9s12z.sc

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

6
ld/scripttempl/elfmicroblaze.sc

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

12
ld/scripttempl/elfxgate.sc

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

13
ld/scripttempl/elfxtensa.sc

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

13
ld/scripttempl/epiphany_4x4.sc

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

5
ld/scripttempl/ft32.sc

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

11
ld/scripttempl/ip2k.sc

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

12
ld/scripttempl/iq2000.sc

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

12
ld/scripttempl/mep.sc

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

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

10
ld/scripttempl/pru.sc

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

11
ld/scripttempl/v850.sc

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

11
ld/scripttempl/v850_rh850.sc

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

2
ld/scripttempl/visium.sc

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

13
ld/scripttempl/xstormy16.sc

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

6
ld/scripttempl/z80.sc

@ -49,5 +49,11 @@ SECTIONS
*(bss)
${RELOCATING+ __Hbss = .;}
}
EOF
. $srcdir/scripttempl/misc-sections.sc
. $srcdir/scripttempl/DWARF.sc
cat <<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 "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)} \

Loading…
Cancel
Save