From 5fa5f8f5fe494ba4fe98c11899a5464cd164ec75 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 18 Sep 2019 13:23:34 +0200 Subject: Introduce new .text.sorted.* sections. gold/ChangeLog: 2019-11-26 Martin Liska * 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 * 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. --- gold/output.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'gold/output.cc') diff --git a/gold/output.cc b/gold/output.cc index df80587..428a880 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -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(); -- cgit v1.1