This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Don't always build coffgen.o


Removes a bunch of unused functions from libbfd when building ELF or
AOUT.  Split off the bits we need externally when not building a COFF
target into coff-bfd.c and coff-bfd.h.

bfd/
	* Makefile.am (BFD32_LIBS, BFD32_LIBS_CFILES): Remove dwarf2
	and coffgen.  Add coff-bfd.  Sort.
	(BFD32_BACKENDS, BFD32_BACKENDS_CFILES): Add coffgen and dwarf2.
	* bfd-in.h (bfd_coff_get_syment, bfd_coff_get_auxent): Delete.
	(struct coff_comdat_info, bfd_coff_get_comdat_section): Delete.
	* coffgen.c (coff_symbol_from): Move to coff-bfd.h as macro,
	without unused param.  Update uses.
	(bfd_coff_get_comdat_section): Move to coff-bfd.h as macro.
	(bfd_coff_get_syment, bfd_coff_get_auxent): Move to coff-bfd.c.
	* libcoff-in.h: #include "coff-bfd.h".
	(struct coff_section_tdata, coff_section_data): Move to coff-bfd.h.
	(coff_symbol_from): Delete.
	* coff-bfd.c: New file.
	* coff-bfd.h: New file.
	* coff-i386.c: Update coff_symbol_from occurrences.
	* coff-i960.c: Likewise.
	* coff-m68k.c: Likewise.
	* coff-sh.c: Likewise.
	* coff-x86_64.c: Likewise.
	* coffcode.h: Likewise.
	* pe-mips.c: Likewise.
	* configure.ac (elf): Add dwarf2.lo.
	(coffgen, coff, ecoff, xcoff): Define.  Use when mapping bfd
	target vectors to .o files.  Add dwarf2 for mach-o targets.
	Fix the sh target FIXME.
	* po/SRC-POTFILES.in: Regenerate.
	* Makefile.in: Regenerate.
	* configure: Regenerate.
	* bfd-in2.h: Regenerate.
	* libcoff.h: Regenerate.
binutils/
	* objdump.c: #include "coff-bfd.h".
ld/
	* ldmisc.c: #include "coff-bfd.h"

diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index cea3794..8aa8748 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -64,21 +64,19 @@ BFD_H = bfd.h
 # debugger).
 BFD32_LIBS = \
 	archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo \
-	cache.lo coffgen.lo corefile.lo \
-	format.lo init.lo libbfd.lo opncls.lo reloc.lo \
-	section.lo syms.lo targets.lo hash.lo linker.lo \
-	srec.lo binary.lo tekhex.lo ihex.lo stabs.lo stab-syms.lo \
-	merge.lo dwarf2.lo simple.lo compress.lo verilog.lo
+	cache.lo coff-bfd.lo compress.lo corefile.lo format.lo hash.lo \
+	init.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
+	section.lo simple.lo stab-syms.lo stabs.lo syms.lo targets.lo \
+	binary.lo ihex.lo srec.lo tekhex.lo verilog.lo
 
 BFD64_LIBS = archive64.lo
 
 BFD32_LIBS_CFILES = \
 	archive.c archures.c bfd.c bfdio.c bfdwin.c \
-	cache.c coffgen.c corefile.c \
-	format.c init.c libbfd.c opncls.c reloc.c \
-	section.c syms.c targets.c hash.c linker.c \
-	srec.c binary.c tekhex.c ihex.c stabs.c stab-syms.c \
-	merge.c dwarf2.c simple.c compress.c verilog.c
+	cache.c coff-bfd.c compress.c corefile.c format.c hash.c \
+	init.c libbfd.c linker.c merge.c opncls.c reloc.c \
+	section.c simple.c stab-syms.c stabs.c syms.c targets.c \
+	binary.c ihex.c srec.c tekhex.c verilog.c
 
 BFD64_LIBS_CFILES = archive64.c
 
@@ -295,8 +293,10 @@ BFD32_BACKENDS = \
 	coff-we32k.lo \
 	coff-z80.lo \
 	coff-z8k.lo \
+	coffgen.lo \
 	cofflink.lo \
 	dwarf1.lo \
+	dwarf2.lo \
 	ecoff.lo \
 	ecofflink.lo \
 	elf-attrs.lo \
@@ -483,8 +483,10 @@ BFD32_BACKENDS_CFILES = \
 	coff-we32k.c \
 	coff-z80.c \
 	coff-z8k.c \
+	coffgen.c \
 	cofflink.c \
 	dwarf1.c \
+	dwarf2.c \
 	ecoff.c \
 	ecofflink.c \
 	elf-attrs.c \
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index 1f80a76..0f2b57f 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -806,12 +806,6 @@ struct internal_syment;
 union internal_auxent;
 #endif
 
-extern bfd_boolean bfd_coff_get_syment
-  (bfd *, struct bfd_symbol *, struct internal_syment *);
-
-extern bfd_boolean bfd_coff_get_auxent
-  (bfd *, struct bfd_symbol *, int, union internal_auxent *);
-
 extern bfd_boolean bfd_coff_set_symbol_class
   (bfd *, struct bfd_symbol *, unsigned int);
 
@@ -991,23 +985,3 @@ extern void bfd_elf32_ia64_after_parse
 
 extern void bfd_elf64_ia64_after_parse
   (int);
