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:
Martin Liska 2019-09-18 13:23:34 +02:00
parent 239b426b11
commit 5fa5f8f5fe
No known key found for this signature in database
GPG Key ID: 4DC182DC0FA73785
13 changed files with 85 additions and 3 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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