* section.c (bfd_make_section_anyway): Add all sections to hash tab.

* elf-bfd.h (bfd_elf_is_group_section): Declare.
	* elf.c (bfd_elf_is_group_section): New function.
	* elfxx-target.h (bfd_elfNN_bfd_is_group_section
	* section.c (bfd_generic_is_group_section): New function.
	* targets.c (struct bfd_target): Add _bfd_is_group_section field.
	(BFD_JUMP_TABLE_LINK): Adjust.
	* aout-adobe.c (aout_32_bfd_is_group_section): Define.
	* aout-target.h (MY_bfd_is_group_section): Define.
	* aout-tic30.c (MY_bfd_is_group_section): Define.
	* bfd.c (bfd_is_group_section): Define.
	* binary.c (binary_bfd_is_group_section): Define.
	* bout.c (b_out_bfd_is_group_section): Define.
	* coff-alpha.c (_bfd_ecoff_bfd_is_group_section): Define.
	* coff-mips.c (_bfd_ecoff_bfd_is_group_section): Define.
	* coff-rs6000.c (rs6000coff_vec, pmac_xcoff_vec): Adjust.
	* coff64-rs6000.c (rs6000coff64_vec, aix5coff64_vec): Adjust.
	* coffcode.h (coff_bfd_is_group_section): Define.
	* i386msdos.c (msdos_bfd_is_group_section): Define.
	* i386os9k.c (os9k_bfd_is_group_section): Define.
	* ieee.c (ieee_bfd_is_group_section): Define.
	* ihex.c (ihex_bfd_is_group_section): Define.
	* libbfd-in.h (_bfd_nolink_bfd_is_group_section): Define.
	* mach-o.c (bfd_mach_o_bfd_is_group_section): Define.
	* mmo.c (mmo_bfd_is_group_section): Define.
	* nlm-target.h (nlm_bfd_is_group_section): Define.
	* oasys.c (oasys_bfd_is_group_section): Define.
	* pef.c (bfd_pef_bfd_is_group_section): Define.
	* ppcboot.c (ppcboot_bfd_is_group_section): Define.
	* srec.c (srec_bfd_is_group_section): Define.
	* tekhex.c (tekhex_bfd_is_group_section): Define.
	* versados.c (versados_bfd_is_group_section): Define.
	* vms.c (vms_bfd_is_group_section): Define.
	* xsym.c (bfd_sym_bfd_is_group_section): Define.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.
This commit is contained in:
Alan Modra
2004-04-30 14:23:40 +00:00
parent ee27e1b6c8
commit 72adc23045
35 changed files with 169 additions and 36 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, 2002, 2003
2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -945,13 +945,19 @@ bfd_make_section_anyway (bfd *abfd, const char *name)
newsect = &sh->section;
if (newsect->name != NULL)
{
/* We are making a section of the same name. It can't go in
section_htab without generating a unique section name and
that would be pointless; We don't need to traverse the
hash table. */
newsect = bfd_zalloc (abfd, sizeof (asection));
if (newsect == NULL)
/* We are making a section of the same name. Put it in the
section hash table. Even though we can't find it directly by a
hash lookup, we'll be able to find the section by traversing
sh->root.next quicker than looking at all the bfd sections. */
struct section_hash_entry *new_sh;
new_sh = (struct section_hash_entry *)
bfd_section_hash_newfunc (NULL, &abfd->section_htab, name);
if (new_sh == NULL)
return NULL;
new_sh->root.next = sh->root.next;
sh->root.next = &new_sh->root;
newsect = &new_sh->section;
}
newsect->name = name;
@@ -1349,6 +1355,24 @@ _bfd_strip_section_from_output (struct bfd_link_info *info, asection *s)
os->flags |= SEC_EXCLUDE;
}
/*
FUNCTION
bfd_generic_is_group_section
SYNOPSIS
bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
DESCRIPTION
Returns TRUE if @var{sec} is a member of a group.
*/
bfd_boolean
bfd_generic_is_group_section (bfd *abfd ATTRIBUTE_UNUSED,
const asection *sec ATTRIBUTE_UNUSED)
{
return FALSE;
}
/*
FUNCTION
bfd_generic_discard_group