-
-/* This structure is used for a comdat section, as in PE.  A comdat
-   section is associated with a particular symbol.  When the linker
-   sees a comdat section, it keeps only one of the sections with a
-   given name and associated with a given symbol.  */
-
-struct coff_comdat_info
-{
-  /* The name of the symbol associated with a comdat section.  */
-  const char *name;
-
-  /* The local symbol table index of the symbol associated with a
-     comdat section.  This is only meaningful to the object file format
-     specific code; it is not an index into the list returned by
-     bfd_canonicalize_symtab.  */
-  long symbol;
-};
-
-extern struct coff_comdat_info * bfd_coff_get_comdat_section
-  (bfd *, struct bfd_section *);
diff --git a/bfd/coff-bfd.c b/bfd/coff-bfd.c
new file mode 100644
index 0000000..81ecdf8
--- /dev/null
+++ b/bfd/coff-bfd.c
@@ -0,0 +1,99 @@
+/* BFD COFF interfaces used outside of BFD.
+   Copyright (C) 1990-2014 Free Software Foundation, Inc.
+   Written by Cygnus Support.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/internal.h"
+#include "libcoff.h"
+
+/* Return the COFF syment for a symbol.  */
+
+bfd_boolean
+bfd_coff_get_syment (bfd *abfd,
+		     asymbol *symbol,
+		     struct internal_syment *psyment)
+{
+  coff_symbol_type *csym;
+
+  csym = coff_symbol_from (symbol);
+  if (csym == NULL || csym->native == NULL
+      || ! csym->native->is_sym)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return FALSE;
+    }
+
+  *psyment = csym->native->u.syment;
+
+  if (csym->native->fix_value)
+    psyment->n_value = psyment->n_value -
+      (bfd_hostptr_t) obj_raw_syments (abfd);
+
+  /* FIXME: We should handle fix_line here.  */
+
+  return TRUE;
+}
+
+/* Return the COFF auxent for a symbol.  */
+
+bfd_boolean
+bfd_coff_get_auxent (bfd *abfd,
+		     asymbol *symbol,
+		     int indx,
+		     union internal_auxent *pauxent)
+{
+  coff_symbol_type *csym;
+  combined_entry_type *ent;
+
+  csym = coff_symbol_from (symbol);
+
+  if (csym == NULL
+      || csym->native == NULL
+      || ! csym->native->is_sym
+      || indx >= csym->native->u.syment.n_numaux)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return FALSE;
+    }
+
+  ent = csym->native + indx + 1;
+
+  BFD_ASSERT (! ent->is_sym);
+  *pauxent = ent->u.auxent;
+
+  if (ent->fix_tag)
+    pauxent->x_sym.x_tagndx.l =
+      ((combined_entry_type *) pauxent->x_sym.x_tagndx.p
+       - obj_raw_syments (abfd));
+
+  if (ent->fix_end)
+    pauxent->x_sym.x_fcnary.x_fcn.x_endndx.l =
+      ((combined_entry_type *) pauxent->x_sym.x_fcnary.x_fcn.x_endndx.p
+       - obj_raw_syments (abfd));
+
+  if (ent->fix_scnlen)
+    pauxent->x_csect.x_scnlen.l =
+      ((combined_entry_type *) pauxent->x_csect.x_scnlen.p
+       - obj_raw_syments (abfd));
+
+  return TRUE;
+}
diff --git a/bfd/coff-bfd.h b/bfd/coff-bfd.h
new file mode 100644
index 0000000..3e30ef3
--- /dev/null
+++ b/bfd/coff-bfd.h
@@ -0,0 +1,86 @@
+/* BFD COFF interfaces used outside of BFD.
+   Copyright (C) 1990-2014 Free Software Foundation, Inc.
+   Written by Cygnus Support.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+/* This structure is used for a comdat section, as in PE.  A comdat
+   section is associated with a particular symbol.  When the linker
+   sees a comdat section, it keeps only one of the sections with a
+   given name and associated with a given symbol.  */
+
+struct coff_comdat_info
+{
+  /* The name of the symbol associated with a comdat section.  */
+  const char *name;
+
+  /* The local symbol table index of the symbol associated with a
+     comdat section.  This is only meaningful to the object file format
+     specific code; it is not an index into the list returned by
+     bfd_canonicalize_symtab.  */
+  long symbol;
+};
+
+/* The used_by_bfd field of a section may be set to a pointer to this
+   structure.  */
+
+struct coff_section_tdata
+{
+  /* The relocs, swapped into COFF internal form.  This may be NULL.  */
+  struct internal_reloc *relocs;
+  /* If this is TRUE, the relocs entry may not be freed.  */
+  bfd_boolean keep_relocs;
+  /* The section contents.  This may be NULL.  */
+  bfd_byte *contents;
+  /* If this is TRUE, the contents entry may not be freed.  */
+  bfd_boolean keep_contents;
+  /* Information cached by coff_find_nearest_line.  */
+  bfd_vma offset;
+  unsigned int i;
+  const char *function;
+  /* Optional information about a COMDAT entry; NULL if not COMDAT. */
+  struct coff_comdat_info *comdat;
+  int line_base;
+  /* A pointer used for .stab linking optimizations.  */
+  void * stab_info;
+  /* Available for individual backends.  */
+  void * tdata;
+};
+
+/* An accessor macro for the coff_section_tdata structure.  */
+#define coff_section_data(abfd, sec) \
+  ((struct coff_section_tdata *) (sec)->used_by_bfd)
+
+#define bfd_coff_get_comdat_section(abfd, sec)		\
+  ((bfd_get_flavour (abfd) == bfd_target_coff_flavour	\
+    && coff_section_data (abfd, sec) != NULL)		\
+   ? coff_section_data (abfd, sec)->comdat : NULL)
+
+#define coff_symbol_from(symbol)			\
+  ((bfd_family_coff (bfd_asymbol_bfd (symbol))		\
+    && bfd_asymbol_bfd (symbol)->tdata.coff_obj_data)	\
+   ? (coff_symbol_type *) (symbol) : NULL)
+
+struct internal_syment;
+union internal_auxent;
+
+extern bfd_boolean bfd_coff_get_syment
+  (bfd *, struct bfd_symbol *, struct internal_syment *);
+
+extern bfd_boolean bfd_coff_get_auxent
+  (bfd *, struct bfd_symbol *, int, union internal_auxent *);
diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c
index 848d69b..e3f3b58 100644
--- a/bfd/coff-i386.c
+++ b/bfd/coff-i386.c
@@ -379,7 +379,7 @@ static reloc_howto_type howto_table[] =
       coffsym = (obj_symbols (abfd)				\
 	         + (cache_ptr->sym_ptr_ptr - symbols));		\
     else if (ptr)						\
-      coffsym = coff_symbol_from (abfd, ptr);			\
+      coffsym = coff_symbol_from (ptr);				\
     if (coffsym != (coff_symbol_type *) NULL			\
 	&& coffsym->native->u.syment.n_scnum == 0)		\
       cache_ptr->addend = - coffsym->native->u.syment.n_value;	\
diff --git a/bfd/coff-i960.c b/bfd/coff-i960.c
index 1448257..963433e 100644
--- a/bfd/coff-i960.c
+++ b/bfd/coff-i960.c
@@ -62,22 +62,22 @@ coff_i960_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
 /* This is just like the usual CALC_ADDEND, but it includes the
    section VMA for PC relative relocs.  */
 #ifndef CALC_ADDEND
