diff options
author | Alan Modra <amodra@gmail.com> | 2003-06-27 00:38:25 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2003-06-27 00:38:25 +0000 |
commit | 0c7a8e5acd399d1d36dbe0cda815844dd5308c10 (patch) | |
tree | 1b0c74e9719dfd6d6b6b1b396373870147643680 /ld/emultempl/xtensaelf.em | |
parent | a9232bb2657c979e51dd77e8d823cd90c749e784 (diff) | |
download | gdb-0c7a8e5acd399d1d36dbe0cda815844dd5308c10.zip gdb-0c7a8e5acd399d1d36dbe0cda815844dd5308c10.tar.gz gdb-0c7a8e5acd399d1d36dbe0cda815844dd5308c10.tar.bz2 |
* emultempl/aix.em: Convert to C90, remove unnecessary prototypes
and casts. Replace PTR with void *. Formatting.
* emultempl/alphaelf.em: Likewise
* emultempl/armcoff.em: Likewise
* emultempl/armelf.em: Likewise
* emultempl/armelf_oabi.em: Likewise
* emultempl/beos.em: Likewise
* emultempl/elf32.em: Likewise
* emultempl/generic.em: Likewise
* emultempl/gld960.em: Likewise
* emultempl/gld960c.em: Likewise
* emultempl/hppaelf.em: Likewise
* emultempl/linux.em: Likewise
* emultempl/lnk960.em: Likewise
* emultempl/m68hc1xelf.em: Likewise
* emultempl/m68kcoff.em: Likewise
* emultempl/m68kelf.em: Likewise
* emultempl/mipsecoff.em: Likewise
* emultempl/mipself.em: Likewise
* emultempl/mmix-elfnmmo.em: Likewise
* emultempl/mmixelf.em: Likewise
* emultempl/mmo.em: Likewise
* emultempl/needrelax.em: Likewise
* emultempl/netbsd.em: Likewise
* emultempl/pe.em: Likewise
* emultempl/sh64elf.em: Likewise
* emultempl/sunos.em: Likewise
* emultempl/ticoff.em: Likewise
* emultempl/vanilla.em: Likewise
* emultempl/xtensaelf.em: Likewise
* Makefile.am: Correct dependencies.
* Makefile.in: Regenerate.
Diffstat (limited to 'ld/emultempl/xtensaelf.em')
-rw-r--r-- | ld/emultempl/xtensaelf.em | 599 |
1 files changed, 243 insertions, 356 deletions
diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em index bc91365..8762920 100644 --- a/ld/emultempl/xtensaelf.em +++ b/ld/emultempl/xtensaelf.em @@ -26,22 +26,8 @@ cat >>e${EMULATION_NAME}.c <<EOF #include <xtensa-config.h> -static char *elf_xtensa_choose_target - PARAMS ((int, char **)); -static bfd_boolean elf_xtensa_place_orphan - PARAMS ((lang_input_statement_type *, asection *)); -static void elf_xtensa_before_parse - PARAMS ((void)); -static void elf_xtensa_before_allocation - PARAMS ((void)); -static void xtensa_wild_group_interleave - PARAMS ((lang_statement_union_type *)); -static void xtensa_wild_group_interleave_callback - PARAMS ((lang_statement_union_type *)); -static void xtensa_colocate_output_literals - PARAMS ((lang_statement_union_type *)); -static void xtensa_colocate_output_literals_callback - PARAMS ((lang_statement_union_type *)); +static void xtensa_wild_group_interleave (lang_statement_union_type *); +static void xtensa_colocate_output_literals (lang_statement_union_type *); /* Flag for the emulation-specific "--no-relax" option. */ @@ -58,9 +44,8 @@ static bfd_boolean xtensa_use_literal_pages = FALSE; static char * -elf_xtensa_choose_target (argc, argv) - int argc ATTRIBUTE_UNUSED; - char **argv ATTRIBUTE_UNUSED; +elf_xtensa_choose_target (int argc ATTRIBUTE_UNUSED, + char **argv ATTRIBUTE_UNUSED) { if (XCHAL_HAVE_BE) return "${BIG_OUTPUT_FORMAT}"; @@ -70,9 +55,7 @@ elf_xtensa_choose_target (argc, argv) static bfd_boolean -elf_xtensa_place_orphan (file, s) - lang_input_statement_type *file; - asection *s; +elf_xtensa_place_orphan (lang_input_statement_type *file, asection *s) { /* Early exit for relocatable links. */ if (link_info.relocatable) @@ -83,7 +66,7 @@ elf_xtensa_place_orphan (file, s) static void -elf_xtensa_before_parse () +elf_xtensa_before_parse (void) { /* Just call the default hook.... Tensilica's version of this function does some other work that isn't relevant here. */ @@ -94,8 +77,8 @@ elf_xtensa_before_parse () /* This is called after the sections have been attached to output sections, but before any sizes or addresses have been set. */ -void -elf_xtensa_before_allocation () +static void +elf_xtensa_before_allocation (void) { bfd *in_bfd; bfd_boolean is_big_endian = XCHAL_HAVE_BE; @@ -143,7 +126,7 @@ elf_xtensa_before_allocation () gld${EMULATION_NAME}_before_allocation (); xtensa_wild_group_interleave (stat_ptr->head); - if (command_line.relax) + if (command_line.relax) xtensa_colocate_output_literals (stat_ptr->head); /* TBD: We need to force the page alignments to here and only do @@ -184,64 +167,29 @@ struct reloc_deps_graph_t }; static void xtensa_layout_wild - PARAMS ((const reloc_deps_graph *, lang_wild_statement_type *)); + (const reloc_deps_graph *, lang_wild_statement_type *); -typedef void (*deps_callback_t) - PARAMS ((asection *, /* src_sec */ - bfd_vma, /* src_offset */ - asection *, /* target_sec */ - bfd_vma, /* target_offset */ - PTR)); /* closure */ +typedef void (*deps_callback_t) (asection *, /* src_sec */ + bfd_vma, /* src_offset */ + asection *, /* target_sec */ + bfd_vma, /* target_offset */ + void *); /* closure */ -static void build_deps_graph_callback - PARAMS ((asection *, bfd_vma, asection *, bfd_vma, PTR)); extern bfd_boolean xtensa_callback_required_dependence - PARAMS ((bfd *, asection *, struct bfd_link_info *, - deps_callback_t, PTR)); + (bfd *, asection *, struct bfd_link_info *, deps_callback_t, void *); static void xtensa_ldlang_clear_addresses - PARAMS ((lang_statement_union_type *)); + (lang_statement_union_type *); static bfd_boolean ld_local_file_relocations_fit - PARAMS ((lang_statement_union_type *, const reloc_deps_graph *)); + (lang_statement_union_type *, const reloc_deps_graph *); static bfd_vma ld_assign_relative_paged_dot - PARAMS ((bfd_vma, lang_statement_union_type *, - const reloc_deps_graph *, bfd_boolean)); + (bfd_vma, lang_statement_union_type *, const reloc_deps_graph *, + bfd_boolean); static bfd_vma ld_xtensa_insert_page_offsets - PARAMS ((bfd_vma, lang_statement_union_type *, reloc_deps_graph *, - bfd_boolean)); -static void lang_for_each_statement_worker - PARAMS ((void (*) (lang_statement_union_type *), - lang_statement_union_type *)); -static void xtensa_move_dependencies_to_front - PARAMS ((reloc_deps_graph *, lang_wild_statement_type *)); -static reloc_deps_graph *ld_build_required_section_dependence - PARAMS ((lang_statement_union_type *)); -static bfd_boolean section_is_source - PARAMS ((const reloc_deps_graph *, lang_statement_union_type *)); -static bfd_boolean section_is_target - PARAMS ((const reloc_deps_graph *, lang_statement_union_type *)); -static bfd_boolean section_is_source_or_target - PARAMS ((const reloc_deps_graph *, lang_statement_union_type *)); -static bfd_boolean deps_has_sec_edge - PARAMS ((const reloc_deps_graph *, asection *, asection *)); -static bfd_boolean deps_has_edge - PARAMS ((const reloc_deps_graph *, lang_statement_union_type *, - lang_statement_union_type *)); -static void add_deps_edge - PARAMS ((reloc_deps_graph *, asection *, asection *)); + (bfd_vma, lang_statement_union_type *, reloc_deps_graph *, bfd_boolean); #if EXTRA_VALIDATION static size_t ld_count_children - PARAMS ((lang_statement_union_type *)); + (lang_statement_union_type *); #endif -static void free_reloc_deps_graph - PARAMS ((reloc_deps_graph *)); -static void xtensa_colocate_literals - PARAMS ((reloc_deps_graph *, lang_statement_union_type *)); -static reloc_deps_section *xtensa_get_section_deps - PARAMS ((const reloc_deps_graph *, asection *)); -static void xtensa_set_section_deps - PARAMS ((const reloc_deps_graph *, asection *, reloc_deps_section *)); -static void xtensa_append_section_deps - PARAMS ((reloc_deps_graph *, asection *)); extern lang_statement_list_type constructor_list; @@ -250,99 +198,94 @@ extern lang_statement_list_type constructor_list; there statically. */ static void -lang_for_each_statement_worker (func, s) - void (*func) PARAMS ((lang_statement_union_type *)); - lang_statement_union_type *s; +lang_for_each_statement_worker (void (*func) (lang_statement_union_type *), + lang_statement_union_type *s) { for (; s != (lang_statement_union_type *) NULL; s = s->header.next) { func (s); switch (s->header.type) - { - case lang_constructors_statement_enum: - lang_for_each_statement_worker (func, constructor_list.head); - break; - case lang_output_section_statement_enum: - lang_for_each_statement_worker - (func, - s->output_section_statement.children.head); - break; - case lang_wild_statement_enum: - lang_for_each_statement_worker - (func, - s->wild_statement.children.head); - break; - case lang_group_statement_enum: - lang_for_each_statement_worker (func, - s->group_statement.children.head); - break; - case lang_data_statement_enum: - case lang_reloc_statement_enum: - case lang_object_symbols_statement_enum: - case lang_output_statement_enum: - case lang_target_statement_enum: - case lang_input_section_enum: - case lang_input_statement_enum: - case lang_assignment_statement_enum: - case lang_padding_statement_enum: - case lang_address_statement_enum: - case lang_fill_statement_enum: - break; - default: - FAIL (); - break; - } + { + case lang_constructors_statement_enum: + lang_for_each_statement_worker (func, constructor_list.head); + break; + case lang_output_section_statement_enum: + lang_for_each_statement_worker + (func, + s->output_section_statement.children.head); + break; + case lang_wild_statement_enum: + lang_for_each_statement_worker + (func, + s->wild_statement.children.head); + break; + case lang_group_statement_enum: + lang_for_each_statement_worker (func, + s->group_statement.children.head); + break; + case lang_data_statement_enum: + case lang_reloc_statement_enum: + case lang_object_symbols_statement_enum: + case lang_output_statement_enum: + case lang_target_statement_enum: + case lang_input_section_enum: + case lang_input_statement_enum: + case lang_assignment_statement_enum: + case lang_padding_statement_enum: + case lang_address_statement_enum: + case lang_fill_statement_enum: + break; + default: + FAIL (); + break; + } } } /* End of verbatim code from ldlang.c. */ -reloc_deps_section * -xtensa_get_section_deps (deps, sec) - const reloc_deps_graph *deps ATTRIBUTE_UNUSED; - asection *sec; +static reloc_deps_section * +xtensa_get_section_deps (const reloc_deps_graph *deps ATTRIBUTE_UNUSED, + asection *sec) { /* We have a separate function for this so that we could in the future keep a completely independent structure that maps a section to its dependence edges. For now, we place these in the sec->userdata field. */ - reloc_deps_section *sec_deps = (reloc_deps_section *) sec->userdata; + reloc_deps_section *sec_deps = sec->userdata; return sec_deps; } -void -xtensa_set_section_deps (deps, sec, deps_section) - const reloc_deps_graph *deps ATTRIBUTE_UNUSED; - asection *sec; - reloc_deps_section *deps_section; +static void +xtensa_set_section_deps (const reloc_deps_graph *deps ATTRIBUTE_UNUSED, + asection *sec, + reloc_deps_section *deps_section) { - sec->userdata = (void *) deps_section; + sec->userdata = deps_section; } /* This is used to keep a list of all of the sections participating in the graph so we can clean them up quickly. */ -static void -xtensa_append_section_deps (deps, sec) - reloc_deps_graph *deps; - asection *sec; +static void +xtensa_append_section_deps (reloc_deps_graph *deps, asection *sec) { if (deps->size <= deps->count) { asection **new_sections; size_t i; size_t new_size; - + new_size = deps->size * 2; if (new_size == 0) new_size = 20; - - new_sections = (asection**) xmalloc (sizeof (asection*) * new_size); - memset (new_sections, 0, sizeof (asection*) * new_size); - for (i = 0; i < deps->count; i++) + + new_sections = xmalloc (sizeof (asection *) * new_size); + memset (new_sections, 0, sizeof (asection *) * new_size); + for (i = 0; i < deps->count; i++) { new_sections[i] = deps->sections[i]; } @@ -356,9 +299,8 @@ xtensa_append_section_deps (deps, sec) } -static void -free_reloc_deps_graph (deps) - reloc_deps_graph *deps; +static void +free_reloc_deps_graph (reloc_deps_graph *deps) { size_t i; for (i = 0; i < deps->count; i++) @@ -366,7 +308,7 @@ free_reloc_deps_graph (deps) asection *sec = deps->sections[i]; reloc_deps_section *sec_deps; sec_deps = xtensa_get_section_deps (deps, sec); - if (sec_deps) + if (sec_deps) { reloc_deps_e *next; while (sec_deps->succs != NULL) @@ -375,7 +317,7 @@ free_reloc_deps_graph (deps) free (sec_deps->succs); sec_deps->succs = next; } - + while (sec_deps->preds != NULL) { next = sec_deps->preds->next; @@ -393,10 +335,9 @@ free_reloc_deps_graph (deps) } -bfd_boolean -section_is_source (deps, s) - const reloc_deps_graph *deps ATTRIBUTE_UNUSED; - lang_statement_union_type *s; +static bfd_boolean +section_is_source (const reloc_deps_graph *deps ATTRIBUTE_UNUSED, + lang_statement_union_type *s) { asection *sec; const reloc_deps_section *sec_deps; @@ -406,14 +347,13 @@ section_is_source (deps, s) sec = s->input_section.section; sec_deps = xtensa_get_section_deps (deps, sec); - return (sec_deps && sec_deps->succs != NULL); + return sec_deps && sec_deps->succs != NULL; } -bfd_boolean -section_is_target (deps, s) - const reloc_deps_graph *deps ATTRIBUTE_UNUSED; - lang_statement_union_type *s; +static bfd_boolean +section_is_target (const reloc_deps_graph *deps ATTRIBUTE_UNUSED, + lang_statement_union_type *s) { asection *sec; const reloc_deps_section *sec_deps; @@ -423,13 +363,12 @@ section_is_target (deps, s) sec = s->input_section.section; sec_deps = xtensa_get_section_deps (deps, sec); - return (sec_deps && sec_deps->preds != NULL); + return sec_deps && sec_deps->preds != NULL; } -bfd_boolean -section_is_source_or_target (deps, s) - const reloc_deps_graph *deps ATTRIBUTE_UNUSED; - lang_statement_union_type *s; +static bfd_boolean +section_is_source_or_target (const reloc_deps_graph *deps ATTRIBUTE_UNUSED, + lang_statement_union_type *s) { return (section_is_source (deps, s) || section_is_target (deps, s)); @@ -449,19 +388,14 @@ struct xtensa_ld_iter_t struct xtensa_ld_iter_stack_t { xtensa_ld_iter iterloc; /* List that hold it. */ - + xtensa_ld_iter_stack *next; /* Next in the stack. */ xtensa_ld_iter_stack *prev; /* Back pointer for stack. */ }; -static void ld_xtensa_move_section_after - PARAMS ((xtensa_ld_iter *, xtensa_ld_iter *)); - -void -ld_xtensa_move_section_after (to, current) - xtensa_ld_iter *to; - xtensa_ld_iter *current; +static void +ld_xtensa_move_section_after (xtensa_ld_iter *to, xtensa_ld_iter *current) { lang_statement_union_type *to_next; lang_statement_union_type *current_next; @@ -474,7 +408,7 @@ ld_xtensa_move_section_after (to, current) if (to == current) return; - + #if EXTRA_VALIDATION old_to_count = ld_count_children (to->parent); old_current_count = ld_count_children (current->parent); @@ -482,9 +416,9 @@ ld_xtensa_move_section_after (to, current) to_next = *(to->loc); current_next = (*current->loc)->header.next; - + *(to->loc) = *(current->loc); - + *(current->loc) = current_next; (*(to->loc))->header.next = to_next; @@ -502,7 +436,7 @@ ld_xtensa_move_section_after (to, current) new_to_count = ld_count_children (to->parent); new_current_count = ld_count_children (current->parent); - ASSERT ((old_to_count + old_current_count) + ASSERT ((old_to_count + old_current_count) == (new_to_count + new_current_count)); #endif } @@ -511,41 +445,21 @@ ld_xtensa_move_section_after (to, current) /* Can only be called with lang_statements that have lists. Returns false if the list is empty. */ -static bfd_boolean iter_stack_empty - PARAMS ((xtensa_ld_iter_stack **)); -static bfd_boolean iter_stack_push - PARAMS ((xtensa_ld_iter_stack **, lang_statement_union_type *)); -static void iter_stack_pop - PARAMS ((xtensa_ld_iter_stack **)); -static void iter_stack_update - PARAMS ((xtensa_ld_iter_stack **)); -static void iter_stack_next - PARAMS ((xtensa_ld_iter_stack **)); -static lang_statement_union_type *iter_stack_current - PARAMS ((xtensa_ld_iter_stack **)); -static void iter_stack_create - PARAMS ((xtensa_ld_iter_stack **, lang_statement_union_type *)); -static void iter_stack_copy_current - PARAMS ((xtensa_ld_iter_stack **, xtensa_ld_iter *)); - - -static bfd_boolean -iter_stack_empty (stack_p) - xtensa_ld_iter_stack **stack_p; +static bfd_boolean +iter_stack_empty (xtensa_ld_iter_stack **stack_p) { - return (*stack_p == NULL); + return *stack_p == NULL; } static bfd_boolean -iter_stack_push (stack_p, parent) - xtensa_ld_iter_stack **stack_p; - lang_statement_union_type *parent; +iter_stack_push (xtensa_ld_iter_stack **stack_p, + lang_statement_union_type *parent) { xtensa_ld_iter_stack *stack; lang_statement_list_type *l = NULL; - switch (parent->header.type) + switch (parent->header.type) { case lang_output_section_statement_enum: l = &parent->output_section_statement.children; @@ -562,10 +476,10 @@ iter_stack_push (stack_p, parent) } /* Empty. do not push. */ - if (l->tail == &l->head) + if (l->tail == &l->head) return FALSE; - stack = (xtensa_ld_iter_stack *) xmalloc (sizeof (xtensa_ld_iter_stack)); + stack = xmalloc (sizeof (xtensa_ld_iter_stack)); memset (stack, 0, sizeof (xtensa_ld_iter_stack)); stack->iterloc.parent = parent; stack->iterloc.l = l; @@ -573,28 +487,27 @@ iter_stack_push (stack_p, parent) stack->next = *stack_p; stack->prev = NULL; - if (*stack_p != NULL) + if (*stack_p != NULL) (*stack_p)->prev = stack; *stack_p = stack; return TRUE; } -static void -iter_stack_pop (stack_p) - xtensa_ld_iter_stack **stack_p; +static void +iter_stack_pop (xtensa_ld_iter_stack **stack_p) { xtensa_ld_iter_stack *stack; stack = *stack_p; - if (stack == NULL) + if (stack == NULL) { ASSERT (stack != NULL); return; } - if (stack->next != NULL) + if (stack->next != NULL) stack->next->prev = NULL; *stack_p = stack->next; @@ -607,11 +520,10 @@ iter_stack_pop (stack_p) accordingly. */ static void -iter_stack_update (stack_p) - xtensa_ld_iter_stack **stack_p; +iter_stack_update (xtensa_ld_iter_stack **stack_p) { if (!iter_stack_empty (stack_p) - && (*(*stack_p)->iterloc.loc) == NULL) + && (*(*stack_p)->iterloc.loc) == NULL) { iter_stack_pop (stack_p); @@ -626,9 +538,8 @@ iter_stack_update (stack_p) } -static void -iter_stack_next (stack_p) - xtensa_ld_iter_stack **stack_p; +static void +iter_stack_next (xtensa_ld_iter_stack **stack_p) { xtensa_ld_iter_stack *stack; lang_statement_union_type *current; @@ -636,9 +547,9 @@ iter_stack_next (stack_p) current = *stack->iterloc.loc; /* If we are on the first element. */ - if (current != NULL) + if (current != NULL) { - switch (current->header.type) + switch (current->header.type) { case lang_output_section_statement_enum: case lang_wild_statement_enum: @@ -664,8 +575,7 @@ iter_stack_next (stack_p) static lang_statement_union_type * -iter_stack_current (stack_p) - xtensa_ld_iter_stack **stack_p; +iter_stack_current (xtensa_ld_iter_stack **stack_p) { return *((*stack_p)->iterloc.loc); } @@ -673,28 +583,25 @@ iter_stack_current (stack_p) /* The iter stack is a preorder. */ -static void -iter_stack_create (stack_p, parent) - xtensa_ld_iter_stack **stack_p; - lang_statement_union_type *parent; +static void +iter_stack_create (xtensa_ld_iter_stack **stack_p, + lang_statement_union_type *parent) { iter_stack_push (stack_p, parent); } -static void -iter_stack_copy_current (stack_p, front) - xtensa_ld_iter_stack **stack_p; - xtensa_ld_iter *front; +static void +iter_stack_copy_current (xtensa_ld_iter_stack **stack_p, + xtensa_ld_iter *front) { *front = (*stack_p)->iterloc; } -void -xtensa_colocate_literals (deps, statement) - reloc_deps_graph *deps; - lang_statement_union_type *statement; +static void +xtensa_colocate_literals (reloc_deps_graph *deps, + lang_statement_union_type *statement) { /* Keep a stack of pointers to control iteration through the contours. */ xtensa_ld_iter_stack *stack = NULL; @@ -719,15 +626,15 @@ xtensa_colocate_literals (deps, statement) lang_for_each_statement_worker (xtensa_ldlang_clear_addresses, statement); #endif - + iter_stack_create (stack_p, statement); - while (!iter_stack_empty (stack_p)) + while (!iter_stack_empty (stack_p)) { bfd_boolean skip_increment = FALSE; lang_statement_union_type *l = iter_stack_current (stack_p); - - switch (l->header.type) + + switch (l->header.type) { case lang_assignment_statement_enum: /* Any assignment statement should block reordering across it. */ @@ -740,12 +647,12 @@ xtensa_colocate_literals (deps, statement) { in_literals = (section_is_target (deps, l) && !section_is_source (deps, l)); - if (in_literals) + if (in_literals) { front_p = &front; iter_stack_copy_current (stack_p, front_p); } - } + } else { bfd_boolean is_target; @@ -762,15 +669,15 @@ xtensa_colocate_literals (deps, statement) } else { - if (is_target) + if (is_target) { /* Try to insert in place. */ ld_xtensa_move_section_after (front_p, current_p); - ld_assign_relative_paged_dot (0x100000, + ld_assign_relative_paged_dot (0x100000, statement, deps, xtensa_use_literal_pages); - + /* We use this code because it's already written. */ if (!ld_local_file_relocations_fit (statement, deps)) { @@ -779,7 +686,7 @@ xtensa_colocate_literals (deps, statement) /* Reset the literal placement. */ iter_stack_copy_current (stack_p, front_p); } - else + else { /* Move front pointer up by one. */ front_p->loc = &(*front_p->loc)->header.next; @@ -801,15 +708,14 @@ xtensa_colocate_literals (deps, statement) /* Be careful to update the stack_p if it now is a null. */ iter_stack_update (stack_p); } - + lang_for_each_statement_worker (xtensa_ldlang_clear_addresses, statement); } -void -xtensa_move_dependencies_to_front (deps, w) - reloc_deps_graph *deps; - lang_wild_statement_type *w; +static void +xtensa_move_dependencies_to_front (reloc_deps_graph *deps, + lang_wild_statement_type *w) { /* Keep a front pointer and a current pointer. */ lang_statement_union_type **front; @@ -825,7 +731,7 @@ xtensa_move_dependencies_to_front (deps, w) return; current = &(*front)->header.next; - while (*current != NULL) + while (*current != NULL) { if (section_is_source_or_target (deps, *current)) { @@ -853,10 +759,9 @@ xtensa_move_dependencies_to_front (deps, w) static bfd_boolean -deps_has_sec_edge (deps, src, tgt) - const reloc_deps_graph *deps; - asection *src; - asection *tgt; +deps_has_sec_edge (const reloc_deps_graph *deps, + asection *src, + asection *tgt) { const reloc_deps_section *sec_deps; const reloc_deps_e *sec_deps_e; @@ -864,13 +769,13 @@ deps_has_sec_edge (deps, src, tgt) sec_deps = xtensa_get_section_deps (deps, src); if (sec_deps == NULL) return FALSE; - + for (sec_deps_e = sec_deps->succs; - sec_deps_e != NULL; + sec_deps_e != NULL; sec_deps_e = sec_deps_e->next) { ASSERT (sec_deps_e->src == src); - if (sec_deps_e->tgt == tgt) + if (sec_deps_e->tgt == tgt) return TRUE; } return FALSE; @@ -878,10 +783,9 @@ deps_has_sec_edge (deps, src, tgt) static bfd_boolean -deps_has_edge (deps, src, tgt) - const reloc_deps_graph *deps; - lang_statement_union_type *src; - lang_statement_union_type *tgt; +deps_has_edge (const reloc_deps_graph *deps, + lang_statement_union_type *src, + lang_statement_union_type *tgt) { if (!section_is_source (deps, src)) return FALSE; @@ -892,17 +796,16 @@ deps_has_edge (deps, src, tgt) return FALSE; if (tgt->header.type != lang_input_section_enum) return FALSE; - + return deps_has_sec_edge (deps, src->input_section.section, tgt->input_section.section); } static void -add_deps_edge (deps, src_sec, tgt_sec) - reloc_deps_graph *deps; - asection *src_sec; - asection *tgt_sec; +add_deps_edge (reloc_deps_graph *deps, + asection *src_sec, + asection *tgt_sec) { reloc_deps_section *src_sec_deps; reloc_deps_section *tgt_sec_deps; @@ -912,13 +815,12 @@ add_deps_edge (deps, src_sec, tgt_sec) if (deps_has_sec_edge (deps, src_sec, tgt_sec)) return; - + src_sec_deps = xtensa_get_section_deps (deps, src_sec); if (src_sec_deps == NULL) { /* Add a section. */ - src_sec_deps = (reloc_deps_section *) - xmalloc (sizeof (reloc_deps_section)); + src_sec_deps = xmalloc (sizeof (reloc_deps_section)); memset (src_sec_deps, 0, sizeof (reloc_deps_section)); src_sec_deps->is_only_literal = 0; src_sec_deps->preds = NULL; @@ -931,8 +833,7 @@ add_deps_edge (deps, src_sec, tgt_sec) if (tgt_sec_deps == NULL) { /* Add a section. */ - tgt_sec_deps = (reloc_deps_section *) - xmalloc (sizeof (reloc_deps_section)); + tgt_sec_deps = xmalloc (sizeof (reloc_deps_section)); memset (tgt_sec_deps, 0, sizeof (reloc_deps_section)); tgt_sec_deps->is_only_literal = 0; tgt_sec_deps->preds = NULL; @@ -942,14 +843,14 @@ add_deps_edge (deps, src_sec, tgt_sec) } /* Add the edges. */ - src_edge = (reloc_deps_e *) xmalloc (sizeof (reloc_deps_e)); + src_edge = xmalloc (sizeof (reloc_deps_e)); memset (src_edge, 0, sizeof (reloc_deps_e)); src_edge->src = src_sec; src_edge->tgt = tgt_sec; src_edge->next = src_sec_deps->succs; src_sec_deps->succs = src_edge; - tgt_edge = (reloc_deps_e *) xmalloc (sizeof (reloc_deps_e)); + tgt_edge = xmalloc (sizeof (reloc_deps_e)); memset (tgt_edge, 0, sizeof (reloc_deps_e)); tgt_edge->src = src_sec; tgt_edge->tgt = tgt_sec; @@ -958,17 +859,14 @@ add_deps_edge (deps, src_sec, tgt_sec) } -void -build_deps_graph_callback (src_sec, src_offset, - target_sec, target_offset, closure) - asection *src_sec; - bfd_vma src_offset ATTRIBUTE_UNUSED; - asection *target_sec; - bfd_vma target_offset ATTRIBUTE_UNUSED; - PTR closure; +static void +build_deps_graph_callback (asection *src_sec, + bfd_vma src_offset ATTRIBUTE_UNUSED, + asection *target_sec, + bfd_vma target_offset ATTRIBUTE_UNUSED, + void *closure) { - reloc_deps_graph *deps; - deps = (reloc_deps_graph*) closure; + reloc_deps_graph *deps = closure; /* If the target is defined. */ if (target_sec != NULL) @@ -976,21 +874,20 @@ build_deps_graph_callback (src_sec, src_offset, } -reloc_deps_graph * -ld_build_required_section_dependence (s) - lang_statement_union_type *s; +static reloc_deps_graph * +ld_build_required_section_dependence (lang_statement_union_type *s) { reloc_deps_graph *deps; xtensa_ld_iter_stack *stack = NULL; - deps = (reloc_deps_graph*) xmalloc (sizeof (reloc_deps_graph)); + deps = xmalloc (sizeof (reloc_deps_graph)); deps->sections = NULL; deps->count = 0; deps->size = 0; - + for (iter_stack_create (&stack, s); !iter_stack_empty (&stack); - iter_stack_next (&stack)) + iter_stack_next (&stack)) { lang_statement_union_type *l = iter_stack_current (&stack); @@ -1003,7 +900,7 @@ ld_build_required_section_dependence (s) &link_info, /* Use the same closure. */ build_deps_graph_callback, - (PTR) deps); + deps); } } return deps; @@ -1011,15 +908,14 @@ ld_build_required_section_dependence (s) #if EXTRA_VALIDATION -size_t -ld_count_children (s) - lang_statement_union_type *s; +static size_t +ld_count_children (lang_statement_union_type *s) { size_t count = 0; xtensa_ld_iter_stack *stack = NULL; for (iter_stack_create (&stack, s); !iter_stack_empty (&stack); - iter_stack_next (&stack)) + iter_stack_next (&stack)) { lang_statement_union_type *l = iter_stack_current (&stack); ASSERT (l != NULL); @@ -1030,9 +926,8 @@ ld_count_children (s) #endif /* EXTRA_VALIDATION */ -void -xtensa_wild_group_interleave_callback (statement) - lang_statement_union_type * statement; +static void +xtensa_wild_group_interleave_callback (lang_statement_union_type *statement) { lang_wild_statement_type *w; reloc_deps_graph *deps; @@ -1069,13 +964,13 @@ xtensa_wild_group_interleave_callback (statement) break; } } - } + } /* Special case until the NOREORDER linker directive is supported: - *(.init) output sections and *(.fini) specs may NOT be reordered. */ + *(.init) output sections and *(.fini) specs may NOT be reordered. */ /* Check for sorting in a section list wildcard spec as well. */ - if (!no_reorder) + if (!no_reorder) { struct wildcard_list *l; for (l = w->section_list; l != NULL; l = l->next) @@ -1095,7 +990,7 @@ xtensa_wild_group_interleave_callback (statement) #endif /* It is now officially a target. Build the graph of source - section -> target section (kept as a list of edges). */ + section -> target section (kept as a list of edges). */ deps = ld_build_required_section_dependence (statement); /* If this wildcard does not reorder.... */ @@ -1124,18 +1019,16 @@ xtensa_wild_group_interleave_callback (statement) } -void -xtensa_wild_group_interleave (s) - lang_statement_union_type *s; +static void +xtensa_wild_group_interleave (lang_statement_union_type *s) { lang_for_each_statement_worker (xtensa_wild_group_interleave_callback, s); } -void -xtensa_layout_wild (deps, w) - const reloc_deps_graph *deps; - lang_wild_statement_type *w; +static void +xtensa_layout_wild (const reloc_deps_graph *deps, + lang_wild_statement_type *w) { /* If it does not fit initially, we need to do this step. Move all of the wild literal sections to a new list, then move each of @@ -1145,7 +1038,7 @@ xtensa_layout_wild (deps, w) size_t old_count, new_count; size_t ct1, ct2; #endif - + lang_wild_statement_type literal_wild; literal_wild.header.next = NULL; literal_wild.header.type = lang_wild_statement_enum; @@ -1167,7 +1060,7 @@ xtensa_layout_wild (deps, w) if (l->header.type == lang_input_section_enum) { if (section_is_target (deps, l) - && ! section_is_source (deps, l)) + && ! section_is_source (deps, l)) { /* Detach. */ *s_p = l->header.next; @@ -1179,7 +1072,7 @@ xtensa_layout_wild (deps, w) *literal_wild.children.tail = l; literal_wild.children.tail = &l->header.next; continue; - } + } } s_p = &(*s_p)->header.next; } @@ -1187,10 +1080,10 @@ xtensa_layout_wild (deps, w) #if EXTRA_VALIDATION ct1 = ld_count_children ((lang_statement_union_type*) w); ct2 = ld_count_children ((lang_statement_union_type*) &literal_wild); - + ASSERT (old_count == (ct1 + ct2)); #endif - + /* Now place them back in front of their dependent sections. */ while (literal_wild.children.head != NULL) @@ -1205,12 +1098,12 @@ xtensa_layout_wild (deps, w) /* Detach. */ literal_wild.children.head = lit->header.next; - if (literal_wild.children.head == NULL) + if (literal_wild.children.head == NULL) literal_wild.children.tail = &literal_wild.children.head; lit->header.next = NULL; /* Find a spot to place it. */ - for (s_p = &w->children.head; *s_p != NULL; s_p = &(*s_p)->header.next) + for (s_p = &w->children.head; *s_p != NULL; s_p = &(*s_p)->header.next) { lang_statement_union_type *src = *s_p; if (deps_has_edge (deps, src, lit)) @@ -1222,7 +1115,7 @@ xtensa_layout_wild (deps, w) break; } } - + if (!placed) { /* Put it at the end. */ @@ -1238,9 +1131,8 @@ xtensa_layout_wild (deps, w) } -void -xtensa_colocate_output_literals_callback (statement) - lang_statement_union_type * statement; +static void +xtensa_colocate_output_literals_callback (lang_statement_union_type *statement) { lang_output_section_statement_type *os; reloc_deps_graph *deps; @@ -1271,7 +1163,7 @@ xtensa_colocate_output_literals_callback (statement) #endif /* It is now officially a target. Build the graph of source - section -> target section (kept as a list of edges). */ + section -> target section (kept as a list of edges). */ deps = ld_build_required_section_dependence (statement); @@ -1290,7 +1182,7 @@ xtensa_colocate_output_literals_callback (statement) /* Insert align/offset assignment statement. */ if (xtensa_use_literal_pages) { - ld_xtensa_insert_page_offsets ((bfd_vma) 0, statement, deps, + ld_xtensa_insert_page_offsets (0, statement, deps, xtensa_use_literal_pages); lang_for_each_statement_worker (xtensa_ldlang_clear_addresses, statement); @@ -1302,21 +1194,19 @@ xtensa_colocate_output_literals_callback (statement) } -void -xtensa_colocate_output_literals (s) - lang_statement_union_type *s; +static void +xtensa_colocate_output_literals (lang_statement_union_type *s) { lang_for_each_statement_worker (xtensa_colocate_output_literals_callback, s); } -void -xtensa_ldlang_clear_addresses (statement) - lang_statement_union_type * statement; +static void +xtensa_ldlang_clear_addresses (lang_statement_union_type *statement) { switch (statement->header.type) { - case lang_input_section_enum: + case lang_input_section_enum: { asection *bfd_section = statement->input_section.section; bfd_section->output_offset = 0; @@ -1328,16 +1218,15 @@ xtensa_ldlang_clear_addresses (statement) } -bfd_vma -ld_assign_relative_paged_dot (dot, s, deps, lit_align) - bfd_vma dot; - lang_statement_union_type *s; - const reloc_deps_graph *deps ATTRIBUTE_UNUSED; - bfd_boolean lit_align; +static bfd_vma +ld_assign_relative_paged_dot (bfd_vma dot, + lang_statement_union_type *s, + const reloc_deps_graph *deps ATTRIBUTE_UNUSED, + bfd_boolean lit_align) { /* Walk through all of the input statements in this wild statement assign dot to all of them. */ - + xtensa_ld_iter_stack *stack = NULL; xtensa_ld_iter_stack **stack_p = &stack; @@ -1346,18 +1235,18 @@ ld_assign_relative_paged_dot (dot, s, deps, lit_align) for (iter_stack_create (stack_p, s); !iter_stack_empty (stack_p); - iter_stack_next (stack_p)) + iter_stack_next (stack_p)) { lang_statement_union_type *l = iter_stack_current (stack_p); - - switch (l->header.type) + + switch (l->header.type) { case lang_input_section_enum: { asection *section = l->input_section.section; size_t align_pow = section->alignment_power; bfd_boolean do_xtensa_alignment = FALSE; - + if (lit_align) { bfd_boolean sec_is_target = section_is_target (deps, l); @@ -1371,7 +1260,7 @@ ld_assign_relative_paged_dot (dot, s, deps, lit_align) do_xtensa_alignment = TRUE; } first_section = FALSE; - if (section->_raw_size != 0) + if (section->_raw_size != 0) in_literals = (sec_is_target && !sec_is_source); } @@ -1397,18 +1286,17 @@ ld_assign_relative_paged_dot (dot, s, deps, lit_align) } -bfd_boolean -ld_local_file_relocations_fit (statement, deps) - lang_statement_union_type *statement; - const reloc_deps_graph *deps ATTRIBUTE_UNUSED; +static bfd_boolean +ld_local_file_relocations_fit (lang_statement_union_type *statement, + const reloc_deps_graph *deps ATTRIBUTE_UNUSED) { /* Walk over all of the dependencies that we identified and make sure that IF the source and target are here (addr != 0): 1) target addr < source addr - 2) (roundup(source + source_size, 4) - rounddown(target, 4)) + 2) (roundup(source + source_size, 4) - rounddown(target, 4)) < (256K - (1 << bad align)) Need a worst-case proof.... */ - + xtensa_ld_iter_stack *stack = NULL; xtensa_ld_iter_stack **stack_p = &stack; size_t max_align_power = 0; @@ -1419,10 +1307,10 @@ ld_local_file_relocations_fit (statement, deps) /* Find the worst-case alignment requirement for this set of statements. */ for (iter_stack_create (stack_p, statement); !iter_stack_empty (stack_p); - iter_stack_next (stack_p)) + iter_stack_next (stack_p)) { lang_statement_union_type *l = iter_stack_current (stack_p); - if (l->header.type == lang_input_section_enum) + if (l->header.type == lang_input_section_enum) { lang_input_section_type *input = &l->input_section; asection *section = input->section; @@ -1435,21 +1323,21 @@ ld_local_file_relocations_fit (statement, deps) for (i = 0; i < deps->count; i++) { asection *sec = deps->sections[i]; - const reloc_deps_section *deps_section = + const reloc_deps_section *deps_section = xtensa_get_section_deps (deps, sec); if (deps_section) { /* We choose to walk through the successors. */ for (e = deps_section->succs; e != NULL; e = e->next) { - if ((e->src != e->tgt) + if (e->src != e->tgt && e->src->output_section == e->tgt->output_section && e->src->output_offset != 0 && e->tgt->output_offset != 0) { - bfd_vma l32r_addr = + bfd_vma l32r_addr = align_power (e->src->output_offset + e->src->_raw_size, 2); - bfd_vma target_addr = e->tgt->output_offset & (~3); + bfd_vma target_addr = e->tgt->output_offset & ~3; if (l32r_addr < target_addr) { fprintf (stderr, "Warning: " @@ -1457,7 +1345,7 @@ ld_local_file_relocations_fit (statement, deps) return FALSE; } - if ((l32r_addr - target_addr) > (256*1024 - align_penalty)) + if (l32r_addr - target_addr > 256 * 1024 - align_penalty) return FALSE; } } @@ -1468,35 +1356,34 @@ ld_local_file_relocations_fit (statement, deps) } -bfd_vma -ld_xtensa_insert_page_offsets (dot, s, deps, lit_align) - bfd_vma dot; - lang_statement_union_type *s; - reloc_deps_graph *deps; - bfd_boolean lit_align; +static bfd_vma +ld_xtensa_insert_page_offsets (bfd_vma dot, + lang_statement_union_type *s, + reloc_deps_graph *deps, + bfd_boolean lit_align) { xtensa_ld_iter_stack *stack = NULL; xtensa_ld_iter_stack **stack_p = &stack; bfd_boolean first_section = FALSE; bfd_boolean in_literals = FALSE; - + if (!lit_align) return FALSE; for (iter_stack_create (stack_p, s); !iter_stack_empty (stack_p); - iter_stack_next (stack_p)) + iter_stack_next (stack_p)) { lang_statement_union_type *l = iter_stack_current (stack_p); - switch (l->header.type) - { + switch (l->header.type) + { case lang_input_section_enum: { asection *section = l->input_section.section; bfd_boolean do_xtensa_alignment = FALSE; - + if (lit_align) { if (section->_raw_size != 0 @@ -1507,7 +1394,7 @@ ld_xtensa_insert_page_offsets (dot, s, deps, lit_align) do_xtensa_alignment = TRUE; } first_section = FALSE; - if (section->_raw_size != 0) + if (section->_raw_size != 0) { in_literals = (section_is_target (deps, l) && !section_is_source (deps, l)); @@ -1527,7 +1414,7 @@ ld_xtensa_insert_page_offsets (dot, s, deps, lit_align) lang_statement_union_type *assign_union; lang_statement_list_type tmplist; lang_statement_list_type *old_stat_ptr = stat_ptr; - + /* There is hidden state in "lang_add_assignment". It appends the new assignment statement to the stat_ptr list. Thus, we swap it before and after the call. */ @@ -1544,12 +1431,12 @@ ld_xtensa_insert_page_offsets (dot, s, deps, lit_align) assign_union->header.next = l; *(*stack_p)->iterloc.loc = assign_union; iter_stack_next (stack_p); - } - } - break; - default: - break; - } + } + } + break; + default: + break; + } } return dot; } |