bfd/
* 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:
parent
81fc501adb
commit
f592407e4d
@ -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.
|
||||
|
11
bfd/aoutx.h
11
bfd/aoutx.h
@ -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
|
||||
|
@ -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 } \
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
20
bfd/mmo.c
20
bfd/mmo.c
@ -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
|
||||
|
12
bfd/oasys.c
12
bfd/oasys.c
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
35
bfd/pdp11.c
35
bfd/pdp11.c
@ -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
|
||||
|
113
bfd/section.c
113
bfd/section.c
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
15
bfd/som.c
15
bfd/som.c
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user