* 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.
This commit is contained in:
Alan Modra
2002-01-05 13:11:33 +00:00
parent 3f0a7f7f73
commit 9e7b37b31f
22 changed files with 402 additions and 340 deletions

View File

@@ -1,6 +1,6 @@
/* Object file "section" support for the BFD library.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001
2000, 2001, 2002
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -560,6 +560,32 @@ CODE_FRAGMENT
.#define bfd_get_section_size_after_reloc(section) \
. ((section)->reloc_done ? (section)->_cooked_size \
. : (abort (), (bfd_size_type) 1))
.
.{* Macros to handle insertion and deletion of a bfd's sections. These
. only handle the list pointers, ie. do not adjust section_count,
. target_index etc. *}
.#define bfd_section_list_remove(ABFD, PS) \
. do \
. { \
. asection **_ps = PS; \
. asection *_s = *_ps; \
. *_ps = _s->next; \
. if (_s->next == NULL) \
. (ABFD)->section_tail = _ps; \
. } \
. while (0)
.#define bfd_section_list_insert(ABFD, PS, S) \
. do \
. { \
. asection **_ps = PS; \
. asection *_s = S; \
. _s->next = *_ps; \
. *_ps = _s; \
. if (_s->next == NULL) \
. (ABFD)->section_tail = &_s->next; \
. } \
. while (0)
.
*/
/* We use a macro to initialize the static asymbol structures because
@@ -680,16 +706,7 @@ bfd_section_init (abfd, newsect)
newsect->id = section_id;
newsect->index = abfd->section_count;
newsect->flags = SEC_NO_FLAGS;
newsect->userdata = NULL;
newsect->contents = NULL;
newsect->next = (asection *) NULL;
newsect->relocation = (arelent *) NULL;
newsect->reloc_count = 0;
newsect->line_filepos = 0;
newsect->owner = abfd;
newsect->comdat = NULL;
/* Create a symbol whose only job is to point to this section. This
is useful for things like relocs which are relative to the base
@@ -725,6 +742,29 @@ SUBSECTION
These are the functions exported by the section handling part of BFD.
*/
/*
FUNCTION
bfd_section_list_clear
SYNOPSIS
void bfd_section_list_clear (bfd *);
DESCRIPTION
Clears the section list, and also resets the section count and
hash table entries.
*/
void
bfd_section_list_clear (abfd)
bfd *abfd;
{
abfd->sections = NULL;
abfd->section_tail = &abfd->sections;
abfd->section_count = 0;
memset ((PTR) abfd->section_htab.table, 0,
abfd->section_htab.size * sizeof (struct bfd_hash_entry *));
}
/*
FUNCTION
bfd_get_section_by_name
@@ -1357,9 +1397,7 @@ _bfd_strip_section_from_output (info, s)
for (spp = &os->owner->sections; *spp; spp = &(*spp)->next)
if (*spp == os)
{
*spp = os->next;
if (os->next == NULL)
os->owner->section_tail = spp;
bfd_section_list_remove (os->owner, spp);
os->owner->section_count--;
break;
}