-#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)                \
-  {                                                             \
-    coff_symbol_type *coffsym = (coff_symbol_type *) NULL;      \
-    if (ptr && bfd_asymbol_bfd (ptr) != abfd)                   \
-      coffsym = (obj_symbols (abfd)                             \
-                 + (cache_ptr->sym_ptr_ptr - symbols));         \
-    else if (ptr)                                               \
-      coffsym = coff_symbol_from (abfd, ptr);                   \
-    if (coffsym != (coff_symbol_type *) NULL                    \
-        && coffsym->native->u.syment.n_scnum == 0)              \
-      cache_ptr->addend = 0;                                    \
-    else if (ptr && bfd_asymbol_bfd (ptr) == abfd               \
-             && ptr->section != (asection *) NULL)              \
-      cache_ptr->addend = - (ptr->section->vma + ptr->value);   \
-    else                                                        \
-      cache_ptr->addend = 0;                                    \
+#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)		\
+  {								\
+    coff_symbol_type *coffsym = (coff_symbol_type *) NULL;	\
+    if (ptr && bfd_asymbol_bfd (ptr) != abfd)			\
+      coffsym = (obj_symbols (abfd)				\
+		 + (cache_ptr->sym_ptr_ptr - symbols));		\
+    else if (ptr)						\
+      coffsym = coff_symbol_from (ptr);				\
+    if (coffsym != (coff_symbol_type *) NULL			\
+	&& coffsym->native->u.syment.n_scnum == 0)		\
+      cache_ptr->addend = 0;					\
+    else if (ptr && bfd_asymbol_bfd (ptr) == abfd		\
+	     && ptr->section != (asection *) NULL)		\
+      cache_ptr->addend = - (ptr->section->vma + ptr->value);	\
+    else							\
+      cache_ptr->addend = 0;					\
     if (ptr && (reloc.r_type == 25 || reloc.r_type == 27))	\
       cache_ptr->addend += asect->vma;				\
   }
diff --git a/bfd/coff-m68k.c b/bfd/coff-m68k.c
index 5ebf52c..20696f5 100644
--- a/bfd/coff-m68k.c
+++ b/bfd/coff-m68k.c
@@ -360,7 +360,7 @@ m68kcoff_common_addend_special_fn (bfd *abfd,
       coffsym = (obj_symbols (abfd)				\
 	         + (cache_ptr->sym_ptr_ptr - symbols));		\
     else if (ptr)						\
-      coffsym = coff_symbol_from (abfd, ptr);			\
+      coffsym = coff_symbol_from (ptr);				\
     if (coffsym != (coff_symbol_type *) NULL			\
 	&& coffsym->native->u.syment.n_scnum == 0)		\
       cache_ptr->addend = - coffsym->native->u.syment.n_value;	\
diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c
index 23e32ec..fcd9570 100644
--- a/bfd/coff-sh.c
+++ b/bfd/coff-sh.c
@@ -530,22 +530,22 @@ sh_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 
 /* This is the same as the macro in coffcode.h, except that it copies
    r_offset into reloc_entry->addend for some relocs.  */
-#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)                \
-  {                                                             \
-    coff_symbol_type *coffsym = (coff_symbol_type *) NULL;      \
-    if (ptr && bfd_asymbol_bfd (ptr) != abfd)                   \
-      coffsym = (obj_symbols (abfd)                             \
-                 + (cache_ptr->sym_ptr_ptr - symbols));         \
-    else if (ptr)                                               \
-      coffsym = coff_symbol_from (abfd, ptr);                   \
-    if (coffsym != (coff_symbol_type *) NULL                    \
-        && coffsym->native->u.syment.n_scnum == 0)              \
-      cache_ptr->addend = 0;                                    \
-    else if (ptr && bfd_asymbol_bfd (ptr) == abfd               \
-             && ptr->section != (asection *) NULL)              \
-      cache_ptr->addend = - (ptr->section->vma + ptr->value);   \
-    else                                                        \
-      cache_ptr->addend = 0;                                    \
+#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)		\
+  {								\
+    coff_symbol_type *coffsym = (coff_symbol_type *) NULL;	\
+    if (ptr && bfd_asymbol_bfd (ptr) != abfd)			\
+      coffsym = (obj_symbols (abfd)				\
+		 + (cache_ptr->sym_ptr_ptr - symbols));		\
+    else if (ptr)						\
+      coffsym = coff_symbol_from (ptr);				\
+    if (coffsym != (coff_symbol_type *) NULL			\
+	&& coffsym->native->u.syment.n_scnum == 0)		\
+      cache_ptr->addend = 0;					\
+    else if (ptr && bfd_asymbol_bfd (ptr) == abfd		\
+	     && ptr->section != (asection *) NULL)		\
+      cache_ptr->addend = - (ptr->section->vma + ptr->value);	\
+    else							\
+      cache_ptr->addend = 0;					\
     if ((reloc).r_type == R_SH_SWITCH8				\
 	|| (reloc).r_type == R_SH_SWITCH16			\
 	|| (reloc).r_type == R_SH_SWITCH32			\
diff --git a/bfd/coff-x86_64.c b/bfd/coff-x86_64.c
index 742adc2..03628b9 100644
--- a/bfd/coff-x86_64.c
+++ b/bfd/coff-x86_64.c
@@ -499,7 +499,7 @@ static reloc_howto_type howto_table[] =
       coffsym = (obj_symbols (abfd)				\
 	         + (cache_ptr->sym_ptr_ptr - symbols));		\
     else if (ptr)						\
-      coffsym = coff_symbol_from (abfd, ptr);			\
+      coffsym = coff_symbol_from (ptr);				\
     								\
     if (coffsym != NULL						\
 	&& coffsym->native->u.syment.n_scnum == 0)		\
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index 1719b2d..a5ea332 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -3174,7 +3174,7 @@ coff_compute_section_file_positions (bfd * abfd)
 	{
 	  coff_symbol_type *cf;
 
-	  cf = coff_symbol_from (abfd, *symp);
+	  cf = coff_symbol_from (*symp);
 	  if (cf != NULL
 	      && cf->native != NULL
 	      && cf->native->is_sym
@@ -3872,7 +3872,7 @@ coff_write_object_contents (bfd * abfd)
 	      /* See if this is the section symbol.  */
 	      if (strcmp ((*psym)->name, current->name) == 0)
 		{
-		  csym = coff_symbol_from (abfd, *psym);
+		  csym = coff_symbol_from (*psym);
 		  if (csym == NULL
 		      || csym->native == NULL
 		      || ! csym->native->is_sym
@@ -5185,7 +5185,7 @@ SUBSUBSECTION
       coffsym = (obj_symbols (abfd)				\
 		 + (cache_ptr->sym_ptr_ptr - symbols));		\
     else if (ptr)						\
-      coffsym = coff_symbol_from (abfd, ptr);			\
+      coffsym = coff_symbol_from (ptr);				\
     if (coffsym != NULL						\
 	&& coffsym->native->is_sym				\
 	&& coffsym->native->u.syment.n_scnum == 0)		\
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 2b8884d..db89c72 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -633,22 +633,6 @@ coff_count_linenumbers (bfd *abfd)
   return total;
 }
 
-/* Takes a bfd and a symbol, returns a pointer to the coff specific
-   area of the symbol if there is one.  */
-
-coff_symbol_type *
-coff_symbol_from (bfd *ignore_abfd ATTRIBUTE_UNUSED,
-		  asymbol *symbol)
-{
-  if (!bfd_family_coff (bfd_asymbol_bfd (symbol)))
-    return (coff_symbol_type *) NULL;
-
-  if (bfd_asymbol_bfd (symbol)->tdata.coff_obj_data == (coff_data_type *) NULL)
-    return (coff_symbol_type *) NULL;
-
-  return (coff_symbol_type *) symbol;
-}
-
 static void
 fixup_symbol_value (bfd *abfd,
 		    coff_symbol_type *coff_symbol_ptr,
@@ -765,8 +749,9 @@ coff_renumber_symbols (bfd *bfd_ptr, int *first_undef)
 
   for (symbol_index = 0; symbol_index < symbol_count; symbol_index++)
     {
-      coff_symbol_type *coff_symbol_ptr = coff_symbol_from (bfd_ptr, symbol_ptr_ptr[symbol_index]);
+      coff_symbol_type *coff_symbol_ptr;
 
+      coff_symbol_ptr = coff_symbol_from (symbol_ptr_ptr[symbol_index]);
       symbol_ptr_ptr[symbol_index]->udata.i = symbol_index;
       if (coff_symbol_ptr && coff_symbol_ptr->native)
 	{
@@ -810,9 +795,9 @@ coff_mangle_symbols (bfd *bfd_ptr)
 
   for (symbol_index = 0; symbol_index < symbol_count; symbol_index++)
     {
-      coff_symbol_type *coff_symbol_ptr =
-      coff_symbol_from (bfd_ptr, symbol_ptr_ptr[symbol_index]);
+      coff_symbol_type *coff_symbol_ptr;
 
+      coff_symbol_ptr = coff_symbol_from (symbol_ptr_ptr[symbol_index]);
       if (coff_symbol_ptr && coff_symbol_ptr->native)
 	{
 	  int i;
@@ -1140,7 +1125,7 @@ coff_write_alien_symbol (bfd *abfd,
       /* Copy the any flags from the file header into the symbol.
          FIXME: Why?  */
       {
-	coff_symbol_type *c = coff_symbol_from (abfd, symbol);
+	coff_symbol_type *c = coff_symbol_from (symbol);
 	if (c != (coff_symbol_type *) NULL)
 	  native->u.syment.n_flags = bfd_asymbol_bfd (&c->symbol)->flags;
       }
@@ -1272,7 +1257,7 @@ coff_write_symbols (bfd *abfd)
   for (p = abfd->outsymbols, i = 0; i < limit; i++, p++)
     {
       asymbol *symbol = *p;
-      coff_symbol_type *c_symbol = coff_symbol_from (abfd, symbol);
+      coff_symbol_type *c_symbol = coff_symbol_from (symbol);
 
       if (c_symbol == (coff_symbol_type *) NULL
 	  || c_symbol->native == (combined_entry_type *) NULL)
@@ -1372,7 +1357,7 @@ coff_write_symbols (bfd *abfd)
 	{
 	  asymbol *q = *p;
 	  size_t name_length = strlen (q->name);
-	  coff_symbol_type *c_symbol = coff_symbol_from (abfd, q);
+	  coff_symbol_type *c_symbol = coff_symbol_from (q);
 	  size_t maxlen;
 
 	  /* Figure out whether the symbol name should go in the string
@@ -2045,79 +2030,6 @@ coff_get_symbol_info (bfd *abfd, asymbol *symbol, symbol_info *ret)
       (bfd_hostptr_t) obj_raw_syments (abfd);
 }
 
-/* Return the COFF syment for a symbol.  */
-
-bfd_boolean
-bfd_coff_get_syment (bfd *abfd,
-		     asymbol *symbol,
-		     struct internal_syment *psyment)
-{
-  coff_symbol_type *csym;
-
-  csym = coff_symbol_from (abfd, symbol);
-  if (csym == NULL || csym->native == NULL
-      || ! csym->native->is_sym)
-    {
-      bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
-    }
-
-  *psyment = csym->native->u.syment;
-
-  if (csym->native->fix_value)
-    psyment->n_value = psyment->n_value -
-      (bfd_hostptr_t) obj_raw_syments (abfd);
-
-  /* FIXME: We should handle fix_line here.  */
-
-  return TRUE;
-}
-
-/* Return the COFF auxent for a symbol.  */
-
-bfd_boolean
-bfd_coff_get_auxent (bfd *abfd,
-		     asymbol *symbol,
-		     int indx,
-		     union internal_auxent *pauxent)
-{
-  coff_symbol_type *csym;
-  combined_entry_type *ent;
-
-  csym = coff_symbol_from (abfd, symbol);
-
-  if (csym == NULL
-      || csym->native == NULL
-      || ! csym->native->is_sym
-      || indx >= csym->native->u.syment.n_numaux)
-    {
-      bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
-    }
-
-  ent = csym->native + indx + 1;
-
-  BFD_ASSERT (! ent->is_sym);
-  *pauxent = ent->u.auxent;
-
-  if (ent->fix_tag)
-    pauxent->x_sym.x_tagndx.l =
-      ((combined_entry_type *) pauxent->x_sym.x_tagndx.p
-       - obj_raw_syments (abfd));
-
-  if (ent->fix_end)
-    pauxent->x_sym.x_fcnary.x_fcn.x_endndx.l =
-      ((combined_entry_type *) pauxent->x_sym.x_fcnary.x_fcn.x_endndx.p
-       - obj_raw_syments (abfd));
-
-  if (ent->fix_scnlen)
-    pauxent->x_csect.x_scnlen.l =
-      ((combined_entry_type *) pauxent->x_csect.x_scnlen.p
-       - obj_raw_syments (abfd));
-
-  return TRUE;
-}
-
 /* Print out information about COFF symbol.  */
 
 void
@@ -2567,7 +2479,7 @@ bfd_coff_set_symbol_class (bfd *         abfd,
 {
   coff_symbol_type * csym;
 
-  csym = coff_symbol_from (abfd, symbol);
+  csym = coff_symbol_from (symbol);
   if (csym == NULL)
     {
       bfd_set_error (bfd_error_invalid_operation);
@@ -2623,16 +2535,6 @@ bfd_coff_set_symbol_class (bfd *         abfd,
   return TRUE;
 }
 
-struct coff_comdat_info *
-bfd_coff_get_comdat_section (bfd *abfd, struct bfd_section *sec)
-{
-  if (bfd_get_flavour (abfd) == bfd_target_coff_flavour
-      && coff_section_data (abfd, sec) != NULL)
-    return coff_section_data (abfd, sec)->comdat;
-  else
-    return NULL;
-}
-
 bfd_boolean
 _bfd_coff_section_already_linked (bfd *abfd,
 				  asection *sec,
diff --git a/bfd/configure.ac b/bfd/configure.ac
index f960740..1b709dc 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -677,7 +677,11 @@ selarchs="$f"
 tb=
 
 elf="elf.lo elflink.lo elf-attrs.lo elf-strtab.lo
-     elf-eh-frame.lo dwarf1.lo"
+     elf-eh-frame.lo dwarf1.lo dwarf2.lo"
+coffgen="coffgen.lo dwarf2.lo"
+coff="cofflink.lo $coffgen"
+ecoff="ecofflink.lo $coffgen"
+xcoff="xcofflink.lo $coffgen"
 
 for vec in $selvecs
 do
@@ -690,7 +694,7 @@ do
     aarch64_elf32_le_vec)	 tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
     aarch64_elf64_be_vec)	 tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
     aarch64_elf64_le_vec)	 tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    alpha_ecoff_le_vec)		 tb="$tb coff-alpha.lo ecoff.lo ecofflink.lo"; target_size=64 ;;
+    alpha_ecoff_le_vec)		 tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
     alpha_elf64_vec)		 tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
     alpha_elf64_fbsd_vec)	 tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
     alpha_nlm32_vec)		 tb="$tb nlm32-alpha.lo nlm32.lo nlm.lo"; target_size=64 ;;
@@ -707,8 +711,8 @@ do
     arm_aout_le_vec)		 tb="$tb aout-arm.lo aout32.lo" ;;
     arm_aout_nbsd_vec)		 tb="$tb armnetbsd.lo aout32.lo" ;;
     arm_aout_riscix_vec)	 tb="$tb aout32.lo riscix.lo" ;;
-    arm_coff_be_vec)		 tb="$tb coff-arm.lo cofflink.lo " ;;
-    arm_coff_le_vec)		 tb="$tb coff-arm.lo cofflink.lo " ;;
+    arm_coff_be_vec)		 tb="$tb coff-arm.lo $coff" ;;
+    arm_coff_le_vec)		 tb="$tb coff-arm.lo $coff" ;;
     arm_elf32_be_vec)		 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_le_vec)		 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_nacl_be_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
@@ -717,18 +721,18 @@ do
     arm_elf32_symbian_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_vxworks_be_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_vxworks_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
-    arm_pe_be_vec)		 tb="$tb pe-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pe_le_vec)		 tb="$tb pe-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pe_epoc_be_vec)		 tb="$tb epoc-pe-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pe_epoc_le_vec)		 tb="$tb epoc-pe-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pe_wince_be_vec)	 tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pe_wince_le_vec)	 tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pei_be_vec)		 tb="$tb pei-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pei_le_vec)		 tb="$tb pei-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pei_epoc_be_vec)	 tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pei_epoc_le_vec)	 tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pei_wince_be_vec)	 tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
-    arm_pei_wince_le_vec)	 tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
+    arm_pe_be_vec)		 tb="$tb pe-arm.lo peigen.lo $coff" ;;
+    arm_pe_le_vec)		 tb="$tb pe-arm.lo peigen.lo $coff" ;;
+    arm_pe_epoc_be_vec)		 tb="$tb epoc-pe-arm.lo peigen.lo $coff" ;;
+    arm_pe_epoc_le_vec)		 tb="$tb epoc-pe-arm.lo peigen.lo $coff" ;;
+    arm_pe_wince_be_vec)	 tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo $coff" ;;
+    arm_pe_wince_le_vec)	 tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo $coff" ;;
+    arm_pei_be_vec)		 tb="$tb pei-arm.lo peigen.lo $coff" ;;
+    arm_pei_le_vec)		 tb="$tb pei-arm.lo peigen.lo $coff" ;;
+    arm_pei_epoc_be_vec)	 tb="$tb epoc-pei-arm.lo peigen.lo $coff" ;;
+    arm_pei_epoc_le_vec)	 tb="$tb epoc-pei-arm.lo peigen.lo $coff" ;;
+    arm_pei_wince_be_vec)	 tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo $coff" ;;
+    arm_pei_wince_le_vec)	 tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo $coff" ;;
     avr_elf32_vec)		 tb="$tb elf32-avr.lo elf32.lo $elf" ;;
     bfin_elf32_vec)		 tb="$tb elf32-bfin.lo elf32.lo $elf" ;;
     bfin_elf32_fdpic_vec)	 tb="$tb elf32-bfin.lo elf32.lo $elf" ;;
