* libbfd-in.h (_bfd_generic_new_section_hook): Declare.
	* section.c (bfd_abs_symbol, bfd_com_symbol): Delete.
	(bfd_und_symbol, bfd_ind_symbol): Delete.
	(BFD_FAKE_SECTION): Remove SYM_PTR param, set symbol_ptr_ptr to
	&SEC.symbol.
	(STD_SECTION): Adjust.
	(_bfd_generic_new_section_hook): New function, extracted from..
	(bfd_section_init): ..here.
	(bfd_make_section_old_way): Call new_section_hook for abs, com,
	und and ind sections.
	* elf.c (_bfd_elf_large_com_section): Adjust.
	* aoutx.h (new_section_hook): Call _bfd_generic_new_section_hook.
	* pdp11.c (new_section_hook): Likewise.
	* coffcode.h (coff_new_section_hook): Likewise.
	* ecoff.c (_bfd_ecoff_new_section_hook): Likewise.
	* elf.c (_bfd_elf_new_section_hook): Likewise.
	* vms.c (vms_new_section_hook): Likwise.
	* elf32-arm.c (elf32_arm_new_section_hook): Check used_by_bfd isn't
	already set.
	* elf32-sh64.c (sh64_elf_new_section_hook): Likewise.
	* elf32-xtensa.c (elf_xtensa_new_section_hook): Likewise.
	* elf64-mmix.c (mmix_elf_new_section_hook): Likewise.
	* elf64-ppc.c (ppc64_elf_new_section_hook): Likewise.
	* elfxx-mips.c (_bfd_mips_elf_new_section_hook): Likewise.
	* elfxx-sparc.c (_bfd_sparc_elf_new_section_hook): Likewise.
	* ieee.c (ieee_new_section_hook): Likewise.  Call
	_bfd_generic_new_section_hook too.
	* mmo.c (mmo_new_section_hook): Likewise.
	* oasys.c (oasys_new_section_hook): Likewise.
	* som.c (som_new_section_hook): Likewise.
	* coff-w65.c (reloc_processing): Don't use bfd_abs_symbol.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.
gas/
	* subsegs.c (subseg_get): Don't call obj_sec_set_private_data.
	* config/obj-elf.h (obj_sec_set_private_data): Delete.
	* config/tc-hppa.c (tc_gen_reloc): Don't use bfd_abs_symbol.
	* config/tc-mn10300.c (tc_gen_reloc): Likewise.
This commit is contained in:
Alan Modra 2006-05-03 14:26:41 +00:00
parent 81fc501adb
commit f592407e4d
28 changed files with 265 additions and 208 deletions

View File

@ -1,3 +1,39 @@
2006-05-03 Alan Modra <amodra@bigpond.net.au>
* libbfd-in.h (_bfd_generic_new_section_hook): Declare.
* section.c (bfd_abs_symbol, bfd_com_symbol): Delete.
(bfd_und_symbol, bfd_ind_symbol): Delete.
(BFD_FAKE_SECTION): Remove SYM_PTR param, set symbol_ptr_ptr to
&SEC.symbol.
(STD_SECTION): Adjust.
(_bfd_generic_new_section_hook): New function, extracted from..
(bfd_section_init): ..here.
(bfd_make_section_old_way): Call new_section_hook for abs, com,
und and ind sections.
* elf.c (_bfd_elf_large_com_section): Adjust.
* aoutx.h (new_section_hook): Call _bfd_generic_new_section_hook.
* pdp11.c (new_section_hook): Likewise.
* coffcode.h (coff_new_section_hook): Likewise.
* ecoff.c (_bfd_ecoff_new_section_hook): Likewise.
* elf.c (_bfd_elf_new_section_hook): Likewise.
* vms.c (vms_new_section_hook): Likwise.
* elf32-arm.c (elf32_arm_new_section_hook): Check used_by_bfd isn't
already set.
* elf32-sh64.c (sh64_elf_new_section_hook): Likewise.
* elf32-xtensa.c (elf_xtensa_new_section_hook): Likewise.
* elf64-mmix.c (mmix_elf_new_section_hook): Likewise.
* elf64-ppc.c (ppc64_elf_new_section_hook): Likewise.
* elfxx-mips.c (_bfd_mips_elf_new_section_hook): Likewise.
* elfxx-sparc.c (_bfd_sparc_elf_new_section_hook): Likewise.
* ieee.c (ieee_new_section_hook): Likewise. Call
_bfd_generic_new_section_hook too.
* mmo.c (mmo_new_section_hook): Likewise.
* oasys.c (oasys_new_section_hook): Likewise.
* som.c (som_new_section_hook): Likewise.
* coff-w65.c (reloc_processing): Don't use bfd_abs_symbol.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
2006-05-03 Alan Modra <amodra@bigpond.net.au>
* hash.c (DEFAULT_SIZE): Revert last change.

