summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-03-21 14:58:35 +1030
committerAlan Modra <amodra@gmail.com>2019-03-21 22:19:20 +1030
commit2d3181c7c466d247d274ca6dbed6c598ceaa6163 (patch)
tree7c24315b2d4574df7a54e28ba81a28f91020a02f
parentcc00a5d100973549bf5e4840937529633f4de1fa (diff)
downloadbinutils-gdb-2d3181c7c466d247d274ca6dbed6c598ceaa6163.tar.gz
Add SORT_NONE to .init and .fini in scripts
The special case for .init and .fini in update_wild_statements is ineffective for .init or .fini wildcards inside other output sections. The special case needs to be on the wildcard, not the output section. This patch is belt and braces, both fixing update_wild_statements and the scripts. * scripttempl/alpha.sc, * scripttempl/armbpabi.sc, * scripttempl/crisaout.sc, * scripttempl/elf32cr16.sc, * scripttempl/elf32crx.sc, * scripttempl/elf32xc16x.sc, * scripttempl/elf32xc16xl.sc, * scripttempl/elf32xc16xs.sc, * scripttempl/elf64hppa.sc, * scripttempl/elf_chaos.sc, * scripttempl/elfarc.sc, * scripttempl/elfarcv2.sc, * scripttempl/elfd30v.sc, * scripttempl/elfm68hc11.sc, * scripttempl/elfm68hc12.sc, * scripttempl/elfm9s12z.sc, * scripttempl/elfmicroblaze.sc, * scripttempl/elfxgate.sc, * scripttempl/elfxtensa.sc, * scripttempl/epiphany_4x4.sc, * scripttempl/ft32.sc, * scripttempl/i386beos.sc, * scripttempl/iq2000.sc, * scripttempl/mcorepe.sc, * scripttempl/mep.sc, * scripttempl/mips.sc, * scripttempl/moxie.sc, * scripttempl/pe.sc, * scripttempl/pep.sc, * scripttempl/ppcpe.sc, * scripttempl/tic4xcoff.sc, * scripttempl/tic80coff.sc, * scripttempl/v850.sc, * scripttempl/v850_rh850.sc, * scripttempl/visium.sc, * scripttempl/xstormy16.sc: Add KEEP and SORT_NONE to .init and .fini wildcards. * scripttempl/elf32xc16x.sc, * scripttempl/elf32xc16xl.sc, * scripttempl/elf32xc16xs.sc: Add .fini wildcard. * scripttempl/elf_chaos.sc: Add .init output section. * scripttempl/elfd30v.sc: Remove duplicate .init. * scripttempl/elfm68hc11.sc, * scripttempl/elfm68hc12.sc, * scripttempl/elfm9s12z.sc, * scripttempl/elfxgate.sc: Remove duplicate .init, and add .fini wildcard. * scripttempl/ppcpe.sc (INIT, FINI): Delete. * ldlang.c (update_wild_statements): Special case .init and .fini in the wildcard, not the output section.
-rw-r--r--ld/ChangeLog32
-rw-r--r--ld/ldlang.c12
-rw-r--r--ld/scripttempl/alpha.sc4
-rw-r--r--ld/scripttempl/armbpabi.sc4
-rw-r--r--ld/scripttempl/crisaout.sc4
-rw-r--r--ld/scripttempl/elf32cr16.sc4
-rw-r--r--ld/scripttempl/elf32crx.sc4
-rw-r--r--ld/scripttempl/elf32xc16x.sc3
-rw-r--r--ld/scripttempl/elf32xc16xl.sc3
-rw-r--r--ld/scripttempl/elf32xc16xs.sc3
-rw-r--r--ld/scripttempl/elf64hppa.sc4
-rw-r--r--ld/scripttempl/elf_chaos.sc8
-rw-r--r--ld/scripttempl/elfarc.sc4
-rw-r--r--ld/scripttempl/elfarcv2.sc4
-rw-r--r--ld/scripttempl/elfd30v.sc5
-rw-r--r--ld/scripttempl/elfm68hc11.sc4
-rw-r--r--ld/scripttempl/elfm68hc12.sc4
-rw-r--r--ld/scripttempl/elfm9s12z.sc4
-rw-r--r--ld/scripttempl/elfmicroblaze.sc4
-rw-r--r--ld/scripttempl/elfxgate.sc4
-rw-r--r--ld/scripttempl/elfxtensa.sc4
-rw-r--r--ld/scripttempl/epiphany_4x4.sc4
-rw-r--r--ld/scripttempl/ft32.sc4
-rw-r--r--ld/scripttempl/i386beos.sc4
-rw-r--r--ld/scripttempl/iq2000.sc4
-rw-r--r--ld/scripttempl/mcorepe.sc4
-rw-r--r--ld/scripttempl/mep.sc4
-rw-r--r--ld/scripttempl/mips.sc12
-rw-r--r--ld/scripttempl/moxie.sc6
-rw-r--r--ld/scripttempl/pe.sc4
-rw-r--r--ld/scripttempl/pep.sc4
-rw-r--r--ld/scripttempl/ppcpe.sc9
-rw-r--r--ld/scripttempl/tic4xcoff.sc4
-rw-r--r--ld/scripttempl/tic80coff.sc4
-rw-r--r--ld/scripttempl/v850.sc4
-rw-r--r--ld/scripttempl/v850_rh850.sc4
-rw-r--r--ld/scripttempl/visium.sc4
-rw-r--r--ld/scripttempl/xstormy16.sc4
38 files changed, 119 insertions, 86 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 37688808c92..a8f8e306f84 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,37 @@
2019-03-21 Alan Modra <amodra@gmail.com>
+ * scripttempl/alpha.sc, * scripttempl/armbpabi.sc,
+ * scripttempl/crisaout.sc, * scripttempl/elf32cr16.sc,
+ * scripttempl/elf32crx.sc, * scripttempl/elf32xc16x.sc,
+ * scripttempl/elf32xc16xl.sc, * scripttempl/elf32xc16xs.sc,
+ * scripttempl/elf64hppa.sc, * scripttempl/elf_chaos.sc,
+ * scripttempl/elfarc.sc, * scripttempl/elfarcv2.sc,
+ * scripttempl/elfd30v.sc, * scripttempl/elfm68hc11.sc,
+ * scripttempl/elfm68hc12.sc, * scripttempl/elfm9s12z.sc,
+ * scripttempl/elfmicroblaze.sc, * scripttempl/elfxgate.sc,
+ * scripttempl/elfxtensa.sc, * scripttempl/epiphany_4x4.sc,
+ * scripttempl/ft32.sc, * scripttempl/i386beos.sc,
+ * scripttempl/iq2000.sc, * scripttempl/mcorepe.sc,
+ * scripttempl/mep.sc, * scripttempl/mips.sc, * scripttempl/moxie.sc,
+ * scripttempl/pe.sc, * scripttempl/pep.sc, * scripttempl/ppcpe.sc,
+ * scripttempl/tic4xcoff.sc, * scripttempl/tic80coff.sc,
+ * scripttempl/v850.sc, * scripttempl/v850_rh850.sc,
+ * scripttempl/visium.sc, * scripttempl/xstormy16.sc: Add KEEP and
+ SORT_NONE to .init and .fini wildcards.
+ * scripttempl/elf32xc16x.sc,
+ * scripttempl/elf32xc16xl.sc,
+ * scripttempl/elf32xc16xs.sc: Add .fini wildcard.
+ * scripttempl/elf_chaos.sc: Add .init output section.
+ * scripttempl/elfd30v.sc: Remove duplicate .init.
+ * scripttempl/elfm68hc11.sc, * scripttempl/elfm68hc12.sc,
+ * scripttempl/elfm9s12z.sc, * scripttempl/elfxgate.sc: Remove
+ duplicate .init, and add .fini wildcard.
+ * scripttempl/ppcpe.sc (INIT, FINI): Delete.
+ * ldlang.c (update_wild_statements): Special case .init and
+ .fini in the wildcard, not the output section.
+
+2019-03-21 Alan Modra <amodra@gmail.com>
+
* emulparams/elf32lm32fd.sh (DYNAMIC_LINK): Undef.
2019-03-21 Alan Modra <amodra@gmail.com>
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 77d890eb704..1952d4a475c 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -3744,7 +3744,9 @@ update_wild_statements (lang_statement_union_type *s)
case lang_wild_statement_enum:
for (sec = s->wild_statement.section_list; sec != NULL;
sec = sec->next)
- {
+ /* Don't sort .init/.fini sections. */
+ if (strcmp (sec->spec.name, ".init") != 0
+ && strcmp (sec->spec.name, ".fini") != 0)
switch (sec->spec.sorted)
{
case none:
@@ -3761,7 +3763,6 @@ update_wild_statements (lang_statement_union_type *s)
default:
break;
}
- }
break;
case lang_constructors_statement_enum:
@@ -3769,11 +3770,8 @@ update_wild_statements (lang_statement_union_type *s)
break;
case lang_output_section_statement_enum:
- /* Don't sort .init/.fini sections. */
- if (strcmp (s->output_section_statement.name, ".init") != 0
- && strcmp (s->output_section_statement.name, ".fini") != 0)
- update_wild_statements
- (s->output_section_statement.children.head);
+ update_wild_statements
+ (s->output_section_statement.children.head);
break;
case lang_group_statement_enum:
diff --git a/ld/scripttempl/alpha.sc b/ld/scripttempl/alpha.sc
index d0c7c71d3ac..d1d978d7ec5 100644
--- a/ld/scripttempl/alpha.sc
+++ b/ld/scripttempl/alpha.sc
@@ -34,12 +34,12 @@ SECTIONS
.text : {
${RELOCATING+ _ftext = .;}
${RELOCATING+ __istart = .;}
- ${RELOCATING+ *(.init)}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.init)))}
${RELOCATING+ LONG (0x6bfa8001)}
${RELOCATING+ eprol = .;}
*(.text)
${RELOCATING+ __fstart = .;}
- ${RELOCATING+ *(.fini)}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.fini)))}
${RELOCATING+ LONG (0x6bfa8001)}
${RELOCATING+ _etext = .;}
}
diff --git a/ld/scripttempl/armbpabi.sc b/ld/scripttempl/armbpabi.sc
index a573a1db082..cb71b557d3f 100644
--- a/ld/scripttempl/armbpabi.sc
+++ b/ld/scripttempl/armbpabi.sc
@@ -208,7 +208,7 @@ cat <<EOF
.init ${RELOCATING-0} :
{
${RELOCATING+${INIT_START}}
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
${RELOCATING+${INIT_END}}
} =${NOP-0}
.text ${RELOCATING-0} :
@@ -222,7 +222,7 @@ cat <<EOF
.fini ${RELOCATING-0} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
} =${NOP-0}
/* The SymbianOS kernel requires that the PLT go at the end of the
diff --git a/ld/scripttempl/crisaout.sc b/ld/scripttempl/crisaout.sc
index 5cb59e141c4..9a9cf78d815 100644
--- a/ld/scripttempl/crisaout.sc
+++ b/ld/scripttempl/crisaout.sc
@@ -42,7 +42,7 @@ SECTIONS
${CONSTRUCTING+ PROVIDE (___do_global_ctors = .);}
${CONSTRUCTING+ SHORT (0xe1fc); /* push srp */}
${CONSTRUCTING+ SHORT (0xbe7e);}
- ${CONSTRUCTING+ *(.init)}
+ ${CONSTRUCTING+ KEEP (*(SORT_NONE(.init)))}
${CONSTRUCTING+ SHORT (0x0d3e); /* jump [sp+] */}
${CONSTRUCTING+ PROVIDE (__init__end = .);}
${CONSTRUCTING+ PROVIDE (___init__end = .);}
@@ -52,7 +52,7 @@ SECTIONS
${CONSTRUCTING+ PROVIDE (___do_global_dtors = .);}
${CONSTRUCTING+ SHORT (0xe1fc); /* push srp */}
${CONSTRUCTING+ SHORT (0xbe7e);}
- ${CONSTRUCTING+ *(.fini)}
+ ${CONSTRUCTING+ KEEP (*(SORT_NONE(.fini)))}
${CONSTRUCTING+ SHORT (0x0d3e); /* jump [sp+] */}
${CONSTRUCTING+ PROVIDE (__fini__end = .);}
${CONSTRUCTING+ ___fini__end = .;}
diff --git a/ld/scripttempl/elf32cr16.sc b/ld/scripttempl/elf32cr16.sc
index 9ae6bc25571..0da4603618c 100644
--- a/ld/scripttempl/elf32cr16.sc
+++ b/ld/scripttempl/elf32cr16.sc
@@ -62,14 +62,14 @@ SECTIONS
.init :
{
__INIT_START = .;
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
__INIT_END = .;
}${RELOCATING+ > rom}
.fini :
{
__FINI_START = .;
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
__FINI_END = .;
}${RELOCATING+ > rom}
diff --git a/ld/scripttempl/elf32crx.sc b/ld/scripttempl/elf32crx.sc
index 46acea1799a..64fefda1206 100644
--- a/ld/scripttempl/elf32crx.sc
+++ b/ld/scripttempl/elf32crx.sc
@@ -58,14 +58,14 @@ SECTIONS
.init :
{
__INIT_START = .;
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
__INIT_END = .;
} > rom
.fini :
{
__FINI_START = .;
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
__FINI_END = .;
} > rom
diff --git a/ld/scripttempl/elf32xc16x.sc b/ld/scripttempl/elf32xc16x.sc
index b4325585fd5..a451d41b9aa 100644
--- a/ld/scripttempl/elf32xc16x.sc
+++ b/ld/scripttempl/elf32xc16x.sc
@@ -38,7 +38,8 @@ SECTIONS
{
.init :
{
- *(.init)
+ KEEP (*(SORT_NONE(.init)))
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
} ${RELOCATING+ >introm}
.text :
diff --git a/ld/scripttempl/elf32xc16xl.sc b/ld/scripttempl/elf32xc16xl.sc
index 3b6a5164ad4..9dca52d9f5b 100644
--- a/ld/scripttempl/elf32xc16xl.sc
+++ b/ld/scripttempl/elf32xc16xl.sc
@@ -40,7 +40,8 @@ SECTIONS
} ${RELOCATING+ > vectarea} */
.init :
{
- *(.init)
+ KEEP (*(SORT_NONE(.init)))
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
} ${RELOCATING+ >introm}
.text :
diff --git a/ld/scripttempl/elf32xc16xs.sc b/ld/scripttempl/elf32xc16xs.sc
index 856991827ff..d3eec11ad3f 100644
--- a/ld/scripttempl/elf32xc16xs.sc
+++ b/ld/scripttempl/elf32xc16xs.sc
@@ -41,7 +41,8 @@ SECTIONS
} ${RELOCATING+ > vectarea} */
.init :
{
- *(.init)
+ KEEP (*(SORT_NONE(.init)))
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
} ${RELOCATING+ >introm}
.text :
diff --git a/ld/scripttempl/elf64hppa.sc b/ld/scripttempl/elf64hppa.sc
index 89271bbca8f..ee8fb93bba3 100644
--- a/ld/scripttempl/elf64hppa.sc
+++ b/ld/scripttempl/elf64hppa.sc
@@ -403,7 +403,7 @@ cat <<EOF
.init ${RELOCATING-0} :
{
${RELOCATING+${INIT_START}}
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
${RELOCATING+${INIT_END}}
} =${NOP-0}
@@ -420,7 +420,7 @@ cat <<EOF
.fini ${RELOCATING-0} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
} =${NOP-0}
${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
diff --git a/ld/scripttempl/elf_chaos.sc b/ld/scripttempl/elf_chaos.sc
index c26c508b9e6..1cc63b63ddc 100644
--- a/ld/scripttempl/elf_chaos.sc
+++ b/ld/scripttempl/elf_chaos.sc
@@ -251,10 +251,16 @@ cat <<EOF
*(.gnu.warning)
${RELOCATING+${OTHER_TEXT_SECTIONS}}
} =${NOP-0}
+ .init ${RELOCATING-0} :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(SORT_NONE(.init)))
+ ${RELOCATING+${INIT_END}}
+ } =${NOP-0}
.fini ${RELOCATING-0} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
} =${NOP-0}
${RELOCATING+PROVIDE (__etext = .);}
diff --git a/ld/scripttempl/elfarc.sc b/ld/scripttempl/elfarc.sc
index 5738de31d10..79d9924092a 100644
--- a/ld/scripttempl/elfarc.sc
+++ b/ld/scripttempl/elfarc.sc
@@ -257,7 +257,7 @@ cat <<EOF
.init ${RELOCATING-0} :
{
${RELOCATING+${INIT_START}}
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
${RELOCATING+${INIT_END}}
} =${NOP-0}
@@ -283,7 +283,7 @@ cat <<EOF
.fini ${RELOCATING-0} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
} =${NOP-0}
${RELOCATING+PROVIDE (__etext = .);}
diff --git a/ld/scripttempl/elfarcv2.sc b/ld/scripttempl/elfarcv2.sc
index 1027123eec6..9b55333dc13 100644
--- a/ld/scripttempl/elfarcv2.sc
+++ b/ld/scripttempl/elfarcv2.sc
@@ -196,7 +196,7 @@ SECTIONS
.init ${RELOCATING-0} :
{
${RELOCATING+${INIT_START}}
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
${RELOCATING+${INIT_END}}
} ${RELOCATING+ > ${TEXT_MEMORY}} =${NOP-0}
@@ -215,7 +215,7 @@ SECTIONS
.fini ${RELOCATING-0} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
${RELOCATING+PROVIDE (__etext = .);}
diff --git a/ld/scripttempl/elfd30v.sc b/ld/scripttempl/elfd30v.sc
index c2b3ebabdbf..e324c601095 100644
--- a/ld/scripttempl/elfd30v.sc
+++ b/ld/scripttempl/elfd30v.sc
@@ -116,7 +116,7 @@ SECTIONS
.rel.plt ${RELOCATING-0} : { *(.rel.plt) }
.rela.plt ${RELOCATING-0} : { *(.rela.plt) }
- .init ${RELOCATING-0} : { *(.init) } =${NOP-0}
+ .init ${RELOCATING-0} : { KEEP (*(SORT_NONE(.init))) } =${NOP-0}
${DATA_PLT-${PLT}}
/* Internal text space */
@@ -127,8 +127,7 @@ SECTIONS
{
*(.text)
${RELOCATING+*(.gnu.linkonce.t*)
- *(SORT_NONE(.init))
- *(SORT_NONE(.fini))
+ KEEP (*(SORT_NONE(.fini)))
_etext = . ;}
} ${RELOCATING+ > ${TEXT_MEMORY}}
diff --git a/ld/scripttempl/elfm68hc11.sc b/ld/scripttempl/elfm68hc11.sc
index f5406f40c2e..dc3f14eae53 100644
--- a/ld/scripttempl/elfm68hc11.sc
+++ b/ld/scripttempl/elfm68hc11.sc
@@ -307,7 +307,7 @@ SECTIONS
.init ${RELOCATING-0} :
{
- *(.init)
+ KEEP (*(SORT_NONE(.init)))
} ${RELOCATING+=${NOP-0}}
${RELOCATING-${INSTALL_RELOC}}
@@ -318,7 +318,6 @@ SECTIONS
/* Put startup code at beginning so that _start keeps same address. */
${RELOCATING+${STARTUP_CODE}}
- ${RELOCATING+*(.init)}
*(.text)
${RELOCATING+*(.text.*)}
/* .gnu.warning sections are handled specially by elf32.em. */
@@ -327,6 +326,7 @@ SECTIONS
${RELOCATING+*(.tramp)}
${RELOCATING+*(.tramp.*)}
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
${RELOCATING+${FINISH_CODE}}
${RELOCATING+_etext = .;}
diff --git a/ld/scripttempl/elfm68hc12.sc b/ld/scripttempl/elfm68hc12.sc
index 5c68ffffa58..9f8d92aeae8 100644
--- a/ld/scripttempl/elfm68hc12.sc
+++ b/ld/scripttempl/elfm68hc12.sc
@@ -306,7 +306,7 @@ SECTIONS
.init ${RELOCATING-0} :
{
- *(.init)
+ KEEP (*(SORT_NONE(.init)))
} ${RELOCATING+=${NOP-0}}
${RELOCATING-${INSTALL_RELOC}}
@@ -317,7 +317,6 @@ SECTIONS
/* Put startup code at beginning so that _start keeps same address. */
${RELOCATING+${STARTUP_CODE}}
- ${RELOCATING+*(.init)}
*(.text)
${RELOCATING+*(.text.*)}
/* .gnu.warning sections are handled specially by elf32.em. */
@@ -326,6 +325,7 @@ SECTIONS
${RELOCATING+*(.tramp)}
${RELOCATING+*(.tramp.*)}
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
${RELOCATING+${FINISH_CODE}}
${RELOCATING+_etext = .;}
diff --git a/ld/scripttempl/elfm9s12z.sc b/ld/scripttempl/elfm9s12z.sc
index 3fd14e93f6e..d640882c173 100644
--- a/ld/scripttempl/elfm9s12z.sc
+++ b/ld/scripttempl/elfm9s12z.sc
@@ -292,7 +292,7 @@ SECTIONS
.init ${RELOCATING-0} :
{
- *(.init)
+ KEEP (*(SORT_NONE(.init)))
} ${RELOCATING+=${NOP-0}}
${RELOCATING-${INSTALL_RELOC}}
@@ -303,7 +303,6 @@ SECTIONS
/* Put startup code at beginning so that _start keeps same address. */
${RELOCATING+${STARTUP_CODE}}
- ${RELOCATING+*(.init)}
*(.text)
${RELOCATING+*(.text.*)}
/* .gnu.warning sections are handled specially by elf32.em. */
@@ -312,6 +311,7 @@ SECTIONS
${RELOCATING+*(.tramp)}
${RELOCATING+*(.tramp.*)}
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
${RELOCATING+${FINISH_CODE}}
${RELOCATING+_etext = .;}
diff --git a/ld/scripttempl/elfmicroblaze.sc b/ld/scripttempl/elfmicroblaze.sc
index 30b9c286707..989b7fd9ae1 100644
--- a/ld/scripttempl/elfmicroblaze.sc
+++ b/ld/scripttempl/elfmicroblaze.sc
@@ -85,8 +85,8 @@ SECTIONS
}
${RELOCATING+ _etext = .;}
- .init : { KEEP (*(.init)) } =0
- .fini : { KEEP (*(.fini)) } =0
+ .init : { KEEP (*(SORT_NONE(.init))) } =0
+ .fini : { KEEP (*(SORT_NONE(.fini))) } =0
${RELOCATING+PROVIDE (__CTOR_LIST__ = .);}
${RELOCATING+PROVIDE (___CTOR_LIST__ = .);}
diff --git a/ld/scripttempl/elfxgate.sc b/ld/scripttempl/elfxgate.sc
index fe16e814df6..fd6c0738e46 100644
--- a/ld/scripttempl/elfxgate.sc
+++ b/ld/scripttempl/elfxgate.sc
@@ -306,7 +306,7 @@ SECTIONS
.init ${RELOCATING-0} :
{
- *(.init)
+ KEEP (*(SORT_NONE(.init)))
} ${RELOCATING+=${NOP-0}}
${RELOCATING-${INSTALL_RELOC}}
@@ -317,7 +317,6 @@ SECTIONS
/* Put startup code at beginning so that _start keeps same address. */
${RELOCATING+${STARTUP_CODE}}
- ${RELOCATING+*(.init)}
*(.text)
${RELOCATING+*(.text.*)}
/* .gnu.warning sections are handled specially by elf32.em. */
@@ -326,6 +325,7 @@ SECTIONS
${RELOCATING+*(.tramp)}
${RELOCATING+*(.tramp.*)}
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
${RELOCATING+${FINISH_CODE}}
${RELOCATING+_etext = .;}
diff --git a/ld/scripttempl/elfxtensa.sc b/ld/scripttempl/elfxtensa.sc
index ef1eee258b0..e81cb98375d 100644
--- a/ld/scripttempl/elfxtensa.sc
+++ b/ld/scripttempl/elfxtensa.sc
@@ -147,9 +147,9 @@ RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.
DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }"
DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }"
INIT_LIT=".init.literal 0 : { *(.init.literal) }"
-INIT=".init 0 : { *(.init) }"
+INIT=".init 0 : { KEEP (*(SORT_NONE(.init))) }"
FINI_LIT=".fini.literal 0 : { *(.fini.literal) }"
-FINI=".fini 0 : { *(.fini) }"
+FINI=".fini 0 : { KEEP (*(SORT_NONE(.fini))) }"
if test -z "${NO_SMALL_DATA}"; then
SBSS=".sbss ${RELOCATING-0} :
{
diff --git a/ld/scripttempl/epiphany_4x4.sc b/ld/scripttempl/epiphany_4x4.sc
index 31569263422..f86ce89dd3c 100644
--- a/ld/scripttempl/epiphany_4x4.sc
+++ b/ld/scripttempl/epiphany_4x4.sc
@@ -472,7 +472,7 @@ cat <<EOF
.init ${RELOCATING-0}${RELOCATING+__init_start} :
{
${RELOCATING+${INIT_START}}
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
${RELOCATING+${INIT_END}}
} /* ${RELOCATING+ > INTERNAL_RAM} */ =${NOP-0}
@@ -482,7 +482,7 @@ cat <<EOF
.fini ${RELOCATING-0}${RELOCATING+ADDR(.init)+SIZEOF(.init)} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
} /* ${RELOCATING+ > INTERNAL_RAM} */ =${NOP-0}
diff --git a/ld/scripttempl/ft32.sc b/ld/scripttempl/ft32.sc
index 2d7d6476943..ef7f332aa50 100644
--- a/ld/scripttempl/ft32.sc
+++ b/ld/scripttempl/ft32.sc
@@ -35,8 +35,8 @@ SECTIONS
*(.text${RELOCATING+*})
${RELOCATING+*(.strings)
*(._pm*)
- *(.init)
- *(.fini)
+ KEEP (*(SORT_NONE(.init)))
+ KEEP (*(SORT_NONE(.fini)))
_etext = .;
. = ALIGN(4);}
} ${RELOCATING+ > flash}
diff --git a/ld/scripttempl/i386beos.sc b/ld/scripttempl/i386beos.sc
index 47da2742ef3..f4ce42ccded 100644
--- a/ld/scripttempl/i386beos.sc
+++ b/ld/scripttempl/i386beos.sc
@@ -59,7 +59,7 @@ SECTIONS
.text ${RELOCATING+ __image_base__ + __section_alignment__ } :
{
${RELOCATING+ __text_start__ = . ;}
- ${RELOCATING+ *(.init)}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.init)))}
*(.text)
${R_TEXT}
*(.glue_7t)
@@ -68,7 +68,7 @@ SECTIONS
LONG (-1); *(.ctors); *(.ctor); LONG (0); }
${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
LONG (-1); *(.dtors); *(.dtor); LONG (0); }
- ${RELOCATING+ *(.fini)}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.fini)))}
/* ??? Why is .gcc_exc here? */
${RELOCATING+ *(.gcc_exc)}
${RELOCATING+ etext = .;}
diff --git a/ld/scripttempl/iq2000.sc b/ld/scripttempl/iq2000.sc
index f2ee794a3fc..2f988ec4aa5 100644
--- a/ld/scripttempl/iq2000.sc
+++ b/ld/scripttempl/iq2000.sc
@@ -289,7 +289,7 @@ cat <<EOF
.init ${RELOCATING-0} :
{
${RELOCATING+${INIT_START}}
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
${RELOCATING+${INIT_END}}
} =${NOP-0}
@@ -308,7 +308,7 @@ cat <<EOF
.fini ${RELOCATING-0} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
} =${NOP-0}
${RELOCATING+PROVIDE (__etext = .);}
diff --git a/ld/scripttempl/mcorepe.sc b/ld/scripttempl/mcorepe.sc
index 45285dc1819..e7cf3d35445 100644
--- a/ld/scripttempl/mcorepe.sc
+++ b/ld/scripttempl/mcorepe.sc
@@ -65,7 +65,7 @@ SECTIONS
{
.text ${RELOCATING+ __image_base__ + __section_alignment__ } :
{
- ${RELOCATING+ *(.init)}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.init)))}
*(.text)
${R_TEXT}
${RELOCATING+ *(.text.*)}
@@ -75,7 +75,7 @@ SECTIONS
LONG (-1); *(.ctors); *(.ctor); LONG (0); }
${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
LONG (-1); *(.dtors); *(.dtor); LONG (0); }
- ${RELOCATING+ *(.fini)}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.fini)))}
/* ??? Why is .gcc_exc here? */
${RELOCATING+ *(.gcc_exc)}
${RELOCATING+ etext = .;}
diff --git a/ld/scripttempl/mep.sc b/ld/scripttempl/mep.sc
index 3ce39ff2128..139d1b83b10 100644
--- a/ld/scripttempl/mep.sc
+++ b/ld/scripttempl/mep.sc
@@ -302,7 +302,7 @@ cat <<EOF
.init ${RELOCATING-0} :
{
${RELOCATING+${INIT_START}}
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
${RELOCATING+${INIT_END}}
} =${NOP-0}
@@ -318,7 +318,7 @@ cat <<EOF
.fini ${RELOCATING-0} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
} =${NOP-0}
${RELOCATING+PROVIDE (__etext = .);}
diff --git a/ld/scripttempl/mips.sc b/ld/scripttempl/mips.sc
index 3b080d3da67..7de30bdc74c 100644
--- a/ld/scripttempl/mips.sc
+++ b/ld/scripttempl/mips.sc
@@ -40,13 +40,13 @@ SECTIONS
{
${RELOCATING+. = ${TEXT_START_ADDR};}
.text : {
- ${RELOCATING+ _ftext = . };
- *(.init)
- ${RELOCATING+ eprol = .};
+ ${RELOCATING+_ftext = .;
+ KEEP (*(SORT_NONE(.init)))
+ eprol = .;}
*(.text)
- *(.fini)
- ${RELOCATING+ etext = .};
- ${RELOCATING+ _etext = .};
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))
+ etext = .;
+ _etext = .;}
}
${RELOCATING+. = ${DATA_ADDR};}
.rdata : {
diff --git a/ld/scripttempl/moxie.sc b/ld/scripttempl/moxie.sc
index bdb63277d1e..fbfc832ca52 100644
--- a/ld/scripttempl/moxie.sc
+++ b/ld/scripttempl/moxie.sc
@@ -29,10 +29,10 @@ SECTIONS
.text :
{
*(.text)
- .init : { KEEP (*(.init)) } =0
- .fini : { KEEP (*(.fini)) } =0
+ ${RELOCATING+KEEP (*(SORT_NONE(.init)))
+ KEEP (*(SORT_NONE(.fini)))
*(.strings)
- ${RELOCATING+ _etext = . ; }
+ _etext = . ; }
} ${RELOCATING+ > ram}
${CONSTRUCTING+${TORS}}
.data :
diff --git a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc
index a9e64f66319..865ee58d919 100644
--- a/ld/scripttempl/pe.sc
+++ b/ld/scripttempl/pe.sc
@@ -90,7 +90,7 @@ SECTIONS
${RELOCATING+. = ALIGN(__section_alignment__);}
.text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} :
{
- ${RELOCATING+ KEEP(*(.init))}
+ ${RELOCATING+KEEP (*(SORT_NONE(.init)))}
*(.text)
${R_TEXT}
${RELOCATING+ *(.text.*)}
@@ -133,7 +133,7 @@ SECTIONS
KEEP(*(SORT_BY_NAME(.dtors.*)));
LONG (0);
}
- ${RELOCATING+ KEEP (*(.fini))}
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
/* ??? Why is .gcc_exc here? */
${RELOCATING+ *(.gcc_exc)}
${RELOCATING+PROVIDE (etext = .);}
diff --git a/ld/scripttempl/pep.sc b/ld/scripttempl/pep.sc
index 41e7962c3f7..e6d594c2bbe 100644
--- a/ld/scripttempl/pep.sc
+++ b/ld/scripttempl/pep.sc
@@ -90,7 +90,7 @@ SECTIONS
${RELOCATING+. = ALIGN(__section_alignment__);}
.text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} :
{
- ${RELOCATING+ KEEP(*(.init))}
+ ${RELOCATING+KEEP (*(SORT_NONE(.init)))}
*(.text)
${R_TEXT}
${RELOCATING+ *(.text.*)}
@@ -134,7 +134,7 @@ SECTIONS
KEEP (*(SORT_BY_NAME(.dtors.*)));
LONG (0); LONG (0);
}
- ${RELOCATING+ KEEP (*(.fini))}
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
/* ??? Why is .gcc_exc here? */
${RELOCATING+ *(.gcc_exc)}
${RELOCATING+PROVIDE (etext = .);}
diff --git a/ld/scripttempl/ppcpe.sc b/ld/scripttempl/ppcpe.sc
index bb2a093047e..38920a17b6f 100644
--- a/ld/scripttempl/ppcpe.sc
+++ b/ld/scripttempl/ppcpe.sc
@@ -8,11 +8,6 @@
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
#
-# These are substituted in as variables in order to get '}' in a shell
-# conditional expansion.
-
-INIT='.init : { *(.init) }'
-FINI='.fini : { *(.fini) }'
cat <<EOF
/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
@@ -44,7 +39,7 @@ SECTIONS
/* text - the usual meaning */
.text ${RELOCATING+ __image_base__ + __section_alignment__ } :
{
- ${RELOCATING+ *(.init);}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.init)))}
*(.text)
${RELOCATING+ *(.text.*)}
*(.gcc_except_table)
@@ -52,7 +47,7 @@ SECTIONS
LONG (-1); *(.ctors); *(.ctor); LONG (0); }
${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
LONG (-1); *(.dtors); *(.dtor); LONG (0); }
- ${RELOCATING+ *(.fini);}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.fini)))}
${RELOCATING+ etext = .};
}
diff --git a/ld/scripttempl/tic4xcoff.sc b/ld/scripttempl/tic4xcoff.sc
index f610f44fd5e..2607a68fd7e 100644
--- a/ld/scripttempl/tic4xcoff.sc
+++ b/ld/scripttempl/tic4xcoff.sc
@@ -109,7 +109,7 @@ SECTIONS
/* Program code. */
.text : {
${RELOCATING+ __text = .;}
- ${RELOCATING+ *(.init)}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.init)))}
*(.text)
${CONSTRUCTING+ ___CTOR_LIST__ = .;}
${CONSTRUCTING+ LONG(___CTOR_END__ - ___CTOR_LIST__ - 2)}
@@ -121,7 +121,7 @@ SECTIONS
${CONSTRUCTING+ *(.dtors)}
${CONSTRUCTING+ LONG(0)}
${CONSTRUCTING+ ___DTOR_END__ = .;}
- ${RELOCATING+ *(.fini)}
+ ${RELOCATING+ KEEP (*(SORT_NONE(.fini)))}
${RELOCATING+ __etext = .;}
} ${RELOCATING+ > ${TEXT_MEMORY}}
/* Global initialised variables. */
diff --git a/ld/scripttempl/tic80coff.sc b/ld/scripttempl/tic80coff.sc
index 9c0798ac5b0..692227a8b43 100644
--- a/ld/scripttempl/tic80coff.sc
+++ b/ld/scripttempl/tic80coff.sc
@@ -40,8 +40,8 @@ ${RELOCATING+ENTRY (${ENTRY})}
SECTIONS
{
.text ${RELOCATING+ $TEXT_START_ADDR} : {
- *(.init)
- *(.fini)
+ ${RELOCATING+KEEP (*(SORT_NONE(.init)))
+ KEEP (*(SORT_NONE(.fini)))}
*(.text)
}
.const ALIGN(4) : {
diff --git a/ld/scripttempl/v850.sc b/ld/scripttempl/v850.sc
index 2a87e6dedad..f961530d9c5 100644
--- a/ld/scripttempl/v850.sc
+++ b/ld/scripttempl/v850.sc
@@ -71,7 +71,7 @@ SECTIONS
.rela.bss : { *(.rela.bss) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
- .init : { KEEP (*(.init)) } =0
+ .init : { KEEP (*(SORT_NONE(.init))) } =0
.plt : { *(.plt) }
.text :
@@ -102,7 +102,7 @@ SECTIONS
*(.call_table_text)
}
- .fini : { KEEP (*(.fini)) } =0
+ .fini : { KEEP (*(SORT_NONE(.fini))) } =0
.rodata : { *(.rodata) ${RELOCATING+*(.rodata.*) *(.gnu.linkonce.r*)} }
.rodata1 : { *(.rodata1) }
diff --git a/ld/scripttempl/v850_rh850.sc b/ld/scripttempl/v850_rh850.sc
index 3d594d87b6e..fc1a383e195 100644
--- a/ld/scripttempl/v850_rh850.sc
+++ b/ld/scripttempl/v850_rh850.sc
@@ -75,7 +75,7 @@ SECTIONS
.rela.bss : { *(.rela.bss) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
- .init : { KEEP (*(.init)) } =0
+ .init : { KEEP (*(SORT_NONE(.init))) } =0
.plt : { *(.plt) }
.text :
@@ -106,7 +106,7 @@ SECTIONS
*(.call_table_text)
}
- .fini : { KEEP (*(.fini)) } =0
+ .fini : { KEEP (*(SORT_NONE(.fini))) } =0
.rodata :
{
*(.rodata)
diff --git a/ld/scripttempl/visium.sc b/ld/scripttempl/visium.sc
index 9e98429e0ab..dfbe2c1c4ad 100644
--- a/ld/scripttempl/visium.sc
+++ b/ld/scripttempl/visium.sc
@@ -60,8 +60,8 @@ cat <<EOF
SECTIONS
{
.init ${RELOCATING-0} : {
- KEEP (*(.init))
- ${RELOCATING+KEEP (*(.fini))}
+ KEEP (*(SORT_NONE(.init)))
+ ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
${RELOCATING+ _einit = .;}
} ${RELOCATING+ > init}
diff --git a/ld/scripttempl/xstormy16.sc b/ld/scripttempl/xstormy16.sc
index 820676720c4..757e0b8feab 100644
--- a/ld/scripttempl/xstormy16.sc
+++ b/ld/scripttempl/xstormy16.sc
@@ -189,13 +189,13 @@ SECTIONS
.init ${RELOCATING-0} :
{
${RELOCATING+${INIT_START}}
- KEEP (*(.init))
+ KEEP (*(SORT_NONE(.init)))
${RELOCATING+${INIT_END}}
}${RELOCATING+ > ROM =${NOP-0}}
.fini ${RELOCATING-0} :
{
${RELOCATING+${FINI_START}}
- KEEP (*(.fini))
+ KEEP (*(SORT_NONE(.fini)))
${RELOCATING+${FINI_END}}
}${RELOCATING+ > ROM =${NOP-0}}
${RELOCATING+PROVIDE (__etext = .);}