From: Alan Modra Date: Sat, 5 Jan 2002 13:13:18 +0000 (+0000) Subject: * write.c (write_object_file): Make use of bfd_section_list_remove. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7c6beb69886dccfb3cd3efbb5e966683936f6eac;p=binutils-gdb.git * 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. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index ea3a9548997..c1c52f34ad3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2002-01-05 Alan Modra + + * 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 * configure.in (i386-*-netbsdelf*): Collapse target into... diff --git a/gas/config/obj-ecoff.c b/gas/config/obj-ecoff.c index d1eabceefb9..4d055cb62eb 100644 --- a/gas/config/obj-ecoff.c +++ b/gas/config/obj-ecoff.c @@ -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; - - 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 (i = 0; i < n_names; i++) + secs[i] = 0; + + 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; } - } - for (i = 0; i < n_names; i++) - if (secs[i]) + if (i == n_names) { - sec = secs[i]; - bfd_set_section_vma (stdoutput, sec, addr); - addr += bfd_section_size (stdoutput, sec); + bfd_set_section_vma (stdoutput, *sec, addr); + addr += bfd_section_size (stdoutput, *sec); + sec = &(*sec)->next; } - 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 = 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 = 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); diff --git a/gas/config/tc-mmix.c b/gas/config/tc-mmix.c index 46d5decf9e1..fcd7f1e3b06 100644 --- a/gas/config/tc-mmix.c +++ b/gas/config/tc-mmix.c @@ -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; } diff --git a/gas/write.c b/gas/write.c index 55db85a7ec9..9b20f909194 100644 --- a/gas/write.c +++ b/gas/write.c @@ -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;