@@ -751,9 +755,9 @@ do
     fr30_elf32_vec)		 tb="$tb elf32-fr30.lo elf32.lo $elf" ;;
     frv_elf32_vec)		 tb="$tb elf32-frv.lo elf32.lo $elf" ;;
     frv_elf32_fdpic_vec)	 tb="$tb elf32-frv.lo elf32.lo $elf" ;;
-    h8300_coff_vec)		 tb="$tb coff-h8300.lo reloc16.lo" ;;
+    h8300_coff_vec)		 tb="$tb coff-h8300.lo reloc16.lo $coffgen" ;;
     h8300_elf32_vec)		 tb="$tb elf32-h8300.lo elf32.lo $elf" ;;
-    h8500_coff_vec)		 tb="$tb coff-h8500.lo reloc16.lo" ;;
+    h8500_coff_vec)		 tb="$tb coff-h8500.lo reloc16.lo $coffgen" ;;
     hppa_elf32_vec)		 tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
     hppa_elf32_linux_vec)	 tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
     hppa_elf32_nbsd_vec)	 tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
@@ -770,10 +774,10 @@ do
     i386_aout_mach3_vec)	 tb="$tb i386mach3.lo aout32.lo" ;;
     i386_aout_nbsd_vec)		 tb="$tb i386netbsd.lo aout32.lo" ;;
     i386_aout_os9k_vec)		 tb="$tb i386os9k.lo aout32.lo" ;;
