2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
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.
This commit is contained in:
parent
6798554723
commit
e6f2cbf536
3 changed files with 29 additions and 13 deletions
12
ld/ChangeLog
12
ld/ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
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 <hongjiu.lu@intel.com>
|
2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR ld/3009
|
PR ld/3009
|
||||||
|
|
20
ld/ldlang.c
20
ld/ldlang.c
|
@ -45,15 +45,6 @@
|
||||||
#define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
|
#define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
|
||||||
#endif
|
#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. */
|
/* Locals variables. */
|
||||||
static struct obstack stat_obstack;
|
static struct obstack stat_obstack;
|
||||||
static struct obstack map_obstack;
|
static struct obstack map_obstack;
|
||||||
|
@ -377,7 +368,7 @@ wild_sort_fast (lang_wild_statement_type *wild,
|
||||||
{
|
{
|
||||||
lang_section_bst_type **tree;
|
lang_section_bst_type **tree;
|
||||||
|
|
||||||
tree = (lang_section_bst_type **) &wild->handler_data[1];
|
tree = &wild->tree;
|
||||||
if (!wild->filenames_sorted
|
if (!wild->filenames_sorted
|
||||||
&& (sec == NULL || sec->spec.sorted == none))
|
&& (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[1] = NULL;
|
||||||
ptr->handler_data[2] = NULL;
|
ptr->handler_data[2] = NULL;
|
||||||
ptr->handler_data[3] = NULL;
|
ptr->handler_data[3] = NULL;
|
||||||
|
ptr->tree = NULL;
|
||||||
|
|
||||||
/* Count how many wildcard_specs there are, and how many of those
|
/* 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
|
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);
|
walk_wild (s, output_section_callback_fast, output);
|
||||||
|
|
||||||
tree = (lang_section_bst_type *) s->handler_data[1];
|
tree = s->tree;
|
||||||
if (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
|
else
|
||||||
walk_wild (s, output_section_callback, output);
|
walk_wild (s, output_section_callback, output);
|
||||||
|
|
10
ld/ldlang.h
10
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 *,
|
typedef bfd_boolean (*lang_match_sec_type_func) (bfd *, const asection *,
|
||||||
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
|
struct lang_wild_statement_struct
|
||||||
{
|
{
|
||||||
lang_statement_header_type header;
|
lang_statement_header_type header;
|
||||||
|
@ -316,6 +325,7 @@ struct lang_wild_statement_struct
|
||||||
|
|
||||||
walk_wild_section_handler_t walk_wild_section_handler;
|
walk_wild_section_handler_t walk_wild_section_handler;
|
||||||
struct wildcard_list *handler_data[4];
|
struct wildcard_list *handler_data[4];
|
||||||
|
lang_section_bst_type *tree;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct lang_address_statement_struct
|
typedef struct lang_address_statement_struct
|
||||||
|
|
Loading…
Reference in a new issue