diff options
author | Alan Modra <amodra@bigpond.net.au> | 2008-02-15 03:35:52 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2008-02-15 03:35:52 +0000 |
commit | 2d2ce93000384da04f53d74552eac532d71d4e55 (patch) | |
tree | 476b36d2a89ad0f361a4072c2c261c186e760dcd | |
parent | 1e7288f810c99e86696847e3734ed39760f3b2d6 (diff) | |
download | gdb-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/ChangeLog | 21 | ||||
-rw-r--r-- | bfd/coff-h8300.c | 8 | ||||
-rw-r--r-- | bfd/cofflink.c | 6 | ||||
-rw-r--r-- | bfd/ecoff.c | 2 | ||||
-rw-r--r-- | bfd/elf32-m68hc1x.c | 4 | ||||
-rw-r--r-- | bfd/elf32-ppc.c | 2 | ||||
-rw-r--r-- | bfd/elf64-alpha.c | 2 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 2 | ||||
-rw-r--r-- | bfd/elf64-sparc.c | 6 | ||||
-rw-r--r-- | bfd/elflink.c | 8 | ||||
-rw-r--r-- | bfd/elfxx-mips.c | 2 | ||||
-rw-r--r-- | bfd/i386linux.c | 12 | ||||
-rw-r--r-- | bfd/linker.c | 17 | ||||
-rw-r--r-- | bfd/m68klinux.c | 12 | ||||
-rw-r--r-- | bfd/sparclinux.c | 12 | ||||
-rw-r--r-- | bfd/sunos.c | 13 | ||||
-rw-r--r-- | bfd/xcofflink.c | 28 | ||||
-rw-r--r-- | include/ChangeLog | 5 | ||||
-rw-r--r-- | include/bfdlink.h | 10 |
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; |