summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2008-02-15 03:35:52 +0000
committerAlan Modra <amodra@bigpond.net.au>2008-02-15 03:35:52 +0000
commit2d2ce93000384da04f53d74552eac532d71d4e55 (patch)
tree476b36d2a89ad0f361a4072c2c261c186e760dcd
parent1e7288f810c99e86696847e3734ed39760f3b2d6 (diff)
downloadgdb-2d2ce93000384da04f53d74552eac532d71d4e55.tar.gz
include/
* bfdlink.h (struct bfd_link_hash_table): Delete creator field. (struct bfd_link_info): Add output_bfd. bfd/ * elflink.c: Replace all accesses to hash->creator field with output_bfd->xvec. * cofflink.c: Likewise. * coff-h8300.c: Likewise. * ecoff.c: Likewise. * elf32-m68hc1x.c: Likewise. * elf32-ppc.c: Likewise. * elf64-alpha.c: Likewise. * elf64-ppc.c: Likewise. * elf64-sparc.c: Likewise. * elfxx-mips.c: Likewise. * i386linux.c: Likewise. * m68klinux.c: Likewise. * sparclinux.c: Likewise. * sunos.c: Likewise. * xcofflink.c: Likewise. * linker.c: Likewise. (_bfd_link_hash_table_init): Don't store creator. ld/ * ldmain.h (output_bfd): Delete. * ldmain.c (output_bfd): Delete. Replace all occurrences of output_bfd with link_info.output_bfd. * ldcref.c: Likewise. * ldctor.c: Likewise. * ldemul.c: Likewise. * ldexp.c: Likewise. * ldfile.c: Likewise. * ldlang.c: Likewise. * ldmisc.c: Likewise. * ldwrite.c: Likewise. * pe-dll.c: Likewise. * emultempl/aix.em: Likewise. * emultempl/alphaelf.em: Likewise. * emultempl/armcoff.em: Likewise. * emultempl/armelf.em: Likewise. * emultempl/avrelf.em: Likewise. * emultempl/beos.em: Likewise. * emultempl/elf-generic.em: Likewise. * emultempl/elf32.em: Likewise. * emultempl/gld960.em: Likewise. * emultempl/hppaelf.em: Likewise. * emultempl/irix.em: Likewise. * emultempl/linux.em: Likewise. * emultempl/lnk960.em: Likewise. * emultempl/m68hc1xelf.em: Likewise. * emultempl/mmix-elfnmmo.em: Likewise. * emultempl/mmo.em: Likewise. * emultempl/pe.em: Likewise. * emultempl/pep.em: Likewise. * emultempl/ppc32elf.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/scoreelf.em: Likewise. * emultempl/sh64elf.em: Likewise. * emultempl/spuelf.em: Likewise. * emultempl/sunos.em: Likewise. * emultempl/vanilla.em: Likewise. * emultempl/vxworks.em: Likewise. * emultempl/xtensaelf.em: Likewise. * emultempl/z80.em: Likewise. * ldlang.c (open_output): Don't return output, instead write link_info_output_bfd directly. * emultempl/alphaelf.em: Replace occurrences of link_info.hash->creator with link_info.output_bfd->xvec. * emultempl/hppaelf.em: Likewise. * emultempl/ppc32elf.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/spuelf.em: Likewise.
-rw-r--r--bfd/ChangeLog21
-rw-r--r--bfd/coff-h8300.c8
-rw-r--r--bfd/cofflink.c6
-rw-r--r--bfd/ecoff.c2
-rw-r--r--bfd/elf32-m68hc1x.c4
-rw-r--r--bfd/elf32-ppc.c2
-rw-r--r--bfd/elf64-alpha.c2
-rw-r--r--bfd/elf64-ppc.c2
-rw-r--r--bfd/elf64-sparc.c6
-rw-r--r--bfd/elflink.c8
-rw-r--r--bfd/elfxx-mips.c2
-rw-r--r--bfd/i386linux.c12
-rw-r--r--bfd/linker.c17
-rw-r--r--bfd/m68klinux.c12
-rw-r--r--bfd/sparclinux.c12
-rw-r--r--bfd/sunos.c13
-rw-r--r--bfd/xcofflink.c28
-rw-r--r--include/ChangeLog5
-rw-r--r--include/bfdlink.h10
19 files changed, 98 insertions, 74 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 2b415efc474..d629360e93f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,24 @@
+2008-02-15 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c: Replace all accesses to hash->creator field with
+ output_bfd->xvec.
+ * cofflink.c: Likewise.
+ * coff-h8300.c: Likewise.
+ * ecoff.c: Likewise.
+ * elf32-m68hc1x.c: Likewise.
+ * elf32-ppc.c: Likewise.
+ * elf64-alpha.c: Likewise.
+ * elf64-ppc.c: Likewise.
+ * elf64-sparc.c: Likewise.
+ * elfxx-mips.c: Likewise.
+ * i386linux.c: Likewise.
+ * m68klinux.c: Likewise.
+ * sparclinux.c: Likewise.
+ * sunos.c: Likewise.
+ * xcofflink.c: Likewise.
+ * linker.c: Likewise.
+ (_bfd_link_hash_table_init): Don't store creator.
+
2008-02-14 Peter Jones <pjones@redhat.com>
* efi-rtdrv-ia32.c: New file.
diff --git a/bfd/coff-h8300.c b/bfd/coff-h8300.c
index 0f8dbda1ea0..5ff87aec8f6 100644
--- a/bfd/coff-h8300.c
+++ b/bfd/coff-h8300.c
@@ -1,6 +1,6 @@
/* BFD back-end for Renesas H8/300 COFF binaries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Written by Steve Chamberlain, <sac@cygnus.com>.
@@ -1116,11 +1116,11 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
struct h8300_coff_link_hash_table *htab;
asection *vectors_sec;
- if (link_info->hash->creator != abfd->xvec)
+ if (link_info->output_bfd->xvec != abfd->xvec)
{
(*_bfd_error_handler)
(_("cannot handle R_MEM_INDIRECT reloc when using %s output"),
- link_info->hash->creator->name);
+ link_info->output_bfd->xvec->name);
/* What else can we do? This function doesn't allow return
of an error, and we don't want to call abort as that
@@ -1264,7 +1264,7 @@ h8300_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
/* Add the symbols using the generic code. */
_bfd_generic_link_add_symbols (abfd, info);
- if (info->hash->creator != abfd->xvec)
+ if (info->output_bfd->xvec != abfd->xvec)
return TRUE;
htab = h8300_coff_hash_table (info);
diff --git a/bfd/cofflink.c b/bfd/cofflink.c
index c6ca5595fc3..19a7dd2b69a 100644
--- a/bfd/cofflink.c
+++ b/bfd/cofflink.c
@@ -1,6 +1,6 @@
/* COFF specific linker code.
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -482,7 +482,7 @@ coff_link_add_symbols (bfd *abfd,
(*sym_hash)->root.u.c.p->alignment_power
= bfd_coff_default_section_alignment_power (abfd);
- if (info->hash->creator->flavour == bfd_get_flavour (abfd))
+ if (bfd_get_flavour (info->output_bfd) == bfd_get_flavour (abfd))
{
/* If we don't have any symbol information currently in
the hash table, or if we are looking at a symbol
@@ -574,7 +574,7 @@ coff_link_add_symbols (bfd *abfd,
optimize the handling of any .stab/.stabstr sections. */
if (! info->relocatable
&& ! info->traditional_format
- && info->hash->creator->flavour == bfd_get_flavour (abfd)
+ && bfd_get_flavour (info->output_bfd) == bfd_get_flavour (abfd)
&& (info->strip != strip_all && info->strip != strip_debugger))
{
asection *stabstr;
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
index ead1f9bb2ad..9b2a1c933de 100644
--- a/bfd/ecoff.c
+++ b/bfd/ecoff.c
@@ -3402,7 +3402,7 @@ ecoff_link_add_externals (bfd *abfd,
/* If we are building an ECOFF hash table, save the external
symbol information. */
- if (info->hash->creator->flavour == bfd_get_flavour (abfd))
+ if (bfd_get_flavour (info->output_bfd) == bfd_get_flavour (abfd))
{
if (h->abfd == NULL
|| (! bfd_is_und_section (section)
diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c
index 6fb5129926d..9ad82b6e19e 100644
--- a/bfd/elf32-m68hc1x.c
+++ b/bfd/elf32-m68hc1x.c
@@ -1,5 +1,5 @@
/* Motorola 68HC11/HC12-specific support for 32-bit ELF
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Contributed by Stephane Carrez (stcarrez@nerim.fr)
@@ -232,7 +232,7 @@ elf32_m68hc11_setup_section_lists (bfd *output_bfd, struct bfd_link_info *info)
htab = m68hc11_elf_hash_table (info);
- if (htab->root.root.creator->flavour != bfd_target_elf_flavour)
+ if (bfd_get_flavour (info->output_bfd) != bfd_target_elf_flavour)
return 0;
/* Count the number of input BFDs and find the top input section id.
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 520f991162d..2dedefdb2d7 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -2772,7 +2772,7 @@ ppc_elf_add_symbol_hook (bfd *abfd,
if (sym->st_shndx == SHN_COMMON
&& !info->relocatable
&& sym->st_size <= elf_gp_size (abfd)
- && is_ppc_elf_target (info->hash->creator))
+ && is_ppc_elf_target (info->output_bfd->xvec))
{
/* Common symbols less than or equal to -G nn bytes are automatically
put into .sbss. */
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index 94a7ed010aa..308b4e9c70f 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -3104,7 +3104,7 @@ elf64_alpha_relax_opt_call (struct alpha_relax_info *info, bfd_vma symval)
/* We've now determined that we can skip an initial gp load. Verify
that the call and the target use the same gp. */
- if (info->link_info->hash->creator != info->tsec->owner->xvec
+ if (info->link_info->output_bfd->xvec != info->tsec->owner->xvec
|| info->gotobj != alpha_elf_tdata (info->tsec->owner)->gotobj)
return 0;
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 0dae3d75e59..35d6b640017 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -4275,7 +4275,7 @@ ppc64_elf_check_directives (bfd *ibfd, struct bfd_link_info *info)
struct ppc_link_hash_entry **p, *eh;
htab = ppc_hash_table (info);
- if (!is_ppc64_elf_target (htab->elf.root.creator))
+ if (!is_ppc64_elf_target (info->output_bfd->xvec))
return TRUE;
if (is_ppc64_elf_target (ibfd->xvec))
diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c
index a93097f0027..df3fb8bb80f 100644
--- a/bfd/elf64-sparc.c
+++ b/bfd/elf64-sparc.c
@@ -1,6 +1,6 @@
/* SPARC-specific support for 64-bit ELF
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -441,7 +441,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
return FALSE;
}
- if (info->hash->creator != abfd->xvec
+ if (info->output_bfd->xvec != abfd->xvec
|| (abfd->flags & DYNAMIC) != 0)
{
/* STT_REGISTER only works when linking an elf64_sparc object.
@@ -510,7 +510,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
return TRUE;
}
else if (*namep && **namep
- && info->hash->creator == abfd->xvec)
+ && info->output_bfd->xvec == abfd->xvec)
{
int i;
struct _bfd_sparc_elf_app_reg *p;
diff --git a/bfd/elflink.c b/bfd/elflink.c
index a0bd0df41a6..a00634be52b 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -884,7 +884,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
/* This code is for coping with dynamic objects, and is only useful
if we are doing an ELF link. */
- if (info->hash->creator != abfd->xvec)
+ if (info->output_bfd->xvec != abfd->xvec)
return TRUE;
/* For merging, we only care about real symbols. */
@@ -3336,7 +3336,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
the format of the output file. */
if (info->relocatable
|| !is_elf_hash_table (htab)
- || htab->root.creator != abfd->xvec)
+ || info->output_bfd->xvec != abfd->xvec)
{
if (info->relocatable)
bfd_set_error (bfd_error_invalid_operation);
@@ -3433,7 +3433,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
format as the output, we can't make a shared library. */
if (info->shared
&& is_elf_hash_table (htab)
- && htab->root.creator == abfd->xvec
+ && info->output_bfd->xvec == abfd->xvec
&& !htab->dynamic_sections_created)
{
if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
@@ -4674,7 +4674,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
if (! dynamic
&& is_elf_hash_table (htab)
&& bed->check_relocs != NULL
- && (*bed->relocs_compatible) (abfd->xvec, htab->root.creator))
+ && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
{
asection *o;
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index 1b24ee5d454..514b14cfe76 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -6083,7 +6083,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
if (SGI_COMPAT (abfd)
&& ! info->shared
- && info->hash->creator == abfd->xvec
+ && info->output_bfd->xvec == abfd->xvec
&& strcmp (*namep, "__rld_obj_head") == 0)
{
struct elf_link_hash_entry *h;
diff --git a/bfd/i386linux.c b/bfd/i386linux.c
index 52cc36eea89..0f18789ddd5 100644
--- a/bfd/i386linux.c
+++ b/bfd/i386linux.c
@@ -1,6 +1,6 @@
/* BFD back-end for linux flavored i386 a.out binaries.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001, 2002, 2003,
- 2004, 2006, 2007 Free Software Foundation, Inc.
+ 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -346,9 +346,9 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
If we do, and the defining entry is from a shared library, we
need to create the dynamic sections.
- FIXME: What if abfd->xvec != info->hash->creator? We may want to
- be able to link Linux a.out and ELF objects together, but serious
- confusion is possible. */
+ FIXME: What if abfd->xvec != info->output_bfd->xvec? We may
+ want to be able to link Linux a.out and ELF objects together,
+ but serious confusion is possible. */
insert = FALSE;
@@ -356,7 +356,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
&& linux_hash_table (info)->dynobj == NULL
&& strcmp (name, SHARABLE_CONFLICTS) == 0
&& (flags & BSF_CONSTRUCTOR) != 0
- && abfd->xvec == info->hash->creator)
+ && abfd->xvec == info->output_bfd->xvec)
{
if (! linux_link_create_dynamic_sections (abfd, info))
return FALSE;
@@ -365,7 +365,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
}
if (bfd_is_abs_section (section)
- && abfd->xvec == info->hash->creator)
+ && abfd->xvec == info->output_bfd->xvec)
{
h = linux_link_hash_lookup (linux_hash_table (info), name, FALSE,
FALSE, FALSE);
diff --git a/bfd/linker.c b/bfd/linker.c
index fb293cca71f..327426e3c51 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -1,6 +1,6 @@
/* linker.c -- BFD linker routines
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007
+ 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support
@@ -151,9 +151,9 @@ SUBSUBSECTION
Sometimes the <<_bfd_link_add_symbols>> function must store
some information in the hash table entry to be used by the
- <<_bfd_final_link>> function. In such a case the <<creator>>
- field of the hash table must be checked to make sure that the
- hash table was created by an object file of the same format.
+ <<_bfd_final_link>> function. In such a case the output bfd
+ xvec must be checked to make sure that the hash table was
+ created by an object file of the same format.
The <<_bfd_final_link>> routine must be prepared to handle a
hash entry without any extra information added by the
@@ -165,7 +165,7 @@ SUBSUBSECTION
initialization function.
See <<ecoff_link_add_externals>> for an example of how to
- check the <<creator>> field before saving information (in this
+ check the output bfd before saving information (in this
case, the ECOFF external symbol debugging information) in a
hash table entry.
@@ -471,13 +471,12 @@ _bfd_link_hash_newfunc (struct bfd_hash_entry *entry,
bfd_boolean
_bfd_link_hash_table_init
(struct bfd_link_hash_table *table,
- bfd *abfd,
+ bfd *abfd ATTRIBUTE_UNUSED,
struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
struct bfd_hash_table *,
const char *),
unsigned int entsize)
{
- table->creator = abfd->xvec;
table->undefs = NULL;
table->undefs_tail = NULL;
table->type = bfd_link_generic_hash_table;
@@ -1359,7 +1358,7 @@ generic_link_add_symbol_list (bfd *abfd,
hash table other than the generic hash table, so we only
do this if we are certain that the hash table is a
generic one. */
- if (info->hash->creator == abfd->xvec)
+ if (info->output_bfd->xvec == abfd->xvec)
{
if (h->sym == NULL
|| (! bfd_is_und_section (bfd_get_section (p))
@@ -2243,7 +2242,7 @@ _bfd_generic_link_output_symbols (bfd *output_bfd,
this routine will be called with a hash table
other than a generic hash table, so we double
check that. */
- if (info->hash->creator == input_bfd->xvec)
+ if (info->output_bfd->xvec == input_bfd->xvec)
{
if (h->sym != NULL)
*sym_ptr = sym = h->sym;
diff --git a/bfd/m68klinux.c b/bfd/m68klinux.c
index 61445d0dc18..d56c431f78b 100644
--- a/bfd/m68klinux.c
+++ b/bfd/m68klinux.c
@@ -1,6 +1,6 @@
/* BFD back-end for linux flavored m68k a.out binaries.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
- 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
+ 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -350,9 +350,9 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
If we do, and the defining entry is from a shared library, we
need to create the dynamic sections.
- FIXME: What if abfd->xvec != info->hash->creator? We may want to
- be able to link Linux a.out and ELF objects together, but serious
- confusion is possible. */
+ FIXME: What if abfd->xvec != info->output_bfd->xvec? We may
+ want to be able to link Linux a.out and ELF objects together,
+ but serious confusion is possible. */
insert = FALSE;
@@ -360,7 +360,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
&& linux_hash_table (info)->dynobj == NULL
&& strcmp (name, SHARABLE_CONFLICTS) == 0
&& (flags & BSF_CONSTRUCTOR) != 0
- && abfd->xvec == info->hash->creator)
+ && abfd->xvec == info->output_bfd->xvec)
{
if (! linux_link_create_dynamic_sections (abfd, info))
return FALSE;
@@ -369,7 +369,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
}
if (bfd_is_abs_section (section)
- && abfd->xvec == info->hash->creator)
+ && abfd->xvec == info->output_bfd->xvec)
{
h = linux_link_hash_lookup (linux_hash_table (info), name, FALSE,
FALSE, FALSE);
diff --git a/bfd/sparclinux.c b/bfd/sparclinux.c
index 4144ce75ac3..c7e02995238 100644
--- a/bfd/sparclinux.c
+++ b/bfd/sparclinux.c
@@ -1,6 +1,6 @@
/* BFD back-end for linux flavored sparc a.out binaries.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
- 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
+ 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -346,9 +346,9 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
If we do, and the defining entry is from a shared library, we
need to create the dynamic sections.
- FIXME: What if abfd->xvec != info->hash->creator? We may want to
- be able to link Linux a.out and ELF objects together, but serious
- confusion is possible. */
+ FIXME: What if abfd->xvec != info->output_bfd->xvec? We may
+ want to be able to link Linux a.out and ELF objects together,
+ but serious confusion is possible. */
insert = FALSE;
@@ -356,7 +356,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
&& linux_hash_table (info)->dynobj == NULL
&& strcmp (name, SHARABLE_CONFLICTS) == 0
&& (flags & BSF_CONSTRUCTOR) != 0
- && abfd->xvec == info->hash->creator)
+ && abfd->xvec == info->output_bfd->xvec)
{
if (! linux_link_create_dynamic_sections (abfd, info))
return FALSE;
@@ -365,7 +365,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
}
if (bfd_is_abs_section (section)
- && abfd->xvec == info->hash->creator)
+ && abfd->xvec == info->output_bfd->xvec)
{
h = linux_link_hash_lookup (linux_hash_table (info), name, FALSE,
FALSE, FALSE);
diff --git a/bfd/sunos.c b/bfd/sunos.c
index 1c17dce275a..67880b2ce62 100644
--- a/bfd/sunos.c
+++ b/bfd/sunos.c
@@ -1,6 +1,7 @@
/* BFD backend for SunOS binaries.
Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -829,7 +830,7 @@ sunos_add_dynamic_symbols (bfd *abfd,
unsigned long need;
/* Make sure we have all the required sections. */
- if (info->hash->creator == abfd->xvec)
+ if (info->output_bfd->xvec == abfd->xvec)
{
if (! sunos_create_dynamic_sections (abfd, info,
((abfd->flags & DYNAMIC) != 0
@@ -870,7 +871,7 @@ sunos_add_dynamic_symbols (bfd *abfd,
/* There's no hope of using a dynamic object which does not exactly
match the format of the output file. */
- if (info->hash->creator != abfd->xvec)
+ if (info->output_bfd->xvec != abfd->xvec)
{
bfd_set_error (bfd_error_invalid_operation);
return FALSE;
@@ -1121,7 +1122,7 @@ sunos_add_one_symbol (struct bfd_link_info *info,
}
if ((abfd->flags & DYNAMIC) != 0
- && abfd->xvec == info->hash->creator
+ && abfd->xvec == info->output_bfd->xvec
&& (h->flags & SUNOS_CONSTRUCTOR) != 0)
/* The existing symbol is a constructor symbol, and this symbol
is from a dynamic object. A constructor symbol is actually a
@@ -1145,7 +1146,7 @@ sunos_add_one_symbol (struct bfd_link_info *info,
hashp))
return FALSE;
- if (abfd->xvec == info->hash->creator)
+ if (abfd->xvec == info->output_bfd->xvec)
{
/* Set a flag in the hash table entry indicating the type of
reference or definition we just found. Keep a count of the
@@ -1191,7 +1192,7 @@ struct bfd_link_needed_list *
bfd_sunos_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
struct bfd_link_info *info)
{
- if (info->hash->creator != &MY (vec))
+ if (info->output_bfd->xvec != &MY (vec))
return NULL;
return sunos_hash_table (info)->needed;
}
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index f14c62b2846..21d9a2d9446 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -1,6 +1,6 @@
/* POWER/PowerPC XCOFF linker support.
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -560,7 +560,7 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info)
/* We can only handle a dynamic object if we are generating an XCOFF
output file. */
- if (info->hash->creator != abfd->xvec)
+ if (info->output_bfd->xvec != abfd->xvec)
{
(*_bfd_error_handler)
(_("%s: XCOFF shared object when not producing XCOFF output"),
@@ -786,7 +786,7 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
{
bfd_boolean return_value = FALSE;
- if (info->hash->creator == abfd->xvec)
+ if (info->output_bfd->xvec == abfd->xvec)
{
/* We need to build a .loader section, so we do it here. This
won't work if we're producing an XCOFF output file with no
@@ -1294,7 +1294,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
place. */
if (aux.x_csect.x_smclas == XMC_TC
&& sym.n_sclass == C_HIDEXT
- && info->hash->creator == abfd->xvec
+ && info->output_bfd->xvec == abfd->xvec
&& ((bfd_xcoff_is_xcoff32 (abfd)
&& aux.x_csect.x_scnlen.l == 4)
|| (bfd_xcoff_is_xcoff64 (abfd)
@@ -1664,7 +1664,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
shared object, which will cause symbol redefinitions,
although this is an easier case to detect. */
- if (info->hash->creator == abfd->xvec)
+ if (info->output_bfd->xvec == abfd->xvec)
{
if (! bfd_is_und_section (section))
*sym_hash = xcoff_link_hash_lookup (xcoff_hash_table (info),
@@ -1789,7 +1789,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
= csect->alignment_power;
}
- if (info->hash->creator == abfd->xvec)
+ if (info->output_bfd->xvec == abfd->xvec)
{
int flag;
@@ -1848,7 +1848,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
/* We identify all symbols which are called, so that we
can create glue code for calls to functions imported
from dynamic objects. */
- if (info->hash->creator == abfd->xvec
+ if (info->output_bfd->xvec == abfd->xvec
&& *rel_csect != bfd_und_section_ptr
&& (rel->r_type == R_BR
|| rel->r_type == R_RBR)
@@ -2066,7 +2066,7 @@ xcoff_link_check_ar_symbols (bfd *abfd,
if ((abfd->flags & DYNAMIC) != 0
&& ! info->static_link
- && info->hash->creator == abfd->xvec)
+ && info->output_bfd->xvec == abfd->xvec)
return xcoff_link_check_dynamic_ar_symbols (abfd, info, pneeded);
symesz = bfd_coff_symesz (abfd);
@@ -2099,7 +2099,7 @@ xcoff_link_check_ar_symbols (bfd *abfd,
undefined references in shared objects. */
if (h != NULL
&& h->type == bfd_link_hash_undefined
- && (info->hash->creator != abfd->xvec
+ && (info->output_bfd->xvec != abfd->xvec
|| (((struct xcoff_link_hash_entry *) h)->flags
& XCOFF_DEF_DYNAMIC) == 0))
{
@@ -2180,7 +2180,7 @@ _bfd_xcoff_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
while (member != NULL)
{
if (bfd_check_format (member, bfd_object)
- && (info->hash->creator == member->xvec)
+ && (info->output_bfd->xvec == member->xvec)
&& (! bfd_has_map (abfd) || (member->flags & DYNAMIC) != 0))
{
bfd_boolean needed;
@@ -2252,7 +2252,7 @@ xcoff_mark (struct bfd_link_info *info, asection *sec)
sec->flags |= SEC_MARK;
- if (sec->owner->xvec == info->hash->creator
+ if (sec->owner->xvec == info->output_bfd->xvec
&& coff_section_data (sec->owner, sec) != NULL
&& xcoff_section_data (sec->owner, sec) != NULL)
{
@@ -2386,7 +2386,7 @@ xcoff_sweep (struct bfd_link_info *info)
/* Keep all sections from non-XCOFF input files. Keep
special sections. Keep .debug sections for the
moment. */
- if (sub->xvec != info->hash->creator
+ if (sub->xvec != info->output_bfd->xvec
|| o == xcoff_hash_table (info)->debug_section
|| o == xcoff_hash_table (info)->loader_section
|| o == xcoff_hash_table (info)->linkage_section
@@ -2759,7 +2759,7 @@ xcoff_build_ldsyms (struct xcoff_link_hash_entry *h, void * p)
|| h->root.type == bfd_link_hash_defweak)
&& (h->root.u.def.section->owner == NULL
|| (h->root.u.def.section->owner->xvec
- != ldinfo->info->hash->creator)))
+ != ldinfo->info->output_bfd->xvec)))
h->flags |= XCOFF_MARK;
/* If this symbol is called and defined in a dynamic object, or it
@@ -3257,7 +3257,7 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
bfd_byte *esym, *esymend;
bfd_size_type symesz;
- if (sub->xvec != info->hash->creator)
+ if (sub->xvec != info->output_bfd->xvec)
continue;
subdeb = bfd_get_section_by_name (sub, ".debug");
if (subdeb == NULL || subdeb->size == 0)
diff --git a/include/ChangeLog b/include/ChangeLog
index 6a8cac152a2..fd6c3d232ed 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-15 Alan Modra <amodra@bigpond.net.au>
+
+ * bfdlink.h (struct bfd_link_hash_table): Delete creator field.
+ (struct bfd_link_info): Add output_bfd.
+
2008-02-11 Bob Wilson <bob.wilson@acm.org>
* xtensa-config.h (XCHAL_HAVE_THREADPTR): Redefine to zero.
diff --git a/include/bfdlink.h b/include/bfdlink.h
index 66cec0189a4..bcd4b4fc3e6 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -1,6 +1,6 @@
/* bfdlink.h -- header file for BFD link routines
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -160,11 +160,6 @@ struct bfd_link_hash_table
{
/* The hash table itself. */
struct bfd_hash_table table;
- /* The back end which created this hash table. This indicates the
- type of the entries in the hash table, which is sometimes
- important information when linking object files of different
- types together. */
- const bfd_target *creator;
/* A linked list of undefined and common symbols, linked through the
next field in the bfd_link_hash_entry structure. */
struct bfd_link_hash_entry *undefs;
@@ -396,6 +391,9 @@ struct bfd_link_info
option). If this is NULL, no symbols are being wrapped. */
struct bfd_hash_table *wrap_hash;
+ /* The output BFD. */
+ bfd *output_bfd;
+
/* The list of input BFD's involved in the link. These are chained
together via the link_next field. */
bfd *input_bfds;