-    i386_coff_vec)		 tb="$tb coff-i386.lo cofflink.lo" ;;
-    i386_coff_go32_vec)		 tb="$tb coff-go32.lo cofflink.lo" ;;
-    i386_coff_go32stubbed_vec)	 tb="$tb coff-stgo32.lo cofflink.lo" ;;
-    i386_coff_lynx_vec)		 tb="$tb cf-i386lynx.lo cofflink.lo lynx-core.lo" ;;
+    i386_coff_vec)		 tb="$tb coff-i386.lo $coff" ;;
+    i386_coff_go32_vec)		 tb="$tb coff-go32.lo $coff" ;;
+    i386_coff_go32stubbed_vec)	 tb="$tb coff-stgo32.lo $coff" ;;
+    i386_coff_lynx_vec)		 tb="$tb cf-i386lynx.lo lynx-core.lo $coff" ;;
     i386_elf32_vec)		 tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
     i386_elf32_fbsd_vec)	 tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
     i386_elf32_nacl_vec)	 tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
@@ -782,9 +786,9 @@ do
     i386_mach_o_vec)		 tb="$tb mach-o-i386.lo" ;;
     i386_msdos_vec)		 tb="$tb i386msdos.lo" ;;
     i386_nlm32_vec)		 tb="$tb nlm32-i386.lo nlm32.lo nlm.lo" ;;
-    i386_pe_vec)		 tb="$tb pe-i386.lo peigen.lo cofflink.lo" ;;
-    i386_pei_vec)		 tb="$tb pei-i386.lo peigen.lo cofflink.lo" ;;
-    i860_coff_vec)		 tb="$tb coff-i860.lo cofflink.lo" ;;
+    i386_pe_vec)		 tb="$tb pe-i386.lo peigen.lo $coff" ;;
+    i386_pei_vec)		 tb="$tb pei-i386.lo peigen.lo $coff" ;;
+    i860_coff_vec)		 tb="$tb coff-i860.lo $coff" ;;
     i860_elf32_vec)		 tb="$tb elf32-i860.lo elf32.lo $elf" ;;
     i860_elf32_le_vec)		 tb="$tb elf32-i860.lo elf32.lo $elf" ;;
     i960_elf32_vec)		 tb="$tb elf32-i960.lo elf32.lo $elf" ;;
@@ -794,9 +798,9 @@ do
     ia64_elf64_le_vec)		 tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
     ia64_elf64_hpux_be_vec)	 tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
     ia64_elf64_vms_vec)		 tb="$tb elf64-ia64-vms.lo elf64-ia64.lo elfxx-ia64.lo elf64.lo vms-lib.lo vms-misc.lo $elf"; target_size=64 ;;
-    ia64_pei_vec)		 tb="$tb pei-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;;
-    icoff_be_vec)		 tb="$tb coff-i960.lo cofflink.lo" ;;
-    icoff_le_vec)		 tb="$tb coff-i960.lo cofflink.lo" ;;
+    ia64_pei_vec)		 tb="$tb pei-ia64.lo pepigen.lo $coff"; target_size=64 ;;
+    icoff_be_vec)		 tb="$tb coff-i960.lo $coff" ;;
+    icoff_le_vec)		 tb="$tb coff-i960.lo $coff" ;;
     ieee_vec)			 tb="$tb ieee.lo" ;;
     ip2k_elf32_vec)		 tb="$tb elf32-ip2k.lo elf32.lo $elf" ;;
     iq2000_elf32_vec)		 tb="$tb elf32-iq2000.lo elf32.lo $elf" ;;
@@ -819,56 +823,56 @@ do
     m68k_aout_linux_vec)	 tb="$tb m68klinux.lo aout32.lo" ;;
     m68k_aout_nbsd_vec)		 tb="$tb m68knetbsd.lo aout32.lo" ;;
     m68k_aout_newsos3_vec)	 tb="$tb newsos3.lo aout32.lo" ;;
-    m68k_coff_vec)		 tb="$tb coff-m68k.lo cofflink.lo" ;;
-    m68k_coff_apollo_vec)	 tb="$tb coff-apollo.lo" ;;
-    m68k_coff_aux_vec)		 tb="$tb coff-aux.lo coff-m68k.lo cofflink.lo" ;;
-    m68k_coff_sysv_vec)		 tb="$tb coff-svm68k.lo cofflink.lo" ;;
-    m68k_coff_un_vec)		 tb="$tb coff-u68k.lo coff-m68k.lo cofflink.lo" ;;
+    m68k_coff_vec)		 tb="$tb coff-m68k.lo $coff" ;;
+    m68k_coff_apollo_vec)	 tb="$tb coff-apollo.lo $coffgen" ;;
+    m68k_coff_aux_vec)		 tb="$tb coff-aux.lo coff-m68k.lo $coff" ;;
+    m68k_coff_sysv_vec)		 tb="$tb coff-svm68k.lo $coff" ;;
+    m68k_coff_un_vec)		 tb="$tb coff-u68k.lo coff-m68k.lo $coff" ;;
     m68k_elf32_vec)		 tb="$tb elf32-m68k.lo elf32.lo $elf" ;;
     m68k_versados_vec)		 tb="$tb versados.lo" ;;
     m88k_aout_mach3_vec)	 tb="$tb m88kmach3.lo aout32.lo" ;;
     m88k_aout_obsd_vec)		 tb="$tb m88kopenbsd.lo aout32.lo" ;;
