* write.c (write_object_file): Make use of bfd_section_list_remove.

* config/obj-ecoff.c (ecoff_frob_file): Likewise.
	* config/tc-mmix.c (mmix_frob_file): Likewise.
This commit is contained in:
Alan Modra 2002-01-05 13:13:18 +00:00
parent 9e7b37b31f
commit 7c6beb6988
4 changed files with 41 additions and 55 deletions

View file

@ -1,3 +1,9 @@
2002-01-05 Alan Modra <amodra@bigpond.net.au>
* write.c (write_object_file): Make use of bfd_section_list_remove.
* config/obj-ecoff.c (ecoff_frob_file): Likewise.
* config/tc-mmix.c (mmix_frob_file): Likewise.
2002-01-04 Jason Thorpe <thorpej@wasabisystems.com>
* configure.in (i386-*-netbsdelf*): Collapse target into...

View file

@ -106,7 +106,7 @@ ecoff_frob_file ()
const struct ecoff_debug_swap * const debug_swap
= &ecoff_backend (stdoutput)->debug_swap;
bfd_vma addr;
asection *sec;
asection **sec;
HDRR *hdr;
char *buf;
char *set;
@ -143,53 +143,39 @@ ecoff_frob_file ()
};
#define n_names ((int) (sizeof (names) / sizeof (names[0])))
/* Sections that match names, order to be straightened out later. */
asection *secs[n_names];
int i;
addr = 0;
{
/* Sections that match names, order to be straightened out later. */
asection *secs[n_names];
/* Linked list of sections with non-matching names. Random ordering. */
asection *other_sections = 0;
/* Pointer to next section, since we're destroying the original
ordering. */
asection *next;
for (i = 0; i < n_names; i++)
secs[i] = 0;
int i;
for (i = 0; i < n_names; i++)
secs[i] = 0;
for (sec = stdoutput->sections; sec != (asection *) NULL; sec = next)
{
next = sec->next;
for (i = 0; i < n_names; i++)
if (!strcmp (sec->name, names[i]))
{
secs[i] = sec;
break;
}
if (i == n_names)
for (sec = &stdoutput->sections; *sec != (asection *) NULL; )
{
for (i = 0; i < n_names; i++)
if (!strcmp ((*sec)->name, names[i]))
{
bfd_set_section_vma (stdoutput, sec, addr);
addr += bfd_section_size (stdoutput, sec);
sec->next = other_sections;
other_sections = 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;
}
}
for (i = 0; i < n_names; i++)
if (secs[i])
{
bfd_set_section_vma (stdoutput, secs[i], addr);
addr += bfd_section_size (stdoutput, secs[i]);
}
for (i = 0; i < n_names; i++)
if (secs[i])
{
sec = secs[i];
bfd_set_section_vma (stdoutput, sec, addr);
addr += bfd_section_size (stdoutput, sec);
}
for (i = n_names - 1; i >= 0; i--)
if (secs[i])
{
sec = secs[i];
sec->next = other_sections;
other_sections = sec;
}
stdoutput->sections = other_sections;
}
for (i = n_names - 1; i >= 0; i--)
if (secs[i])
bfd_section_list_insert (stdoutput, &stdoutput->sections, secs[i]);
/* Build the ECOFF debugging information. */
assert (ecoff_data (stdoutput) != 0);

View file

@ -3629,14 +3629,12 @@ mmix_frob_file ()
if (bfd_get_section_flags (stdoutput, real_reg_section) & SEC_HAS_CONTENTS)
as_fatal (_("register section has contents\n"));
/* FIXME: This does not seem like the proper way to kill a section,
but it's the way it's done elsewhere, like elf64-alpha.c. */
/* Really remove the section. */
for (secpp = &stdoutput->sections;
*secpp != real_reg_section;
secpp = &(*secpp)->next)
;
*secpp = (*secpp)->next;
bfd_section_list_remove (stdoutput, secpp);
--stdoutput->section_count;
}

View file

@ -1507,22 +1507,18 @@ write_object_file ()
#ifdef BFD_ASSEMBLER
/* Remove the sections created by gas for its own purposes. */
{
asection **seclist, *sec;
asection **seclist;
int i;
seclist = &stdoutput->sections;
while (seclist && *seclist)
while (*seclist)
{
sec = *seclist;
while (sec == reg_section || sec == expr_section)
if (*seclist == reg_section || *seclist == expr_section)
{
sec = sec->next;
*seclist = sec;
bfd_section_list_remove (stdoutput, seclist);
stdoutput->section_count--;
if (!sec)
break;
}
if (*seclist)
else
seclist = &(*seclist)->next;
}
i = 0;