View File

@ -1193,26 +1193,21 @@ NAME (aout, new_section_hook) (bfd *abfd, asection *newsect)
{
obj_textsec (abfd)= newsect;
newsect->target_index = N_TEXT;
return TRUE;
}
if (obj_datasec (abfd) == NULL && !strcmp (newsect->name, ".data"))
else if (obj_datasec (abfd) == NULL && !strcmp (newsect->name, ".data"))
{
obj_datasec (abfd) = newsect;
newsect->target_index = N_DATA;
return TRUE;
}
if (obj_bsssec (abfd) == NULL && !strcmp (newsect->name, ".bss"))
else if (obj_bsssec (abfd) == NULL && !strcmp (newsect->name, ".bss"))
{
obj_bsssec (abfd) = newsect;
newsect->target_index = N_BSS;
return TRUE;
}
}
/* We allow more than three sections internally. */
return TRUE;
return _bfd_generic_new_section_hook (abfd, newsect);
}
bfd_boolean

View File

@ -1467,11 +1467,6 @@ extern asection bfd_ind_section;
|| ((SEC) == bfd_com_section_ptr) \
|| ((SEC) == bfd_ind_section_ptr))
extern const struct bfd_symbol * const bfd_abs_symbol;
extern const struct bfd_symbol * const bfd_com_symbol;
extern const struct bfd_symbol * const bfd_und_symbol;
extern const struct bfd_symbol * const bfd_ind_symbol;
/* 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. */
@ -1562,7 +1557,7 @@ extern const struct bfd_symbol * const bfd_ind_symbol;
#define bfd_section_removed_from_list(ABFD, S) \
((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, SYM_PTR, NAME, IDX) \
#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
/* name, id, index, next, prev, flags, user_set_vma, */ \
{ NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
\
@ -1593,11 +1588,8 @@ extern const struct bfd_symbol * const bfd_ind_symbol;
/* target_index, used_by_bfd, constructor_chain, owner, */ \
0, NULL, NULL, NULL, \
\
/* symbol, */ \
(struct bfd_symbol *) SYM, \
\
/* symbol_ptr_ptr, */ \
(struct bfd_symbol **) SYM_PTR, \
/* symbol, symbol_ptr_ptr, */ \
(struct bfd_symbol *) SYM, &SEC.symbol, \
\
/* map_head, map_tail */ \
{ NULL }, { NULL } \

View File

@ -1,6 +1,6 @@
/* BFD back-end for WDC 65816 COFF binaries.
Copyright 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
Copyright 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006 Free Software Foundation, Inc.
Written by Steve Chamberlain, <sac@cygnus.com>.
This file is part of BFD, the Binary File Descriptor library.
@ -105,7 +105,7 @@ reloc_processing (relent, reloc, symbols, abfd, section)
if (((int) reloc->r_symndx) > 0)
relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
else
relent->sym_ptr_ptr = (asymbol **)&(bfd_abs_symbol);
relent->sym_ptr_ptr = (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
relent->addend = reloc->r_offset;

View File

@ -1,6 +1,6 @@
/* Support for the generic parts of most COFF variants, for BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005
2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Written by Cygnus Support.
@ -1560,6 +1560,10 @@ coff_new_section_hook (bfd * abfd, asection * section)
section->alignment_power = bfd_xcoff_data_align_power (abfd);
#endif
/* Set up the section symbol. */
if (!_bfd_generic_new_section_hook (abfd, section))
return FALSE;
/* Allocate aux records for section symbols, to store size and
related info.

View File

@ -140,8 +140,7 @@ _bfd_ecoff_mkobject_hook (bfd *abfd, void * filehdr, void * aouthdr)
/* Initialize a new section. */
bfd_boolean
_bfd_ecoff_new_section_hook (bfd *abfd ATTRIBUTE_UNUSED,
asection *section)
_bfd_ecoff_new_section_hook (bfd *abfd, asection *section)
{
unsigned int i;
static struct
@ -181,7 +180,7 @@ _bfd_ecoff_new_section_hook (bfd *abfd ATTRIBUTE_UNUSED,
uncertain about .init on some systems and I don't know how shared
libraries work. */
return TRUE;
return _bfd_generic_new_section_hook (abfd, section);
}
/* Determine the machine architecture and type. This is called from

View File

@ -2502,7 +2502,7 @@ _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
}
}
return TRUE;
return _bfd_generic_new_section_hook (abfd, sec);
}
/* Create a new bfd section from an ELF program header.
@ -8760,8 +8760,7 @@ done:
/* It is only used by x86-64 so far. */
asection _bfd_elf_large_com_section
= BFD_FAKE_SECTION (_bfd_elf_large_com_section,
SEC_IS_COMMON, NULL, NULL, "LARGE_COMMON",
0);
SEC_IS_COMMON, NULL, "LARGE_COMMON", 0);
/* Return TRUE if 2 section types are compatible. */

View File

@ -7822,13 +7822,16 @@ elf32_arm_output_symbol_hook (struct bfd_link_info *info,
static bfd_boolean
elf32_arm_new_section_hook (bfd *abfd, asection *sec)
{
_arm_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
if (!sec->used_by_bfd)
{
_arm_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
}
record_section_with_arm_elf_section_data (sec);

View File

@ -1,5 +1,5 @@
/* SuperH SH64-specific support for 32-bit ELF
Copyright 2000, 2001, 2002, 2003, 2004, 2005
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@ -115,13 +115,16 @@ static void sh64_find_section_for_address
static bfd_boolean
sh64_elf_new_section_hook (bfd *abfd, asection *sec)
{
struct _sh64_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
if (!sec->used_by_bfd)
{
struct _sh64_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
sdata = (struct _sh64_elf_section_data *) bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
}
return _bfd_elf_new_section_hook (abfd, sec);
}

View File

@ -1,5 +1,5 @@
/* Xtensa-specific support for 32-bit ELF.
Copyright 2003, 2004, 2005 Free Software Foundation, Inc.
Copyright 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@ -5007,13 +5007,16 @@ struct elf_xtensa_section_data
static bfd_boolean
elf_xtensa_new_section_hook (bfd *abfd, asection *sec)
{
struct elf_xtensa_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
if (!sec->used_by_bfd)
{
struct elf_xtensa_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
sdata = (struct elf_xtensa_section_data *) bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = (void *) sdata;
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
}
return _bfd_elf_new_section_hook (abfd, sec);
}

View File

@ -1,5 +1,6 @@
/* MMIX-specific support for 64-bit ELF.
Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Copyright 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Hans-Peter Nilsson <hp@bitrange.com>
This file is part of BFD, the Binary File Descriptor library.
@ -860,13 +861,16 @@ mmix_elf_new_section_hook (abfd, sec)
bfd *abfd;
asection *sec;
{
struct _mmix_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
if (!sec->used_by_bfd)
{
struct _mmix_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
sdata = (struct _mmix_elf_section_data *) bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = (PTR) sdata;
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
}
return _bfd_elf_new_section_hook (abfd, sec);
}

View File

@ -2550,13 +2550,16 @@ struct _ppc64_elf_section_data
static bfd_boolean
ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
{
struct _ppc64_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
if (!sec->used_by_bfd)
{
struct _ppc64_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
}
return _bfd_elf_new_section_hook (abfd, sec);
}

View File

@ -826,13 +826,16 @@ mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
bfd_boolean
_bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
{
struct _mips_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
if (!sec->used_by_bfd)
{
struct _mips_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
}
return _bfd_elf_new_section_hook (abfd, sec);
}

View File

@ -2434,13 +2434,16 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
bfd_boolean
_bfd_sparc_elf_new_section_hook (bfd *abfd, asection *sec)
{
struct _bfd_sparc_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
if (!sec->used_by_bfd)
{
struct _bfd_sparc_elf_section_data *sdata;
bfd_size_type amt = sizeof (*sdata);
sdata = (struct _bfd_sparc_elf_section_data *) bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = (PTR) sdata;
sdata = bfd_zalloc (abfd, amt);
if (sdata == NULL)
return FALSE;
sec->used_by_bfd = sdata;
}
return _bfd_elf_new_section_hook (abfd, sec);
}

View File

@ -2014,12 +2014,15 @@ ieee_print_symbol (bfd *abfd,
static bfd_boolean
ieee_new_section_hook (bfd *abfd, asection *newsect)
{
newsect->used_by_bfd = bfd_alloc (abfd, (bfd_size_type) sizeof (ieee_per_section_type));
if (!newsect->used_by_bfd)
return FALSE;
{
newsect->used_by_bfd = bfd_alloc (abfd, sizeof (ieee_per_section_type));
if (!newsect->used_by_bfd)
return FALSE;
}
ieee_per_section (newsect)->data = NULL;
ieee_per_section (newsect)->section = newsect;
return TRUE;
return _bfd_generic_new_section_hook (abfd, newsect);
}
static long

View File

@ -217,8 +217,8 @@ int bfd_generic_stat_arch_elt
#define _bfd_generic_close_and_cleanup bfd_true
#define _bfd_generic_bfd_free_cached_info bfd_true
#define _bfd_generic_new_section_hook \
((bfd_boolean (*) (bfd *, asection *)) bfd_true)
extern bfd_boolean _bfd_generic_new_section_hook
(bfd *, asection *);
extern bfd_boolean _bfd_generic_get_section_contents
(bfd *, asection *, void *, file_ptr, bfd_size_type);
extern bfd_boolean _bfd_generic_get_section_contents_in_window

View File

@ -222,8 +222,8 @@ int bfd_generic_stat_arch_elt
#define _bfd_generic_close_and_cleanup bfd_true
#define _bfd_generic_bfd_free_cached_info bfd_true
#define _bfd_generic_new_section_hook \
((bfd_boolean (*) (bfd *, asection *)) bfd_true)
extern bfd_boolean _bfd_generic_new_section_hook
(bfd *, asection *);
extern bfd_boolean _bfd_generic_get_section_contents
(bfd *, asection *, void *, file_ptr, bfd_size_type);
extern bfd_boolean _bfd_generic_get_section_contents_in_window

View File

@ -1,5 +1,5 @@
/* BFD back-end for mmo objects (MMIX-specific object-format).
Copyright 2001, 2002, 2003, 2004, 2005
Copyright 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Written by Hans-Peter Nilsson (hp@bitrange.com).
Infrastructure and other bits originally copied from srec.c and
@ -2007,19 +2007,21 @@ mmo_scan (bfd *abfd)
we point out the shape of allocated section contents. */
static bfd_boolean
mmo_new_section_hook (bfd *abfd ATTRIBUTE_UNUSED, asection *newsect)
mmo_new_section_hook (bfd *abfd, asection *newsect)
{
/* We zero-fill all fields and assume NULL is represented by an all
zero-bit pattern. */
newsect->used_by_bfd =
bfd_zalloc (abfd, sizeof (struct mmo_section_data_struct));
if (!newsect->used_by_bfd)
return FALSE;
{
/* We zero-fill all fields and assume NULL is represented by an all
zero-bit pattern. */
newsect->used_by_bfd
= bfd_zalloc (abfd, sizeof (struct mmo_section_data_struct));
if (!newsect->used_by_bfd)
return FALSE;
}
/* Always align to at least 32-bit words. */
newsect->alignment_power = 2;
return TRUE;
return _bfd_generic_new_section_hook (abfd, newsect);
}
/* We already have section contents loaded for sections that have

View File

@ -1,6 +1,6 @@
/* BFD back-end for oasys objects.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2001,
2002, 2003, 2004, 2005 Free Software Foundation, Inc.
2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support, <sac@cygnus.com>.
This file is part of BFD, the Binary File Descriptor library.
@ -685,9 +685,13 @@ oasys_print_symbol (bfd *abfd, void * afile, asymbol *symbol, bfd_print_symbol_t
static bfd_boolean
oasys_new_section_hook (bfd *abfd, asection *newsect)
{
newsect->used_by_bfd = bfd_alloc (abfd, (bfd_size_type) sizeof (oasys_per_section_type));
if (!newsect->used_by_bfd)
return FALSE;
{
newsect->used_by_bfd
= bfd_alloc (abfd, (bfd_size_type) sizeof (oasys_per_section_type));
if (!newsect->used_by_bfd)
return FALSE;
}
oasys_per_section (newsect)->data = NULL;
oasys_per_section (newsect)->section = newsect;
oasys_per_section (newsect)->offset = 0;
@ -697,7 +701,7 @@ oasys_new_section_hook (bfd *abfd, asection *newsect)
/* Turn the section string into an index. */
sscanf (newsect->name, "%u", &newsect->target_index);
return TRUE;
return _bfd_generic_new_section_hook (abfd, newsect);
}

View File

@ -1111,32 +1111,27 @@ NAME (aout, new_section_hook) (bfd *abfd, asection *newsect)
if (bfd_get_format (abfd) == bfd_object)
{
if (obj_textsec (abfd) == NULL
&& ! strcmp (newsect->name, ".text"))
&& !strcmp (newsect->name, ".text"))
{
obj_textsec(abfd)= newsect;
newsect->target_index = N_TEXT;
return TRUE;
}
if (obj_datasec (abfd) == NULL
&& ! strcmp (newsect->name, ".data"))
{
obj_datasec (abfd) = newsect;
newsect->target_index = N_DATA;
return TRUE;
}
if (obj_bsssec (abfd) == NULL
&& !strcmp (newsect->name, ".bss"))
{
obj_bsssec (abfd) = newsect;
newsect->target_index = N_BSS;
return TRUE;
}
}
else if (obj_datasec (abfd) == NULL
&& !strcmp (newsect->name, ".data"))
{
obj_datasec (abfd) = newsect;
newsect->target_index = N_DATA;
}
else if (obj_bsssec (abfd) == NULL
&& !strcmp (newsect->name, ".bss"))
{
obj_bsssec (abfd) = newsect;
newsect->target_index = N_BSS;
}
}
/* We allow more than three sections internally. */
return TRUE;
return _bfd_generic_new_section_hook (abfd, newsect);
}
bfd_boolean