-    m88k_coff_bcs_vec)		 tb="$tb coff-m88k.lo" ;;
+    m88k_coff_bcs_vec)		 tb="$tb coff-m88k.lo $coffgen" ;;
     m88k_elf32_vec)		 tb="$tb elf32-m88k.lo elf32.lo $elf" ;;
-    mach_o_be_vec)		 tb="$tb mach-o.lo" ;;
-    mach_o_le_vec)		 tb="$tb mach-o.lo" ;;
-    mach_o_fat_vec)		 tb="$tb mach-o.lo" ;;
+    mach_o_be_vec)		 tb="$tb mach-o.lo dwarf2.lo" ;;
+    mach_o_le_vec)		 tb="$tb mach-o.lo dwarf2.lo" ;;
+    mach_o_fat_vec)		 tb="$tb mach-o.lo dwarf2.lo" ;;
     mcore_elf32_be_vec)		 tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
     mcore_elf32_le_vec)		 tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
-    mcore_pe_be_vec)		 tb="$tb pe-mcore.lo peigen.lo cofflink.lo" ;;
-    mcore_pe_le_vec)		 tb="$tb pe-mcore.lo peigen.lo cofflink.lo" ;;
-    mcore_pei_be_vec)		 tb="$tb pei-mcore.lo peigen.lo cofflink.lo" ;;
-    mcore_pei_le_vec)		 tb="$tb pei-mcore.lo peigen.lo cofflink.lo" ;;
+    mcore_pe_be_vec)		 tb="$tb pe-mcore.lo peigen.lo $coff" ;;
+    mcore_pe_le_vec)		 tb="$tb pe-mcore.lo peigen.lo $coff" ;;
+    mcore_pei_be_vec)		 tb="$tb pei-mcore.lo peigen.lo $coff" ;;
+    mcore_pei_le_vec)		 tb="$tb pei-mcore.lo peigen.lo $coff" ;;
     mep_elf32_vec)		 tb="$tb elf32-mep.lo elf32.lo $elf" ;;
     mep_elf32_le_vec)		 tb="$tb elf32-mep.lo elf32.lo $elf" ;;
     metag_elf32_vec)		 tb="$tb elf32-metag.lo elf32.lo $elf" ;;
     microblaze_elf32_vec)	 tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
     microblaze_elf32_le_vec)	 tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
-    mips_ecoff_be_vec)		 tb="$tb coff-mips.lo ecoff.lo ecofflink.lo" ;;
-    mips_ecoff_le_vec)		 tb="$tb coff-mips.lo ecoff.lo ecofflink.lo" ;;
-    mips_ecoff_bele_vec)	 tb="$tb coff-mips.lo ecoff.lo ecofflink.lo" ;;
-    mips_elf32_be_vec)		 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
-    mips_elf32_le_vec)		 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
-    mips_elf32_n_be_vec)	 tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf32_n_le_vec)	 tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf32_ntrad_be_vec)	 tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf32_ntrad_le_vec)	 tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf32_ntradfbsd_be_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf32_ntradfbsd_le_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf32_trad_be_vec)	 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
-    mips_elf32_trad_le_vec)	 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
-    mips_elf32_tradfbsd_be_vec)  tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
-    mips_elf32_tradfbsd_le_vec)  tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
-    mips_elf32_vxworks_be_vec)	 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
-    mips_elf32_vxworks_le_vec)	 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
-    mips_elf64_be_vec)		 tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf64_le_vec)		 tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf64_trad_be_vec)	 tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf64_trad_le_vec)	 tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf64_tradfbsd_be_vec)  tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_elf64_tradfbsd_le_vec)  tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    mips_pe_le_vec)		 tb="$tb pe-mips.lo peigen.lo cofflink.lo" ;;
-    mips_pei_le_vec)		 tb="$tb pei-mips.lo peigen.lo cofflink.lo" ;;
+    mips_ecoff_be_vec)		 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
+    mips_ecoff_le_vec)		 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
+    mips_ecoff_bele_vec)	 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
+    mips_elf32_be_vec)		 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
+    mips_elf32_le_vec)		 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
+    mips_elf32_n_be_vec)	 tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf32_n_le_vec)	 tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf32_ntrad_be_vec)	 tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf32_ntrad_le_vec)	 tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf32_ntradfbsd_be_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf32_ntradfbsd_le_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf32_trad_be_vec)	 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
+    mips_elf32_trad_le_vec)	 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
+    mips_elf32_tradfbsd_be_vec)  tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
+    mips_elf32_tradfbsd_le_vec)  tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
+    mips_elf32_vxworks_be_vec)	 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
+    mips_elf32_vxworks_le_vec)	 tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
+    mips_elf64_be_vec)		 tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf64_le_vec)		 tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf64_trad_be_vec)	 tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf64_trad_le_vec)	 tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf64_tradfbsd_be_vec)  tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_elf64_tradfbsd_le_vec)  tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+    mips_pe_le_vec)		 tb="$tb pe-mips.lo peigen.lo $coff" ;;
+    mips_pei_le_vec)		 tb="$tb pei-mips.lo peigen.lo $coff" ;;
     mmix_elf64_vec)		 tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;;
     mmix_mmo_vec)			 tb="$tb mmo.lo" target_size=64 ;;
     mn10200_elf32_vec)		 tb="$tb elf-m10200.lo elf32.lo $elf" ;;
@@ -902,15 +906,15 @@ do
     powerpc_elf64_le_vec)	 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
     powerpc_elf64_fbsd_vec)	 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
     powerpc_nlm32_vec)		 tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
-    powerpc_pe_vec)		 tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
-    powerpc_pe_le_vec)		 tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
-    powerpc_pei_vec)		 tb="$tb pei-ppc.lo peigen.lo cofflink.lo" ;;
-    powerpc_pei_le_vec)		 tb="$tb pei-ppc.lo peigen.lo cofflink.lo" ;;
-    powerpc_xcoff_vec)		 tb="$tb coff-rs6000.lo xcofflink.lo" ;;
+    powerpc_pe_vec)		 tb="$tb pe-ppc.lo peigen.lo $coff" ;;
+    powerpc_pe_le_vec)		 tb="$tb pe-ppc.lo peigen.lo $coff" ;;
+    powerpc_pei_vec)		 tb="$tb pei-ppc.lo peigen.lo $coff" ;;
+    powerpc_pei_le_vec)		 tb="$tb pei-ppc.lo peigen.lo $coff" ;;
+    powerpc_xcoff_vec)		 tb="$tb coff-rs6000.lo $xcoff" ;;
     rl78_elf32_vec)		 tb="$tb elf32-rl78.lo elf32.lo $elf" ;;
-    rs6000_xcoff64_vec)		 tb="$tb coff64-rs6000.lo xcofflink.lo aix5ppc-core.lo"; target_size=64 ;;
-    rs6000_xcoff64_aix_vec)	 tb="$tb coff64-rs6000.lo xcofflink.lo aix5ppc-core.lo"; target_size=64 ;;
-    rs6000_xcoff_vec)		 tb="$tb coff-rs6000.lo xcofflink.lo" ;;
+    rs6000_xcoff64_vec)		 tb="$tb coff64-rs6000.lo aix5ppc-core.lo $xcoff"; target_size=64 ;;
+    rs6000_xcoff64_aix_vec)	 tb="$tb coff64-rs6000.lo aix5ppc-core.lo $xcoff"; target_size=64 ;;
+    rs6000_xcoff_vec)		 tb="$tb coff-rs6000.lo $xcoff" ;;
     rx_elf32_be_vec)		 tb="$tb elf32-rx.lo elf32.lo $elf" ;;
     rx_elf32_be_ns_vec)		 tb="$tb elf32-rx.lo elf32.lo $elf" ;;
     rx_elf32_le_vec)		 tb="$tb elf32-rx.lo elf32.lo $elf" ;;
