Introduce new .text.sorted.* sections.
gold/ChangeLog: 2019-11-26 Martin Liska <mliska@suse.cz> * layout.cc (Layout::special_ordering_of_input_section): Add ".text.sorted". * output.cc: Special case ".text.sorted". * testsuite/section_sorting_name.cc: Cover also .text.sorted subsections. * testsuite/section_sorting_name.sh: Likewise. ld/ChangeLog: 2019-11-26 Martin Liska <mliska@suse.cz> * scripttempl/arclinux.sc: Add .text.sorted.* which is sorted by default. * scripttempl/elf.sc: Likewise. * scripttempl/elf64bpf.sc: Likewise. * scripttempl/nds32elf.sc: Likewise. * testsuite/ld-arm/arm-no-rel-plt.ld: Expect .text.sorted.* in the default linker script. * testsuite/ld-arm/fdpic-main.ld: Likewise. * testsuite/ld-arm/fdpic-shared.ld: Likewise.
This commit is contained in:
parent
239b426b11
commit
5fa5f8f5fe
@ -1,3 +1,12 @@
|
||||
2019-11-26 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* layout.cc (Layout::special_ordering_of_input_section):
|
||||
Add ".text.sorted".
|
||||
* output.cc: Special case ".text.sorted".
|
||||
* testsuite/section_sorting_name.cc: Cover also .text.sorted
|
||||
subsections.
|
||||
* testsuite/section_sorting_name.sh: Likewise.
|
||||
|
||||
2019-11-19 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 24853
|
||||
|
@ -1129,7 +1129,8 @@ Layout::special_ordering_of_input_section(const char* name)
|
||||
".text.unlikely",
|
||||
".text.exit",
|
||||
".text.startup",
|
||||
".text.hot"
|
||||
".text.hot",
|
||||
".text.sorted"
|
||||
};
|
||||
|
||||
for (size_t i = 0;
|
||||
|
@ -3547,8 +3547,10 @@ Output_section::Input_section_sort_section_prefix_special_ordering_compare
|
||||
const Output_section::Input_section_sort_entry& s2) const
|
||||
{
|
||||
// Some input section names have special ordering requirements.
|
||||
int o1 = Layout::special_ordering_of_input_section(s1.section_name().c_str());
|
||||
int o2 = Layout::special_ordering_of_input_section(s2.section_name().c_str());
|
||||
const char *s1_section_name = s1.section_name().c_str();
|
||||
const char *s2_section_name = s2.section_name().c_str();
|
||||
int o1 = Layout::special_ordering_of_input_section(s1_section_name);
|
||||
int o2 = Layout::special_ordering_of_input_section(s2_section_name);
|
||||
if (o1 != o2)
|
||||
{
|
||||
if (o1 < 0)
|
||||
@ -3558,6 +3560,8 @@ Output_section::Input_section_sort_section_prefix_special_ordering_compare
|
||||
else
|
||||
return o1 < o2;
|
||||
}
|
||||
else if (is_prefix_of(".text.sorted", s1_section_name))
|
||||
return strcmp(s1_section_name, s2_section_name) <= 0;
|
||||
|
||||
// Keep input order otherwise.
|
||||
return s1.index() < s2.index();
|
||||
|
@ -50,6 +50,49 @@ int hot_foo_0002()
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
__attribute__ ((section(".text.sorted.0002")))
|
||||
int sorted_foo_0002()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
__attribute__ ((section(".text.sorted.0001.abc")))
|
||||
int sorted_foo_0001_abc()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
extern "C"
|
||||
__attribute__ ((section(".text.sorted.0001")))
|
||||
int sorted_foo_0001()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
__attribute__ ((section(".text.sorted.0003")))
|
||||
int sorted_foo_0003()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
__attribute__ ((section(".text.sorted.z")))
|
||||
int sorted_foo_z()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
__attribute__ ((section(".text.sorted.y")))
|
||||
int sorted_foo_y()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int vdata_0002 __attribute__((section(".data.0002"))) = 2;
|
||||
int vbss_0002 __attribute__((section(".bss.0002"))) = 0;
|
||||
|
||||
|
@ -59,6 +59,12 @@ END {
|
||||
check section_sorting_name.stdout "hot_foo_0001" "hot_foo_0002"
|
||||
check section_sorting_name.stdout "hot_foo_0002" "hot_foo_0003"
|
||||
|
||||
check section_sorting_name.stdout "sorted_foo_0001" "sorted_foo_0001_abc"
|
||||
check section_sorting_name.stdout "sorted_foo_0001_abc" "sorted_foo_0002"
|
||||
check section_sorting_name.stdout "sorted_foo_0002" "sorted_foo_0003"
|
||||
check section_sorting_name.stdout "sorted_foo_0003" "sorted_foo_y"
|
||||
check section_sorting_name.stdout "sorted_foo_y" "sorted_foo_z"
|
||||
|
||||
check section_sorting_name.stdout "vdata_0001" "vdata_0002"
|
||||
check section_sorting_name.stdout "vdata_0002" "vdata_0003"
|
||||
|
||||
|
12
ld/ChangeLog
12
ld/ChangeLog
@ -1,3 +1,15 @@
|
||||
2019-11-26 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* scripttempl/arclinux.sc: Add .text.sorted.* which is sorted
|
||||
by default.
|
||||
* scripttempl/elf.sc: Likewise.
|
||||
* scripttempl/elf64bpf.sc: Likewise.
|
||||
* scripttempl/nds32elf.sc: Likewise.
|
||||
* testsuite/ld-arm/arm-no-rel-plt.ld: Expect .text.sorted.*
|
||||
in the default linker script.
|
||||
* testsuite/ld-arm/fdpic-main.ld: Likewise.
|
||||
* testsuite/ld-arm/fdpic-shared.ld: Likewise.
|
||||
|
||||
2019-11-25 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* ldexp.c (fold_name): Pass section to bfd_octets_per_byte.
|
||||
|
@ -491,6 +491,7 @@ cat <<EOF
|
||||
${RELOCATING+*(.text.exit .text.exit.*)}
|
||||
${RELOCATING+*(.text.startup .text.startup.*)}
|
||||
${RELOCATING+*(.text.hot .text.hot.*)}
|
||||
${RELOCATING+*(SORT(.text.sorted.*))}
|
||||
*(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
|
||||
/* .gnu.warning sections are handled specially by elf.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -514,6 +514,7 @@ cat <<EOF
|
||||
${RELOCATING+*(.text.exit .text.exit.*)}
|
||||
${RELOCATING+*(.text.startup .text.startup.*)}
|
||||
${RELOCATING+*(.text.hot .text.hot.*)}
|
||||
${RELOCATING+*(SORT(.text.sorted.*))}
|
||||
*(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
|
||||
/* .gnu.warning sections are handled specially by elf.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -512,6 +512,7 @@ cat <<EOF
|
||||
${RELOCATING+*(.text.exit .text.exit.*)}
|
||||
${RELOCATING+*(.text.startup .text.startup.*)}
|
||||
${RELOCATING+*(.text.hot .text.hot.*)}
|
||||
${RELOCATING+*(SORT(.text.sorted.*))}
|
||||
*(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
|
||||
/* .gnu.warning sections are handled specially by elf.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -438,6 +438,7 @@ cat <<EOF
|
||||
${RELOCATING+*(.text.exit .text.exit.*)}
|
||||
${RELOCATING+*(.text.startup .text.startup.*)}
|
||||
${RELOCATING+*(.text.hot .text.hot.*)}
|
||||
${RELOCATING+*(SORT(.text.sorted.*))}
|
||||
*(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
|
||||
/* .gnu.warning sections are handled specially by elf.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -65,6 +65,7 @@ SECTIONS
|
||||
*(.text.exit .text.exit.*)
|
||||
*(.text.startup .text.startup.*)
|
||||
*(.text.hot .text.hot.*)
|
||||
*(SORT(.text.sorted.*))
|
||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||
/* .gnu.warning sections are handled specially by elf.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -76,6 +76,7 @@ SECTIONS
|
||||
*(.text.exit .text.exit.*)
|
||||
*(.text.startup .text.startup.*)
|
||||
*(.text.hot .text.hot.*)
|
||||
*(SORT(.text.sorted.*))
|
||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||
/* .gnu.warning sections are handled specially by elf.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -67,6 +67,7 @@ SECTIONS
|
||||
*(.text.exit .text.exit.*)
|
||||
*(.text.startup .text.startup.*)
|
||||
*(.text.hot .text.hot.*)
|
||||
*(SORT(.text.sorted.*))
|
||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||
/* .gnu.warning sections are handled specially by elf.em. */
|
||||
*(.gnu.warning)
|
||||
|
Loading…
Reference in New Issue
Block a user