* 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.
This commit is contained in:
Alan Modra
2005-05-03 17:08:43 +00:00
parent 04dd166740
commit 698527983f
4 changed files with 29 additions and 55 deletions

View File

@ -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> 2005-05-03 Nick Clifton <nickc@redhat.com>
* config/obj-ecoff.c (ecoff_frob_file_before_fix): Fix invocations * config/obj-ecoff.c (ecoff_frob_file_before_fix): Fix invocations

View File

@ -37,7 +37,7 @@ void
ecoff_frob_file_before_fix (void) ecoff_frob_file_before_fix (void)
{ {
bfd_vma addr; bfd_vma addr;
asection **sec; asection *sec;
/* Set the section VMA values. We force the .sdata and .sbss /* Set the section VMA values. We force the .sdata and .sbss
sections to the end to ensure that their VMA addresses are close 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++) for (i = 0; i < n_names; i++)
secs[i] = NULL; 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++) for (i = 0; i < n_names; i++)
if (!strcmp ((*sec)->name, names[i])) if (!strcmp (sec->name, names[i]))
{ {
secs[i] = *sec; secs[i] = sec;
bfd_section_list_remove (stdoutput, *sec); bfd_section_list_remove (stdoutput, sec);
break; break;
} }
if (i == n_names) if (i == n_names)
{ {
bfd_set_section_vma (stdoutput, *sec, addr); bfd_set_section_vma (stdoutput, sec, addr);
addr += bfd_section_size (stdoutput, *sec); addr += bfd_section_size (stdoutput, sec);
sec = &(*sec)->next;
} }
} }
for (i = 0; i < n_names; i++) 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--) for (i = n_names - 1; i >= 0; i--)
if (secs[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. */ /* Fill in the register masks. */
{ {

View File

@ -3747,18 +3747,11 @@ mmix_frob_file (void)
if (real_reg_section != NULL) if (real_reg_section != NULL)
{ {
asection *secp;
/* FIXME: Pass error state gracefully. */ /* FIXME: Pass error state gracefully. */
if (bfd_get_section_flags (stdoutput, real_reg_section) & SEC_HAS_CONTENTS) if (bfd_get_section_flags (stdoutput, real_reg_section) & SEC_HAS_CONTENTS)
as_fatal (_("register section has contents\n")); as_fatal (_("register section has contents\n"));
/* Really remove the section. */ bfd_section_list_remove (stdoutput, real_reg_section);
for (secp = stdoutput->sections;
secp != real_reg_section;
secp = secp->next)
;
bfd_section_list_remove (stdoutput, secp);
--stdoutput->section_count; --stdoutput->section_count;
} }

View File

@ -9682,39 +9682,6 @@ set_subseg_freq (segT seg, subsegT subseg, float total_f, float target_f)
/* Segment Lists and emit_state Stuff. */ /* 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 static void
xtensa_move_seg_list_to_beginning (seg_list *head) 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. */ /* Move the literal section to the front of the section list. */
assert (literal_section); assert (literal_section);
xtensa_remove_section (literal_section); if (literal_section != stdoutput->sections)
xtensa_insert_section (NULL, literal_section); {
bfd_section_list_remove (stdoutput, literal_section);
bfd_section_list_prepend (stdoutput, literal_section);
}
head = head->next; head = head->next;
} }
} }
@ -9893,8 +9862,8 @@ xtensa_reorder_seg_list (seg_list *head, segT after)
assert (literal_section); assert (literal_section);
if (literal_section != after) if (literal_section != after)
{ {
xtensa_remove_section (literal_section); bfd_section_list_remove (stdoutput, literal_section);
xtensa_insert_section (after, literal_section); bfd_section_list_insert_after (stdoutput, after, literal_section);
} }
head = head->next; head = head->next;