@@ -918,45 +922,42 @@ do
     s390_elf64_vec)		 tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;;
     score_elf32_be_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
     score_elf32_le_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
-    # FIXME: We include cofflink.lo not because it's needed for
-    # sh64_elf32[_le]_vec, but because we include sh_elf32[_le]_vec
-    # which needs it but does not list it.  Should be fixed in right place.
-    sh64_elf32_vec)		 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
-    sh64_elf32_le_vec)		 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
-    sh64_elf32_linux_vec)	 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
-    sh64_elf32_linux_be_vec)	 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
-    sh64_elf32_nbsd_vec)	 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" ;;
-    sh64_elf32_nbsd_le_vec)	 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" ;;
+    sh64_elf32_vec)		 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf" target_size=64 ;;
+    sh64_elf32_le_vec)		 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf" target_size=64 ;;
+    sh64_elf32_linux_vec)	 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf" target_size=64 ;;
+    sh64_elf32_linux_be_vec)	 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf" target_size=64 ;;
+    sh64_elf32_nbsd_vec)	 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf" ;;
+    sh64_elf32_nbsd_le_vec)	 tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf" ;;
     sh64_elf64_vec)		 tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     sh64_elf64_le_vec)		 tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     sh64_elf64_linux_vec)	 tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     sh64_elf64_linux_be_vec)	 tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     sh64_elf64_nbsd_vec)	 tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     sh64_elf64_nbsd_le_vec)	 tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
-    sh_coff_vec)		 tb="$tb coff-sh.lo cofflink.lo" ;;
-    sh_coff_le_vec)		 tb="$tb coff-sh.lo cofflink.lo" ;;
-    sh_coff_small_vec)		 tb="$tb coff-sh.lo cofflink.lo" ;;
-    sh_coff_small_le_vec)	 tb="$tb coff-sh.lo cofflink.lo" ;;
-    sh_elf32_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
-    sh_elf32_le_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
-    sh_elf32_fdpic_be_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
-    sh_elf32_fdpic_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
-    sh_elf32_linux_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
-    sh_elf32_linux_be_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
-    sh_elf32_nbsd_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
-    sh_elf32_nbsd_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
-    sh_elf32_symbian_le_vec)	 tb="$tb elf32-sh-symbian.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
-    sh_elf32_vxworks_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
-    sh_elf32_vxworks_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
-    sh_pe_le_vec)		 tb="$tb pe-sh.lo coff-sh.lo peigen.lo cofflink.lo" ;;
-    sh_pei_le_vec)		 tb="$tb pei-sh.lo coff-sh.lo peigen.lo cofflink.lo" ;;
+    sh_coff_vec)		 tb="$tb coff-sh.lo $coff" ;;
+    sh_coff_le_vec)		 tb="$tb coff-sh.lo $coff" ;;
+    sh_coff_small_vec)		 tb="$tb coff-sh.lo $coff" ;;
+    sh_coff_small_le_vec)	 tb="$tb coff-sh.lo $coff" ;;
+    sh_elf32_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_le_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_fdpic_be_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_fdpic_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_linux_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_linux_be_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_nbsd_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_nbsd_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_symbian_le_vec)	 tb="$tb elf32-sh-symbian.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_vxworks_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_vxworks_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_pe_le_vec)		 tb="$tb pe-sh.lo coff-sh.lo peigen.lo $coff" ;;
+    sh_pei_le_vec)		 tb="$tb pei-sh.lo coff-sh.lo peigen.lo $coff" ;;
     sparc_aout_le_vec)		 tb="$tb aout-sparcle.lo aout32.lo" ;;
     sparc_aout_linux_vec)	 tb="$tb sparclinux.lo aout32.lo" ;;
     sparc_aout_lynx_vec)	 tb="$tb sparclynx.lo lynx-core.lo aout32.lo" ;;
     sparc_aout_nbsd_vec)	 tb="$tb sparcnetbsd.lo aout32.lo" ;;
     sparc_aout_sunos_be_vec)	 tb="$tb sunos.lo aout32.lo" ;;
-    sparc_coff_vec)		 tb="$tb coff-sparc.lo" ;;
-    sparc_coff_lynx_vec)	 tb="$tb cf-sparclynx.lo lynx-core.lo" ;;
+    sparc_coff_vec)		 tb="$tb coff-sparc.lo $coffgen" ;;
+    sparc_coff_lynx_vec)	 tb="$tb cf-sparclynx.lo lynx-core.lo $coffgen" ;;
     sparc_elf32_vec)		 tb="$tb elf32-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf32.lo $elf" ;;
     sparc_elf32_sol2_vec)	 tb="$tb elf32-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf32.lo $elf" ;;
     sparc_elf32_vxworks_vec)	 tb="$tb elf32-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf32.lo $elf" ;;
@@ -967,26 +968,26 @@ do
     spu_elf32_vec)		 tb="$tb elf32-spu.lo elf32.lo $elf" ;;
     sym_vec)			 tb="$tb xsym.lo" ;;
     tic30_aout_vec)		 tb="$tb aout-tic30.lo" ;;
-    tic30_coff_vec)		 tb="$tb coff-tic30.lo" ;;
-    tic4x_coff0_vec)		 tb="$tb coff-tic4x.lo" ;;
-    tic4x_coff0_beh_vec)	 tb="$tb coff-tic4x.lo" ;;
-    tic4x_coff1_vec)		 tb="$tb coff-tic4x.lo" ;;
-    tic4x_coff1_beh_vec)	 tb="$tb coff-tic4x.lo" ;;
-    tic4x_coff2_vec)		 tb="$tb coff-tic4x.lo" ;;
-    tic4x_coff2_beh_vec)	 tb="$tb coff-tic4x.lo" ;;
-    tic54x_coff0_vec)		 tb="$tb coff-tic54x.lo" ;;
-    tic54x_coff0_beh_vec)	 tb="$tb coff-tic54x.lo" ;;
-    tic54x_coff1_vec)		 tb="$tb coff-tic54x.lo" ;;
-    tic54x_coff1_beh_vec)	 tb="$tb coff-tic54x.lo" ;;
-    tic54x_coff2_vec)		 tb="$tb coff-tic54x.lo" ;;
-    tic54x_coff2_beh_vec)	 tb="$tb coff-tic54x.lo" ;;
+    tic30_coff_vec)		 tb="$tb coff-tic30.lo $coffgen" ;;
+    tic4x_coff0_vec)		 tb="$tb coff-tic4x.lo $coffgen" ;;
+    tic4x_coff0_beh_vec)	 tb="$tb coff-tic4x.lo $coffgen" ;;
+    tic4x_coff1_vec)		 tb="$tb coff-tic4x.lo $coffgen" ;;
+    tic4x_coff1_beh_vec)	 tb="$tb coff-tic4x.lo $coffgen" ;;
+    tic4x_coff2_vec)		 tb="$tb coff-tic4x.lo $coffgen" ;;
+    tic4x_coff2_beh_vec)	 tb="$tb coff-tic4x.lo $coffgen" ;;
+    tic54x_coff0_vec)		 tb="$tb coff-tic54x.lo $coffgen" ;;
+    tic54x_coff0_beh_vec)	 tb="$tb coff-tic54x.lo $coffgen" ;;
+    tic54x_coff1_vec)		 tb="$tb coff-tic54x.lo $coffgen" ;;
+    tic54x_coff1_beh_vec)	 tb="$tb coff-tic54x.lo $coffgen" ;;
+    tic54x_coff2_vec)		 tb="$tb coff-tic54x.lo $coffgen" ;;
+    tic54x_coff2_beh_vec)	 tb="$tb coff-tic54x.lo $coffgen" ;;
     tic6x_elf32_be_vec)		 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_le_vec)		 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_c6000_be_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_c6000_le_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_be_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_le_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
