ld: Support input section description keyword: REVERSE

PR 27565
  * ldlex.l: Add REVERSE.
  * ldgram.y: Allow REVERSE to be used wherever a sorting command can be used.
  * ld.h (struct wildcard_spec): Add 'reversed' field.
  * ldlang.h (lang_wild_statement_struct): Add 'filenames_reversed' field.
  * ldlang.c (compare_sections): Add reversed parameter. (wild_sort): Reverse the comparison if requested. (print_wild_statement): Handle the reversed field.
  * ld.texi: Document the new feature.
  * NEWS: Mention the new feature.
  * testsuite/ld-scripts/sort-file-reversed-1.d: New test driver.
  * testsuite/ld-scripts/sort-file-reversed-1.t: New test source.
  * testsuite/ld-scripts/sort-file-reversed-2.t: New test source.
  * testsuite/ld-scripts/sort-file-reversed-2.d: New test driver.
  * testsuite/ld-scripts/sort-sections-reversed-1.d: New test driver.
  * testsuite/ld-scripts/sort-sections-reversed-1.t: New test source.
  * testsuite/ld-scripts/sort-sections-reversed-2.t: New test source.
  * testsuite/ld-scripts/sort-sections-reversed-2.d: New test driver.
  * testsuite/ld-scripts/sort-sections-reversed-3.d: New test driver.
  * testsuite/ld-scripts/sort-sections-reversed-3.t: New test source.
This commit is contained in:
Nick Clifton
2023-11-01 13:51:17 +00:00
parent f514e6e480
commit 85921e9a25
18 changed files with 274 additions and 39 deletions

View File

@@ -390,18 +390,19 @@ typedef struct lang_section_bst
struct lang_wild_statement_struct
{
lang_statement_header_type header;
const char *filename;
bool filenames_sorted;
bool any_specs_sorted;
struct wildcard_list *section_list;
bool keep_sections;
lang_statement_list_type children;
struct name_list *exclude_name_list;
lang_statement_list_type matching_sections;
lang_section_bst_type *tree, **rightmost;
struct flag_info *section_flag_list;
lang_statement_header_type header;
lang_statement_list_type children;
lang_statement_list_type matching_sections;
lang_section_bst_type * tree;
lang_section_bst_type ** rightmost;
struct wildcard_list * section_list;
struct name_list * exclude_name_list;
struct flag_info * section_flag_list;
const char * filename;
bool filenames_sorted;
bool filenames_reversed;
bool any_specs_sorted;
bool keep_sections;
};
typedef struct lang_address_statement_struct