diff --git a/ld/ChangeLog b/ld/ChangeLog index 39d7d1fcbc..4435a256b4 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,15 @@ +2006-08-08 H.J. Lu + + PR ld/3006 + * ldlang.c (lang_section_bst_type): Moved to ... + * ldlang.h: Here. + + * ldlang.h (lang_wild_statement_struct): Add a tree field. + + * ldlang.c (wild_sort_fast): Use the tree field for BST. + (wild): Likeise. + (analyze_walk_wild_section_handler): Initialize the tree field. + 2006-08-08 H.J. Lu PR ld/3009 diff --git a/ld/ldlang.c b/ld/ldlang.c index 51dfe3670f..0ee1156970 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -45,15 +45,6 @@ #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER)) #endif -/* Binary search tree structure to - efficiently sort sections by name. */ -typedef struct lang_section_bst -{ - asection *section; - struct lang_section_bst *left; - struct lang_section_bst *right; -} lang_section_bst_type; - /* Locals variables. */ static struct obstack stat_obstack; static struct obstack map_obstack; @@ -377,7 +368,7 @@ wild_sort_fast (lang_wild_statement_type *wild, { lang_section_bst_type **tree; - tree = (lang_section_bst_type **) &wild->handler_data[1]; + tree = &wild->tree; if (!wild->filenames_sorted && (sec == NULL || sec->spec.sorted == none)) { @@ -674,6 +665,7 @@ analyze_walk_wild_section_handler (lang_wild_statement_type *ptr) ptr->handler_data[1] = NULL; ptr->handler_data[2] = NULL; ptr->handler_data[3] = NULL; + ptr->tree = NULL; /* Count how many wildcard_specs there are, and how many of those actually use wildcards in the name. Also, bail out if any of the @@ -2552,10 +2544,12 @@ wild (lang_wild_statement_type *s, walk_wild (s, output_section_callback_fast, output); - tree = (lang_section_bst_type *) s->handler_data[1]; + tree = s->tree; if (tree) - output_section_callback_tree_to_list (s, tree, output); - s->handler_data[1] = NULL; + { + output_section_callback_tree_to_list (s, tree, output); + s->tree = NULL; + } } else walk_wild (s, output_section_callback, output); diff --git a/ld/ldlang.h b/ld/ldlang.h index 91a4344fb8..c23c3e5ed5 100644 --- a/ld/ldlang.h +++ b/ld/ldlang.h @@ -305,6 +305,15 @@ typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *, typedef bfd_boolean (*lang_match_sec_type_func) (bfd *, const asection *, bfd *, const asection *); +/* Binary search tree structure to efficiently sort sections by + name. */ +typedef struct lang_section_bst +{ + asection *section; + struct lang_section_bst *left; + struct lang_section_bst *right; +} lang_section_bst_type; + struct lang_wild_statement_struct { lang_statement_header_type header; @@ -316,6 +325,7 @@ struct lang_wild_statement_struct walk_wild_section_handler_t walk_wild_section_handler; struct wildcard_list *handler_data[4]; + lang_section_bst_type *tree; }; typedef struct lang_address_statement_struct