diff options
-rw-r--r-- | gas/ChangeLog | 13 | ||||
-rw-r--r-- | gas/config/obj-ecoff.c | 17 | ||||
-rw-r--r-- | gas/config/tc-mmix.c | 9 | ||||
-rw-r--r-- | gas/config/tc-xtensa.c | 45 |
4 files changed, 29 insertions, 55 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 34d5c11..3210d11 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,16 @@ +2005-05-04 Alan Modra <amodra@bigpond.net.au> + + * config/obj-ecoff.c (ecoff_frob_file_before_fix): Correct section + list traversal. Use bfd_section_list_prepend. + * config/tc-mmix.c (mmix_frob_file): Don't needlessly iterate + over the section list. + * config/tc-xtensa.c (xtensa_remove_section): Delete. + (xtensa_insert_section): Delete. + (xtensa_move_seg_list_to_beginning): Use bfd_section_list_remove + and bfd_section_list_prepend. + (xtensa_reorder_seg_list): Use bfd_section_list_remove and + bfd_section_list_insert_after. + 2005-05-03 Nick Clifton <nickc@redhat.com> * config/obj-ecoff.c (ecoff_frob_file_before_fix): Fix invocations diff --git a/gas/config/obj-ecoff.c b/gas/config/obj-ecoff.c index 6bfb79e..7a1e29f 100644 --- a/gas/config/obj-ecoff.c +++ b/gas/config/obj-ecoff.c @@ -37,7 +37,7 @@ void ecoff_frob_file_before_fix (void) { bfd_vma addr; - asection **sec; + asection *sec; /* Set the section VMA values. We force the .sdata and .sbss sections to the end to ensure that their VMA addresses are close @@ -80,20 +80,19 @@ ecoff_frob_file_before_fix (void) for (i = 0; i < n_names; i++) secs[i] = NULL; - for (sec = &stdoutput->sections; *sec != NULL;) + for (sec = stdoutput->sections; sec != NULL; sec = sec->next) { for (i = 0; i < n_names; i++) - if (!strcmp ((*sec)->name, names[i])) + if (!strcmp (sec->name, names[i])) { - secs[i] = *sec; - bfd_section_list_remove (stdoutput, *sec); + secs[i] = sec; + bfd_section_list_remove (stdoutput, sec); break; } if (i == n_names) { - bfd_set_section_vma (stdoutput, *sec, addr); - addr += bfd_section_size (stdoutput, *sec); - sec = &(*sec)->next; + bfd_set_section_vma (stdoutput, sec, addr); + addr += bfd_section_size (stdoutput, sec); } } for (i = 0; i < n_names; i++) @@ -104,7 +103,7 @@ ecoff_frob_file_before_fix (void) } for (i = n_names - 1; i >= 0; i--) if (secs[i]) - bfd_section_list_insert_after (stdoutput, stdoutput->sections, secs[i]); + bfd_section_list_prepend (stdoutput, secs[i]); /* Fill in the register masks. */ { diff --git a/gas/config/tc-mmix.c b/gas/config/tc-mmix.c index 356a68a..5fc6ab9 100644 --- a/gas/config/tc-mmix.c +++ b/gas/config/tc-mmix.c @@ -3747,18 +3747,11 @@ mmix_frob_file (void) if (real_reg_section != NULL) { - asection *secp; - /* FIXME: Pass error state gracefully. */ if (bfd_get_section_flags (stdoutput, real_reg_section) & SEC_HAS_CONTENTS) as_fatal (_("register section has contents\n")); - /* Really remove the section. */ - for (secp = stdoutput->sections; - secp != real_reg_section; - secp = secp->next) - ; - bfd_section_list_remove (stdoutput, secp); + bfd_section_list_remove (stdoutput, real_reg_section); --stdoutput->section_count; } diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index 9340e4d..53d3bad 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -9682,39 +9682,6 @@ set_subseg_freq (segT seg, subsegT subseg, float total_f, float target_f) /* Segment Lists and emit_state Stuff. */ -/* Remove the segment from the global sections list. */ - -static void -xtensa_remove_section (segT sec) -{ - /* Handle brain-dead bfd_section_list_remove macro, which - expect the address of the prior section's "next" field, not - just the address of the section to remove. */ - segT ps_next_ptr = stdoutput->sections; - - while (ps_next_ptr != sec && ps_next_ptr != NULL) - ps_next_ptr = ps_next_ptr->next; - - assert (ps_next_ptr != NULL); - - bfd_section_list_remove (stdoutput, ps_next_ptr); -} - - -static void -xtensa_insert_section (segT after_sec, segT sec) -{ - segT after_sec_next; - - if (after_sec == NULL) - after_sec_next = stdoutput->sections; - else - after_sec_next = after_sec->next; - - bfd_section_list_insert_after (stdoutput, after_sec_next, sec); -} - - static void xtensa_move_seg_list_to_beginning (seg_list *head) { @@ -9725,9 +9692,11 @@ xtensa_move_seg_list_to_beginning (seg_list *head) /* Move the literal section to the front of the section list. */ assert (literal_section); - xtensa_remove_section (literal_section); - xtensa_insert_section (NULL, literal_section); - + if (literal_section != stdoutput->sections) + { + bfd_section_list_remove (stdoutput, literal_section); + bfd_section_list_prepend (stdoutput, literal_section); + } head = head->next; } } @@ -9893,8 +9862,8 @@ xtensa_reorder_seg_list (seg_list *head, segT after) assert (literal_section); if (literal_section != after) { - xtensa_remove_section (literal_section); - xtensa_insert_section (after, literal_section); + bfd_section_list_remove (stdoutput, literal_section); + bfd_section_list_insert_after (stdoutput, after, literal_section); } head = head->next; |