aboutsummaryrefslogtreecommitdiff
path: root/bfd/xcofflink.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2002-01-05 13:11:33 +0000
committerAlan Modra <amodra@gmail.com>2002-01-05 13:11:33 +0000
commit9e7b37b31f29ad3b8321d15e589ed5de550c56d3 (patch)
tree45c0765ba86e10dfd9d2ad45edc64de1be7a3a31 /bfd/xcofflink.c
parent3f0a7f7f7351fe42312c4c960abdd0b69f1d2e0c (diff)
downloadfsf-binutils-gdb-9e7b37b31f29ad3b8321d15e589ed5de550c56d3.zip
fsf-binutils-gdb-9e7b37b31f29ad3b8321d15e589ed5de550c56d3.tar.gz
fsf-binutils-gdb-9e7b37b31f29ad3b8321d15e589ed5de550c56d3.tar.bz2
* section.c (bfd_section_init): Remove unnecessary initialisations.
(bfd_section_list_clear): New function. (bfd_section_list_remove, bfd_section_list_insert): New macros. (_bfd_strip_section_from_output): Use them. * coffcode.h (coff_set_alignment_hook): Likewise. * elf32-mips.c (_bfd_mips_elf_final_link): Likewise. * elf64-mips.c (mips_elf64_final_link): Likewise. * elf64-mmix.c (mmix_elf_final_link): Likewise. * sunos.c (sunos_add_dynamic_symbols): Likewise. * xcofflink.c (_bfd_xcoff_bfd_final_link): Likewise. * bfd-in2.h: Regenerate. * netbsd-core.c (netbsd_core_file_p): Use bfd_make_section_anyway rather than doing our own section handling. Clean up after errors with bfd_release and bfd_section_list_clear. Handle unexpected flags. * aoutf1.h (sunos4_core_file_p): Likewise. * aix386-core.c (aix386_core_file_p): Likewise. * cisco-core.c (cisco_core_file_validate): Likewise. * ptrace-core.c (ptrace_unix_core_file_p): Likewise. * trad-core.c (trad_unix_core_file_p): Likewise. * hppabsd-core.c (hppabsd_core_core_file_p): Clean up after errors with bfd_release and bfd_section_list_clear. * hpux-core.c (hpux_core_core_file_p): Likewise. * irix-core.c (irix_core_core_file_p): Likewise. * lynx-core.c (lynx_core_file_p): Likewise. * osf-core.c (osf_core_core_file_p): Likewise. * rs6000-core.c (rs6000coff_core_p): Likewise. * sco5-core.c (sco5_core_file_p): Likewise.
Diffstat (limited to 'bfd/xcofflink.c')
-rw-r--r--bfd/xcofflink.c33
1 files changed, 10 insertions, 23 deletions
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index 1995769..84b8e52 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -1,5 +1,5 @@
/* POWER/PowerPC XCOFF linker support.
- Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support.
@@ -3656,15 +3656,14 @@ _bfd_xcoff_bfd_final_link (abfd, info)
{
boolean saw_contents;
int indx;
- asection **op, **prev;
+ asection **op;
file_ptr sofar;
/* Insert .pad sections before every section which has
contents and is loaded, if it is preceded by some other
section which has contents and is loaded. */
saw_contents = true;
- for (op = &abfd->sections, prev = NULL;
- *op != NULL; prev = op, op = &(*op)->next)
+ for (op = &abfd->sections; *op != NULL; op = &(*op)->next)
{
if (strcmp ((*op)->name, ".pad") == 0)
saw_contents = false;
@@ -3675,34 +3674,22 @@ _bfd_xcoff_bfd_final_link (abfd, info)
saw_contents = true;
else
{
- asection *n, *hold, **st;
+ asection *n, **st;
/* Create a pad section and place it before the section
that needs padding. This requires unlinking and
- relinking the bfd's sections list.
-
- sections = S1
- . S1.next = S2
- . S2.next = S3
- . S3.next = NULL
- section_tail = &S3.next */
+ relinking the bfd's section list. */
- hold = *op;
st = abfd->section_tail;
-
n = bfd_make_section_anyway (abfd, ".pad");
n->flags = SEC_HAS_CONTENTS;
n->alignment_power = 0;
-
- if (NULL == prev)
- abfd->sections = n;
- else
- (*prev)->next = n;
-
- n->next = hold;
- *st = NULL;
- abfd->section_tail = st;
+ BFD_ASSERT (*st == n);
+ bfd_section_list_remove (abfd, st);
+ bfd_section_list_insert (abfd, op, n);
+
+ op = &n->next;
saw_contents = false;
}
}