View File

@ -540,11 +540,6 @@ CODE_FRAGMENT
. || ((SEC) == bfd_com_section_ptr) \
. || ((SEC) == bfd_ind_section_ptr))
.
.extern const struct bfd_symbol * const bfd_abs_symbol;
.extern const struct bfd_symbol * const bfd_com_symbol;
.extern const struct bfd_symbol * const bfd_und_symbol;
.extern const struct bfd_symbol * const bfd_ind_symbol;
.
.{* 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. *}
@ -635,7 +630,7 @@ CODE_FRAGMENT
.#define bfd_section_removed_from_list(ABFD, S) \
. ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
.
.#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, SYM_PTR, NAME, IDX) \
.#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
. {* name, id, index, next, prev, flags, user_set_vma, *} \
. { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
. \
@ -666,11 +661,8 @@ CODE_FRAGMENT
. {* target_index, used_by_bfd, constructor_chain, owner, *} \
. 0, NULL, NULL, NULL, \
. \
. {* symbol, *} \
. (struct bfd_symbol *) SYM, \
. \
. {* symbol_ptr_ptr, *} \
. (struct bfd_symbol **) SYM_PTR, \
. {* symbol, symbol_ptr_ptr, *} \
. (struct bfd_symbol *) SYM, &SEC.symbol, \
. \
. {* map_head, map_tail *} \
. { NULL }, { NULL } \
@ -701,16 +693,14 @@ static const asymbol global_syms[] =
GLOBAL_SYM_INIT (BFD_IND_SECTION_NAME, &bfd_ind_section)
};
#define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
const asymbol * const SYM = (asymbol *) &global_syms[IDX]; \
asection SEC = BFD_FAKE_SECTION(SEC, FLAGS, &global_syms[IDX], &SYM, \
#define STD_SECTION(SEC, FLAGS, NAME, IDX) \
asection SEC = BFD_FAKE_SECTION(SEC, FLAGS, &global_syms[IDX], \
NAME, IDX)
STD_SECTION (bfd_com_section, SEC_IS_COMMON, bfd_com_symbol,
BFD_COM_SECTION_NAME, 0);
STD_SECTION (bfd_und_section, 0, bfd_und_symbol, BFD_UND_SECTION_NAME, 1);
STD_SECTION (bfd_abs_section, 0, bfd_abs_symbol, BFD_ABS_SECTION_NAME, 2);
STD_SECTION (bfd_ind_section, 0, bfd_ind_symbol, BFD_IND_SECTION_NAME, 3);
STD_SECTION (bfd_com_section, SEC_IS_COMMON, BFD_COM_SECTION_NAME, 0);
STD_SECTION (bfd_und_section, 0, BFD_UND_SECTION_NAME, 1);
STD_SECTION (bfd_abs_section, 0, BFD_ABS_SECTION_NAME, 2);
STD_SECTION (bfd_ind_section, 0, BFD_IND_SECTION_NAME, 3);
#undef STD_SECTION
/* Initialize an entry in the section hash table. */
@ -743,6 +733,26 @@ bfd_section_hash_newfunc (struct bfd_hash_entry *entry,
((struct section_hash_entry *) \
bfd_hash_lookup ((table), (string), (create), (copy)))
/* 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
of a section. */
bfd_boolean
_bfd_generic_new_section_hook (bfd *abfd, asection *newsect)
{
newsect->symbol = bfd_make_empty_symbol (abfd);
if (newsect->symbol == NULL)
return FALSE;
newsect->symbol->name = newsect->name;
newsect->symbol->value = 0;
newsect->symbol->section = newsect;
newsect->symbol->flags = BSF_SECTION_SYM;
newsect->symbol_ptr_ptr = &newsect->symbol;
return TRUE;
}
/* Initializes a new section. NEWSECT->NAME is already set. */
static asection *
@ -754,20 +764,6 @@ bfd_section_init (bfd *abfd, asection *newsect)
newsect->index = abfd->section_count;
newsect->owner = abfd;
/* 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
of a section. */
newsect->symbol = bfd_make_empty_symbol (abfd);
if (newsect->symbol == NULL)
return NULL;
newsect->symbol->name = newsect->name;
newsect->symbol->value = 0;
newsect->symbol->section = newsect;
newsect->symbol->flags = BSF_SECTION_SYM;
newsect->symbol_ptr_ptr = &newsect->symbol;
if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect)))
return NULL;
@ -964,7 +960,6 @@ DESCRIPTION
asection *
bfd_make_section_old_way (bfd *abfd, const char *name)
{
struct section_hash_entry *sh;
asection *newsect;
if (abfd->output_has_begun)
@ -974,30 +969,38 @@ bfd_make_section_old_way (bfd *abfd, const char *name)
}
if (strcmp (name, BFD_ABS_SECTION_NAME) == 0)
return bfd_abs_section_ptr;
if (strcmp (name, BFD_COM_SECTION_NAME) == 0)
return bfd_com_section_ptr;
if (strcmp (name, BFD_UND_SECTION_NAME) == 0)
return bfd_und_section_ptr;
if (strcmp (name, BFD_IND_SECTION_NAME) == 0)
return bfd_ind_section_ptr;
sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
if (sh == NULL)
return NULL;
newsect = &sh->section;
if (newsect->name != NULL)
newsect = bfd_abs_section_ptr;
else if (strcmp (name, BFD_COM_SECTION_NAME) == 0)
newsect = bfd_com_section_ptr;
else if (strcmp (name, BFD_UND_SECTION_NAME) == 0)
newsect = bfd_und_section_ptr;
else if (strcmp (name, BFD_IND_SECTION_NAME) == 0)
newsect = bfd_ind_section_ptr;
else
{
/* Section already exists. */
return newsect;
struct section_hash_entry *sh;
sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
if (sh == NULL)
return NULL;
newsect = &sh->section;
if (newsect->name != NULL)
{
/* Section already exists. */
return newsect;
}
newsect->name = name;
return bfd_section_init (abfd, newsect);
}
newsect->name = name;
return bfd_section_init (abfd, newsect);
/* Call new_section_hook when "creating" the standard abs, com, und
and ind sections to tack on format specific section data.
Also, create a proper section symbol. */
if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect)))
return NULL;
return newsect;
}
/*

View File

@ -1,6 +1,6 @@
/* bfd back-end for HP PA-RISC SOM objects.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005
2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by the Center for Software Science at the
@ -4959,15 +4959,18 @@ extern const bfd_target som_vec;
static bfd_boolean
som_new_section_hook (bfd *abfd, asection *newsect)
{
bfd_size_type amt = sizeof (struct som_section_data_struct);
newsect->used_by_bfd = bfd_zalloc (abfd, amt);
if (!newsect->used_by_bfd)
return FALSE;
{
bfd_size_type amt = sizeof (struct som_section_data_struct);
newsect->used_by_bfd = bfd_zalloc (abfd, amt);
if (!newsect->used_by_bfd)
return FALSE;
}
newsect->alignment_power = 3;
/* We allow more than three sections internally. */
return TRUE;
return _bfd_generic_new_section_hook (abfd, newsect);
}
/* Copy any private info we understand from the input symbol

View File

@ -487,7 +487,7 @@ vms_new_section_hook (bfd * abfd, asection *section)
vms_debug (7, "%d: %s\n", section->index, section->name);
#endif
return TRUE;
return _bfd_generic_new_section_hook (abfd, section);
}
/* Read the contents of a section.

View File

@ -1,3 +1,10 @@
2006-05-03 Alan Modra <amodra@bigpond.net.au>
* subsegs.c (subseg_get): Don't call obj_sec_set_private_data.
* config/obj-elf.h (obj_sec_set_private_data): Delete.
* config/tc-hppa.c (tc_gen_reloc): Don't use bfd_abs_symbol.
* config/tc-mn10300.c (tc_gen_reloc): Likewise.
2006-05-02 Joseph Myers <joseph@codesourcery.com>
* config/tc-arm.c (do_iwmmxt_wldstbh): Don't multiply offset by 4

View File

@ -134,13 +134,6 @@ int elf_s_get_other (symbolS *);
extern asection *gdb_section;
#ifndef obj_sec_set_private_data
#define obj_sec_set_private_data(B, S) \
if (! BFD_SEND ((B), _new_section_hook, ((B), (S)))) \
as_fatal (_("can't allocate ELF private section data: %s"), \
bfd_errmsg (bfd_get_error ()))
#endif
#ifndef obj_frob_file
#define obj_frob_file elf_frob_file
#endif

View File

@ -1,6 +1,6 @@
/* tc-hppa.c -- Assemble for the PA
Copyright 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005 Free Software Foundation, Inc.
2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@ -4196,36 +4196,39 @@ tc_gen_reloc (section, fixp)
of two symbols. With that in mind we fill in all four
relocs now and break out of the loop. */
assert (i == 1);
relocs[0]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
relocs[0]->howto =
bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[0]);
relocs[0]->sym_ptr_ptr
= (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
relocs[0]->howto
= bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[0]);
relocs[0]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[0]->addend = 0;
relocs[1]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
*relocs[1]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[1]->howto =
bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[1]);
relocs[1]->howto
= bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[1]);
relocs[1]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[1]->addend = 0;
relocs[2]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
*relocs[2]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_subsy);
relocs[2]->howto =
bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[2]);
relocs[2]->howto
= bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[2]);
relocs[2]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[2]->addend = 0;
relocs[3]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
relocs[3]->howto =
bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[3]);
relocs[3]->sym_ptr_ptr
= (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
relocs[3]->howto
= bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[3]);
relocs[3]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[3]->addend = 0;
relocs[4]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
relocs[4]->howto =
bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[4]);
relocs[4]->sym_ptr_ptr
= (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
relocs[4]->howto
= bfd_reloc_type_lookup (stdoutput,
(bfd_reloc_code_real_type) *codes[4]);
relocs[4]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[4]->addend = 0;
goto done;

View File

@ -2407,7 +2407,8 @@ tc_gen_reloc (seg, fixp)
break;
default:
reloc->sym_ptr_ptr = (asymbol **) &bfd_abs_symbol;
reloc->sym_ptr_ptr
= (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
return reloc;
}
}

View File

@ -1,6 +1,6 @@
/* subsegs.c - subsegments -
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@ -244,10 +244,6 @@ subseg_get (const char *segname, int force_new)
else
secptr = bfd_make_section_anyway (stdoutput, segname);
#ifdef obj_sec_set_private_data
obj_sec_set_private_data (stdoutput, secptr);
#endif
seginfo = seg_info (secptr);
if (! seginfo)
{