-    tic80_coff_vec)		 tb="$tb coff-tic80.lo cofflink.lo" ;;
+    tic80_coff_vec)		 tb="$tb coff-tic80.lo $coff" ;;
     tilegx_elf32_be_vec)	 tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf32_le_vec)	 tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf64_be_vec)	 tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
@@ -999,9 +1000,9 @@ do
     vax_aout_nbsd_vec)		 tb="$tb vaxnetbsd.lo aout32.lo" ;;
     vax_elf32_vec)		 tb="$tb elf32-vax.lo elf32.lo $elf" ;;
     visium_elf32_vec)		 tb="$tb elf32-visium.lo elf32.lo $elf" ;;
-    w65_coff_vec)		 tb="$tb coff-w65.lo reloc16.lo" ;;
-    we32k_coff_vec)		 tb="$tb coff-we32k.lo" ;;
-    x86_64_coff_vec)		 tb="$tb coff-x86_64.lo cofflink.lo"; target_size=64 ;;
+    w65_coff_vec)		 tb="$tb coff-w65.lo reloc16.lo $coffgen" ;;
+    we32k_coff_vec)		 tb="$tb coff-we32k.lo $coffgen" ;;
+    x86_64_coff_vec)		 tb="$tb coff-x86_64.lo $coff"; target_size=64 ;;
     x86_64_elf32_vec)		 tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
     x86_64_elf32_nacl_vec)	 tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
     x86_64_elf64_vec)		 tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
@@ -1009,16 +1010,16 @@ do
     x86_64_elf64_nacl_vec)	 tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
     x86_64_elf64_sol2_vec)	 tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
     x86_64_mach_o_vec)		 tb="$tb mach-o-x86-64.lo" ;;
-    x86_64_pe_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo cofflink.lo"; target_size=64 ;;
-    x86_64_pe_be_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo cofflink.lo"; target_size=64 ;;
-    x86_64_pei_vec)		 tb="$tb pei-x86_64.lo pex64igen.lo cofflink.lo"; target_size=64 ;;
+    x86_64_pe_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
+    x86_64_pe_be_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
+    x86_64_pei_vec)		 tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
     xc16x_elf32_vec)		 tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
     xgate_elf32_vec)		 tb="$tb elf32-xgate.lo elf32.lo $elf" ;;
     xstormy16_elf32_vec)	 tb="$tb elf32-xstormy16.lo elf32.lo $elf" ;;
     xtensa_elf32_be_vec)	 tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
     xtensa_elf32_le_vec)	 tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
-    z80_coff_vec)		 tb="$tb coff-z80.lo reloc16.lo" ;;
-    z8k_coff_vec)		 tb="$tb coff-z8k.lo reloc16.lo cofflink.lo" ;;
+    z80_coff_vec)		 tb="$tb coff-z80.lo reloc16.lo $coffgen" ;;
+    z8k_coff_vec)		 tb="$tb coff-z8k.lo reloc16.lo $coff" ;;
 
     # These appear out of order in targets.c
     srec_vec)			 tb="$tb srec.lo" ;;
diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h
index dc7866d..3b6b93d 100644
--- a/bfd/libcoff-in.h
+++ b/bfd/libcoff-in.h
@@ -20,6 +20,7 @@
    MA 02110-1301, USA.  */
 
 #include "bfdlink.h"
+#include "coff-bfd.h"
 
 /* Object file tdata; access macros.  */
 
@@ -187,36 +188,6 @@ struct xcoff_tdata
    macro is only ever applied to an asymbol.  */
 #define coffsymbol(asymbol) ((coff_symbol_type *)(&((asymbol)->the_bfd)))
 
-/* The used_by_bfd field of a section may be set to a pointer to this
-   structure.  */
-
-struct coff_section_tdata
-{
-  /* The relocs, swapped into COFF internal form.  This may be NULL.  */
-  struct internal_reloc *relocs;
-  /* If this is TRUE, the relocs entry may not be freed.  */
-  bfd_boolean keep_relocs;
-  /* The section contents.  This may be NULL.  */
-  bfd_byte *contents;
-  /* If this is TRUE, the contents entry may not be freed.  */
-  bfd_boolean keep_contents;
-  /* Information cached by coff_find_nearest_line.  */
-  bfd_vma offset;
-  unsigned int i;
-  const char *function;
-  /* Optional information about a COMDAT entry; NULL if not COMDAT. */
-  struct coff_comdat_info *comdat;
-  int line_base;
-  /* A pointer used for .stab linking optimizations.  */
-  void * stab_info;
-  /* Available for individual backends.  */
-  void * tdata;
-};
-
-/* An accessor macro for the coff_section_tdata structure.  */
-#define coff_section_data(abfd, sec) \
-  ((struct coff_section_tdata *) (sec)->used_by_bfd)
-
 /* Tdata for sections in XCOFF files.  This is used by the linker.  */
 
 struct xcoff_section_tdata
@@ -320,8 +291,6 @@ extern long coff_canonicalize_symtab
   (bfd *, asymbol **);
 extern int coff_count_linenumbers
   (bfd *);
-extern struct coff_symbol_struct *coff_symbol_from
-  (bfd *, asymbol *);
 extern bfd_boolean coff_renumber_symbols
   (bfd *, int *);
 extern void coff_mangle_symbols
diff --git a/bfd/pe-mips.c b/bfd/pe-mips.c
index d7edc2b..a24034f 100644
--- a/bfd/pe-mips.c
+++ b/bfd/pe-mips.c
@@ -375,7 +375,7 @@ static reloc_howto_type howto_table[] =
       coffsym = (obj_symbols (abfd)				\
 	         + (cache_ptr->sym_ptr_ptr - symbols));		\
     else if (ptr)						\
-      coffsym = coff_symbol_from (abfd, ptr);			\
+      coffsym = coff_symbol_from (ptr);				\
     if (coffsym != NULL						\
 	&& coffsym->native->u.syment.n_scnum == 0)		\
       cache_ptr->addend = - coffsym->native->u.syment.n_value;	\
diff --git a/binutils/objdump.c b/binutils/objdump.c
index ee3a084..4c00732 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -51,6 +51,7 @@
 #include "sysdep.h"
 #include "bfd.h"
 #include "elf-bfd.h"
+#include "coff-bfd.h"
 #include "progress.h"
 #include "bucomm.h"
 #include "elfcomm.h"
diff --git a/ld/ldmisc.c b/ld/ldmisc.c
index 5e18013..af2a044 100644
--- a/ld/ldmisc.c
+++ b/ld/ldmisc.c
@@ -35,6 +35,7 @@
 #include "ldmain.h"
 #include "ldfile.h"
 #include "elf-bfd.h"
+#include "coff-bfd.h"
 
 /*
  %% literal %

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]