[binutils-gdb] Remove sparc-aout and sparc-coff support

Alan Modra amodra@sourceware.org
Mon Apr 16 06:28:00 GMT 2018


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c9098af41e3246586a30f4f0bdb0ee4367e9a5e7

commit c9098af41e3246586a30f4f0bdb0ee4367e9a5e7
Author: Alan Modra <amodra@gmail.com>
Date:   Mon Apr 16 15:33:26 2018 +0930

    Remove sparc-aout and sparc-coff support
    
    bfd/
    	* Makefile.am: Remove sparc-aout and sparc-coff support.
    	* config.bfd: Likewise.
    	* configure.ac: Likewise.
    	* targets.c: Likewise.
    	* aout-sparcle.c: Delete.
    	* aoutf1.h: Delete.
    	* cf-sparclynx.c: Delete.
    	* coff-sparc.c: Delete.
    	* demo64.c: Delete.
    	* sparclinux.c: Delete.
    	* sparclynx.c: Delete.
    	* sparcnetbsd.c: Delete.
    	* sunos.c: Delete.
    	* Makefile.in: Regenerate.
    	* configure: Regenerate.
    	* po/SRC-POTFILES.in: Regenerate.
    binutils/
    	* testsuite/lib/binutils-common.exp: Remove sparc-aout and
    	sparc-coff support.
    gas/
    	* Makefile.am: Remove sparc-aout and sparc-coff support.
    	* config/obj-coff.h: Likewise.
    	* config/tc-sparc.c: Likewise.
    	* config/tc-sparc.h: Likewise.
    	* configure.tgt: Likewise.
    	* config/te-sparcaout.h: Delete.
    	* testsuite/gas/sun4/addend.d: Delete.
    	* testsuite/gas/sun4/addend.exp: Delete.
    	* testsuite/gas/sun4/addend.s: Delete.
    	* Makefile.in: Regenerate.
    	* po/POTFILES.in: Regenerate.
    ld/
    	* Makefile.am: Remove sparc-aout and sparc-coff support.
    	* configure.tgt: Likewise.
    	* testsuite/ld-elfvers/vers.exp: Likewise.
    	* testsuite/ld-elfvsb/elfvsb.exp: Likewise.
    	* testsuite/ld-elfweak/elfweak.exp: Likewise.
    	* testsuite/ld-shared/shared.exp: Likewise.
    	* emulparams/coff_sparc.sh: Delete.
    	* emulparams/sparcaout.sh: Delete.
    	* emulparams/sparclinux.sh: Delete.
    	* emulparams/sparcnbsd.sh: Delete.
    	* emulparams/sun4.sh: Delete.
    	* scripttempl/sparccoff.sc: Delete.
    	* Makefile.in: Regenerate.
    	* po/BLD-POTFILES.in: Regenerate.

Diff:
---
 bfd/ChangeLog                              |   19 +
 bfd/Makefile.am                            |   18 +-
 bfd/Makefile.in                            |   26 +-
 bfd/aout-sparcle.c                         |   37 -
 bfd/aoutf1.h                               |  747 --------
 bfd/cf-sparclynx.c                         |   29 -
 bfd/coff-sparc.c                           |  208 --
 bfd/config.bfd                             |  110 +-
 bfd/configure                              |    7 -
 bfd/configure.ac                           |    7 -
 bfd/demo64.c                               |   30 -
 bfd/po/SRC-POTFILES.in                     |    9 -
 bfd/sparclinux.c                           |  730 -------
 bfd/sparclynx.c                            |  245 ---
 bfd/sparcnetbsd.c                          |   39 -
 bfd/sunos.c                                | 2845 ----------------------------
 bfd/targets.c                              |   18 -
 binutils/ChangeLog                         |    5 +
 binutils/testsuite/lib/binutils-common.exp |   13 -
 gas/ChangeLog                              |   14 +
 gas/Makefile.am                            |    1 -
 gas/Makefile.in                            |    1 -
 gas/config/obj-coff.h                      |    4 -
 gas/config/tc-sparc.c                      |  200 +-
 gas/config/tc-sparc.h                      |   44 +-
 gas/config/te-sparcaout.h                  |   22 -
 gas/configure.tgt                          |   21 +-
 gas/po/POTFILES.in                         |    1 -
 gas/testsuite/gas/sun4/addend.d            |   13 -
 gas/testsuite/gas/sun4/addend.exp          |   23 -
 gas/testsuite/gas/sun4/addend.s            |   11 -
 ld/ChangeLog                               |   17 +
 ld/Makefile.am                             |   20 -
 ld/Makefile.in                             |   25 -
 ld/configure.tgt                           |   51 +-
 ld/emulparams/coff_sparc.sh                |    9 -
 ld/emulparams/sparcaout.sh                 |   10 -
 ld/emulparams/sparclinux.sh                |    9 -
 ld/emulparams/sparcnbsd.sh                 |    5 -
 ld/emulparams/sun4.sh                      |    7 -
 ld/po/BLD-POTFILES.in                      |    5 -
 ld/scripttempl/sparccoff.sc                |   62 -
 ld/testsuite/ld-elfvers/vers.exp           |    6 +-
 ld/testsuite/ld-elfvsb/elfvsb.exp          |   20 +-
 ld/testsuite/ld-elfweak/elfweak.exp        |    6 +-
 ld/testsuite/ld-shared/shared.exp          |   17 +-
 46 files changed, 104 insertions(+), 5662 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index cdf708c..efda071 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,24 @@
 2018-04-16  Alan Modra  <amodra@gmail.com>
 
+	* Makefile.am: Remove sparc-aout and sparc-coff support.
+	* config.bfd: Likewise.
+	* configure.ac: Likewise.
+	* targets.c: Likewise.
+	* aout-sparcle.c: Delete.
+	* aoutf1.h: Delete.
+	* cf-sparclynx.c: Delete.
+	* coff-sparc.c: Delete.
+	* demo64.c: Delete.
+	* sparclinux.c: Delete.
+	* sparclynx.c: Delete.
+	* sparcnetbsd.c: Delete.
+	* sunos.c: Delete.
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+	* po/SRC-POTFILES.in: Regenerate.
+
+2018-04-16  Alan Modra  <amodra@gmail.com>
+
 	* Makefile.am: Remove m68k-aout and m68k-coff support.
 	* aoutf1.h: Likewise.
 	* aoutx.h: Likewise.
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index 1e92647..9ba5db0 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -260,19 +260,16 @@ BFD32_BACKENDS = \
 	aout-arm.lo \
 	aout-cris.lo \
 	aout-ns32k.lo \
-	aout-sparcle.lo \
 	aout-tic30.lo \
 	aout32.lo \
 	armnetbsd.lo \
 	cf-i386lynx.lo \
-	cf-sparclynx.lo \
 	coff-arm.lo \
 	coff-go32.lo \
 	coff-i386.lo \
 	coff-mips.lo \
 	coff-rs6000.lo \
 	coff-sh.lo \
-	coff-sparc.lo \
 	coff-stgo32.lo \
 	coff-tic30.lo \
 	coff-tic4x.lo \
@@ -400,10 +397,6 @@ BFD32_BACKENDS = \
 	reloc16.lo \
 	riscix.lo \
 	som.lo \
-	sparclinux.lo \
-	sparclynx.lo \
-	sparcnetbsd.lo \
-	sunos.lo \
 	vax1knetbsd.lo \
 	vaxnetbsd.lo \
 	vms-lib.lo \
@@ -418,19 +411,16 @@ BFD32_BACKENDS_CFILES = \
 	aout-arm.c \
 	aout-cris.c \
 	aout-ns32k.c \
-	aout-sparcle.c \
 	aout-tic30.c \
 	aout32.c \
 	armnetbsd.c \
 	cf-i386lynx.c \
-	cf-sparclynx.c \
 	coff-arm.c \
 	coff-go32.c \
 	coff-i386.c \
 	coff-mips.c \
 	coff-rs6000.c \
 	coff-sh.c \
-	coff-sparc.c \
 	coff-stgo32.c \
 	coff-tic30.c \
 	coff-tic4x.c \
@@ -557,10 +547,6 @@ BFD32_BACKENDS_CFILES = \
 	reloc16.c \
 	riscix.c \
 	som.c \
-	sparclinux.c \
-	sparclynx.c \
-	sparcnetbsd.c \
-	sunos.c \
 	vax1knetbsd.c \
 	vaxnetbsd.c \
 	vms-lib.c \
@@ -585,7 +571,6 @@ BFD64_BACKENDS = \
 	coff-alpha.lo \
 	coff-x86_64.lo \
 	coff64-rs6000.lo \
-	demo64.lo \
 	elf32-ia64.lo \
 	elf32-mips.lo \
 	elf32-score.lo \
@@ -626,7 +611,6 @@ BFD64_BACKENDS_CFILES = \
 	coff-alpha.c \
 	coff-x86_64.c \
 	coff64-rs6000.c \
-	demo64.c \
 	elf32-mips.c \
 	elf32-score.c \
 	elf32-score7.c \
@@ -717,7 +701,7 @@ CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
 
 ## This is a list of all .h files which are in the source tree.
 SOURCE_HFILES = \
-	aout-target.h aoutf1.h aoutx.h coffcode.h coffswap.h ecoffswap.h \
+	aout-target.h aoutx.h coffcode.h coffswap.h ecoffswap.h \
 	elf-bfd.h elf-hppa.h elf-linux-core.h elf32-hppa.h \
 	elf64-hppa.h elfcode.h elfcore.h \
 	freebsd.h genlink.h go32stub.h \
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index a916c3b..37d02c3 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -594,19 +594,16 @@ BFD32_BACKENDS = \
 	aout-arm.lo \
 	aout-cris.lo \
 	aout-ns32k.lo \
-	aout-sparcle.lo \
 	aout-tic30.lo \
 	aout32.lo \
 	armnetbsd.lo \
 	cf-i386lynx.lo \
-	cf-sparclynx.lo \
 	coff-arm.lo \
 	coff-go32.lo \
 	coff-i386.lo \
 	coff-mips.lo \
 	coff-rs6000.lo \
 	coff-sh.lo \
-	coff-sparc.lo \
 	coff-stgo32.lo \
 	coff-tic30.lo \
 	coff-tic4x.lo \
@@ -734,10 +731,6 @@ BFD32_BACKENDS = \
 	reloc16.lo \
 	riscix.lo \
 	som.lo \
-	sparclinux.lo \
-	sparclynx.lo \
-	sparcnetbsd.lo \
-	sunos.lo \
 	vax1knetbsd.lo \
 	vaxnetbsd.lo \
 	vms-lib.lo \
@@ -752,19 +745,16 @@ BFD32_BACKENDS_CFILES = \
 	aout-arm.c \
 	aout-cris.c \
 	aout-ns32k.c \
-	aout-sparcle.c \
 	aout-tic30.c \
 	aout32.c \
 	armnetbsd.c \
 	cf-i386lynx.c \
-	cf-sparclynx.c \
 	coff-arm.c \
 	coff-go32.c \
 	coff-i386.c \
 	coff-mips.c \
 	coff-rs6000.c \
 	coff-sh.c \
-	coff-sparc.c \
 	coff-stgo32.c \
 	coff-tic30.c \
 	coff-tic4x.c \
@@ -891,10 +881,6 @@ BFD32_BACKENDS_CFILES = \
 	reloc16.c \
 	riscix.c \
 	som.c \
-	sparclinux.c \
-	sparclynx.c \
-	sparcnetbsd.c \
-	sunos.c \
 	vax1knetbsd.c \
 	vaxnetbsd.c \
 	vms-lib.c \
@@ -920,7 +906,6 @@ BFD64_BACKENDS = \
 	coff-alpha.lo \
 	coff-x86_64.lo \
 	coff64-rs6000.lo \
-	demo64.lo \
 	elf32-ia64.lo \
 	elf32-mips.lo \
 	elf32-score.lo \
@@ -961,7 +946,6 @@ BFD64_BACKENDS_CFILES = \
 	coff-alpha.c \
 	coff-x86_64.c \
 	coff64-rs6000.c \
-	demo64.c \
 	elf32-mips.c \
 	elf32-score.c \
 	elf32-score7.c \
@@ -1052,7 +1036,7 @@ BUILD_CFILES = \
 
 CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
 SOURCE_HFILES = \
-	aout-target.h aoutf1.h aoutx.h coffcode.h coffswap.h ecoffswap.h \
+	aout-target.h aoutx.h coffcode.h coffswap.h ecoffswap.h \
 	elf-bfd.h elf-hppa.h elf-linux-core.h elf32-hppa.h \
 	elf64-hppa.h elfcode.h elfcore.h \
 	freebsd.h genlink.h go32stub.h \
@@ -1227,7 +1211,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-arm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-cris.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-ns32k.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-sparcle.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-tic30.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout32.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout64.Plo@am__quote@
@@ -1241,7 +1224,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cf-i386lynx.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cf-sparclynx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cisco-core.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-alpha.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-arm.Plo@am__quote@
@@ -1251,7 +1233,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-mips.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-rs6000.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sh.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sparc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-stgo32.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic30.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic4x.Plo@am__quote@
@@ -1346,7 +1327,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-xtensa.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-z80.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-z8k.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/demo64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf1.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecoff.Plo@am__quote@
@@ -1517,13 +1497,9 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/section.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/som.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparclinux.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparclynx.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparcnetbsd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srec.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stab-syms.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stabs.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sunos.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syms.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/targets.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tekhex.Plo@am__quote@
diff --git a/bfd/aout-sparcle.c b/bfd/aout-sparcle.c
deleted file mode 100644
index 2c2ef82..0000000
--- a/bfd/aout-sparcle.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* BFD backend for sparc little-endian aout binaries.
-   Copyright (C) 1996-2018 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.  */
-
-#define TARGETNAME "a.out-sparc-little"
-
-/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
-   remove whitespace added here, and thus will fail to concatenate
-   the tokens.  */
-#define MY(OP) CONCAT2 (sparc_aout_le_,OP)
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "bfdlink.h"
-#include "libaout.h"
-
-#define MACHTYPE_OK(mtype) ((mtype) == M_SPARC || (mtype) == M_SPARCLET)
-
-/* Include the usual a.out support.  */
-#define TARGET_IS_LITTLE_ENDIAN_P
-#include "aoutf1.h"
diff --git a/bfd/aoutf1.h b/bfd/aoutf1.h
deleted file mode 100644
index cb8e403..0000000
--- a/bfd/aoutf1.h
+++ /dev/null
@@ -1,747 +0,0 @@
-/* A.out "format 1" file handling code for BFD.
-   Copyright (C) 1990-2018 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 "aout/sun4.h"
-#include "libaout.h"		/* BFD a.out internal data structures.  */
-
-#include "aout/aout64.h"
-#include "aout/stab_gnu.h"
-#include "aout/ar.h"
-
-/* This is needed to reject a NewsOS file, e.g. in
-   gdb/testsuite/gdb.t10/crossload.exp. <kingdon@cygnus.com>
-   I needed to add M_UNKNOWN to recognize a 68000 object, so this will
-   probably no longer reject a NewsOS object.  <ian@cygnus.com>.  */
-#ifndef MACHTYPE_OK
-#define MACHTYPE_OK(mtype) \
-  ((mtype) == M_SPARC && bfd_lookup_arch (bfd_arch_sparc, 0) != NULL)
-#endif
-
-/* The file @code{aoutf1.h} contains the code for BFD's
-   a.out back end.  Control over the generated back end is given by these
-   two preprocessor names:
-   @table @code
-   @item ARCH_SIZE
-   This value should be either 32 or 64, depending upon the size of an
-   int in the target format. It changes the sizes of the structs which
-   perform the memory/disk mapping of structures.
-
-   The 64 bit backend may only be used if the host compiler supports 64
-   ints (eg long long with gcc), by defining the name @code{BFD_HOST_64_BIT} in @code{bfd.h}.
-   With this name defined, @emph{all} bfd operations are performed with 64bit
-   arithmetic, not just those to a 64bit target.
-
-   @item TARGETNAME
-   The name put into the target vector.
-   @item
-   @end table.  */
-
-#if ARCH_SIZE == 64
-#define sunos_set_arch_mach sunos_64_set_arch_mach
-#define sunos_write_object_contents aout_64_sunos4_write_object_contents
-#else
-#define sunos_set_arch_mach sunos_32_set_arch_mach
-#define sunos_write_object_contents aout_32_sunos4_write_object_contents
-#endif
-
-/* Merge backend data into the output file.
-   This is necessary on sparclet-aout where we want the resultant machine
-   number to be M_SPARCLET if any input file is M_SPARCLET.  */
-
-#define MY_bfd_merge_private_bfd_data sunos_merge_private_bfd_data
-
-static bfd_boolean
-sunos_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
-{
-  bfd *obfd = info->output_bfd;
-  if (bfd_get_flavour (ibfd) != bfd_target_aout_flavour
-      || bfd_get_flavour (obfd) != bfd_target_aout_flavour)
-    return TRUE;
-
-  if (bfd_get_arch (obfd) == bfd_arch_sparc)
-    {
-      if (bfd_get_mach (obfd) < bfd_get_mach (ibfd))
-	bfd_set_arch_mach (obfd, bfd_arch_sparc, bfd_get_mach (ibfd));
-    }
-
-  return TRUE;
-}
-
-/* This is either sunos_32_set_arch_mach or sunos_64_set_arch_mach,
-   depending upon ARCH_SIZE.  */
-
-static void
-sunos_set_arch_mach (bfd *abfd, enum machine_type machtype)
-{
-  /* Determine the architecture and machine type of the object file.  */
-  enum bfd_architecture arch;
-  unsigned long machine;
-
-  switch (machtype)
-    {
-    case M_SPARC:
-      arch = bfd_arch_sparc;
-      machine = 0;
-      break;
-
-    case M_SPARCLET:
-      arch = bfd_arch_sparc;
-      machine = bfd_mach_sparc_sparclet;
-      break;
-
-    case M_SPARCLITE_LE:
-      arch = bfd_arch_sparc;
-      machine = bfd_mach_sparc_sparclite_le;
-      break;
-
-    case M_386:
-    case M_386_DYNIX:
-      arch = bfd_arch_i386;
-      machine = 0;
-      break;
-
-    default:
-      arch = bfd_arch_obscure;
-      machine = 0;
-      break;
-    }
-  bfd_set_arch_mach (abfd, arch, machine);
-}
-
-#define SET_ARCH_MACH(ABFD, EXECP) \
-  NAME(sunos,set_arch_mach) (ABFD, N_MACHTYPE (EXECP)); \
-  choose_reloc_size(ABFD);
-
-/* Determine the size of a relocation entry, based on the architecture.  */
-
-static void
-choose_reloc_size (bfd *abfd)
-{
-  switch (bfd_get_arch (abfd))
-    {
-    case bfd_arch_sparc:
-      obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE;
-      break;
-    default:
-      obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
-      break;
-    }
-}
-
-/* Write an object file in SunOS format.  Section contents have
-   already been written.  We write the file header, symbols, and
-   relocation.  The real name of this function is either
-   aout_64_sunos4_write_object_contents or
-   aout_32_sunos4_write_object_contents, depending upon ARCH_SIZE.  */
-
-static bfd_boolean
-sunos_write_object_contents (bfd *abfd)
-{
-  struct external_exec exec_bytes;
-  struct internal_exec *execp = exec_hdr (abfd);
-
-  /* Magic number, maestro, please!  */
-  switch (bfd_get_arch (abfd))
-    {
-    case bfd_arch_sparc:
-      switch (bfd_get_mach (abfd))
-	{
-	case bfd_mach_sparc_sparclet:
-	  N_SET_MACHTYPE (execp, M_SPARCLET);
-	  break;
-	case bfd_mach_sparc_sparclite_le:
-	  N_SET_MACHTYPE (execp, M_SPARCLITE_LE);
-	  break;
-	default:
-	  N_SET_MACHTYPE (execp, M_SPARC);
-	  break;
-	}
-      break;
-    case bfd_arch_i386:
-      N_SET_MACHTYPE (execp, M_386);
-      break;
-    default:
-      N_SET_MACHTYPE (execp, M_UNKNOWN);
-    }
-
-  choose_reloc_size (abfd);
-
-  N_SET_FLAGS (execp, aout_backend_info (abfd)->exec_hdr_flags);
-
-  N_SET_DYNAMIC (execp, (long)(bfd_get_file_flags (abfd) & DYNAMIC));
-
-  WRITE_HEADERS (abfd, execp);
-
-  return TRUE;
-}
-
-/* Core files.  */
-
-#define CORE_MAGIC   0x080456
-#define CORE_NAMELEN 16
-
-/* The core structure is taken from the Sun documentation.
-  Unfortunately, they don't document the FPA structure, or at least I
-  can't find it easily.  Fortunately the core header contains its own
-  length.  So this shouldn't cause problems, except for c_ucode, which
-  so far we don't use but is easy to find with a little arithmetic.  */
-
-/* But the reg structure can be gotten from the SPARC processor handbook.
-  This really should be in a GNU include file though so that gdb can use
-  the same info.  */
-struct regs
-{
-  int r_psr;
-  int r_pc;
-  int r_npc;
-  int r_y;
-  int r_g1;
-  int r_g2;
-  int r_g3;
-  int r_g4;
-  int r_g5;
-  int r_g6;
-  int r_g7;
-  int r_o0;
-  int r_o1;
-  int r_o2;
-  int r_o3;
-  int r_o4;
-  int r_o5;
-  int r_o6;
-  int r_o7;
-};
-
-/* Taken from Sun documentation: */
-
-/* FIXME:  It's worse than we expect.  This struct contains TWO substructs
-  neither of whose size we know, WITH STUFF IN BETWEEN THEM!  We can't
-  even portably access the stuff in between!  */
-
-struct external_sparc_core
-{
-  int c_magic;				/* Corefile magic number.  */
-  int c_len;				/* Sizeof (struct core).  */
-#define	SPARC_CORE_LEN	432
-  struct regs c_regs;			/* General purpose registers -- MACHDEP SIZE.  */
-  struct external_exec c_aouthdr;	/* A.out header.  */
-  int c_signo;				/* Killing signal, if any.  */
-  int c_tsize;				/* Text size (bytes).  */
-  int c_dsize;				/* Data size (bytes).  */
-  int c_ssize;				/* Stack size (bytes).  */
-  char c_cmdname[CORE_NAMELEN + 1];	/* Command name.  */
-  double fp_stuff[1];			/* External FPU state (size unknown by us).  */
-  /* The type "double" is critical here, for alignment.
-     SunOS declares a struct here, but the struct's
-     alignment is double since it contains doubles.  */
-  int c_ucode;				/* Exception no. from u_code.  */
-  /* This member is not accessible by name since
-     we don't portably know the size of fp_stuff.  */
-};
-
-/* Core files generated by the BCP (the part of Solaris which allows
-   it to run SunOS4 a.out files).  */
-struct external_solaris_bcp_core
-{
-  int c_magic;				/* Corefile magic number.  */
-  int c_len;				/* Sizeof (struct core).  */
-#define	SOLARIS_BCP_CORE_LEN	456
-  struct regs c_regs;			/* General purpose registers -- MACHDEP SIZE.  */
-  int c_exdata_vp;			/* Exdata structure.  */
-  int c_exdata_tsize;
-  int c_exdata_dsize;
-  int c_exdata_bsize;
-  int c_exdata_lsize;
-  int c_exdata_nshlibs;
-  short c_exdata_mach;
-  short c_exdata_mag;
-  int c_exdata_toffset;
-  int c_exdata_doffset;
-  int c_exdata_loffset;
-  int c_exdata_txtorg;
-  int c_exdata_datorg;
-  int c_exdata_entloc;
-  int c_signo;				/* Killing signal, if any.  */
-  int c_tsize;				/* Text size (bytes).  */
-  int c_dsize;				/* Data size (bytes).  */
-  int c_ssize;				/* Stack size (bytes).  */
-  char c_cmdname[CORE_NAMELEN + 1];	/* Command name.  */
-  double fp_stuff[1];			/* External FPU state (size unknown by us).  */
-  /* The type "double" is critical here, for alignment.
-     SunOS declares a struct here, but the struct's
-     alignment is double since it contains doubles.  */
-  int c_ucode;				/* Exception no. from u_code.  */
-  /* This member is not accessible by name since
-     we don't portably know the size of fp_stuff.  */
-};
-
-struct external_sun3_core
-{
-  int c_magic;				/* Corefile magic number.  */
-  int c_len;				/* Sizeof (struct core).  */
-#define	SUN3_CORE_LEN	826		/* As of SunOS 4.1.1.  */
-  int c_regs[18];			/* General purpose registers -- MACHDEP SIZE.  */
-  struct external_exec c_aouthdr;	/* A.out header.  */
-  int c_signo;				/* Killing signal, if any.  */
-  int c_tsize;				/* Text size (bytes).  */
-  int c_dsize;				/* Data size (bytes).  */
-  int c_ssize;				/* Stack size (bytes).  */
-  char c_cmdname[CORE_NAMELEN + 1];	/* Command name.  */
-  double fp_stuff[1];			/* External FPU state (size unknown by us).  */
-  /* The type "double" is critical here, for alignment.
-     SunOS declares a struct here, but the struct's
-     alignment is double since it contains doubles.  */
-  int c_ucode;				/* Exception no. from u_code.  */
-  /* This member is not accessible by name since
-     we don't portably know the size of fp_stuff.  */
-};
-
-struct internal_sunos_core
-{
-  int c_magic;				/* Corefile magic number.  */
-  int c_len;				/* Sizeof (struct core).  */
-  long c_regs_pos;			/* File offset of General purpose registers.  */
-  int c_regs_size;			/* Size of General purpose registers.  */
-  struct internal_exec c_aouthdr;	/* A.out header.  */
-  int c_signo;				/* Killing signal, if any.  */
-  int c_tsize;				/* Text size (bytes).  */
-  int c_dsize;				/* Data size (bytes).  */
-  bfd_vma c_data_addr;			/* Data start (address).  */
-  int c_ssize;				/* Stack size (bytes).  */
-  bfd_vma c_stacktop;			/* Stack top (address).  */
-  char c_cmdname[CORE_NAMELEN + 1];	/* Command name.  */
-  long fp_stuff_pos;			/* File offset of external FPU state (regs).  */
-  int fp_stuff_size;			/* Size of it.  */
-  int c_ucode;				/* Exception no. from u_code.  */
-};
-
-/* Byte-swap in the Sun-3 core structure.  */
-
-static void
-swapcore_sun3 (bfd *abfd, char *ext, struct internal_sunos_core *intcore)
-{
-  struct external_sun3_core *extcore = (struct external_sun3_core *) ext;
-
-  intcore->c_magic = H_GET_32 (abfd, &extcore->c_magic);
-  intcore->c_len = H_GET_32 (abfd, &extcore->c_len);
-  intcore->c_regs_pos = offsetof (struct external_sun3_core, c_regs);
-  intcore->c_regs_size = sizeof (extcore->c_regs);
-#if ARCH_SIZE == 64
-  aout_64_swap_exec_header_in
-#else
-  aout_32_swap_exec_header_in
-#endif
-    (abfd, &extcore->c_aouthdr, &intcore->c_aouthdr);
-  intcore->c_signo = H_GET_32 (abfd, &extcore->c_signo);
-  intcore->c_tsize = H_GET_32 (abfd, &extcore->c_tsize);
-  intcore->c_dsize = H_GET_32 (abfd, &extcore->c_dsize);
-  intcore->c_data_addr = N_DATADDR (&intcore->c_aouthdr);
-  intcore->c_ssize = H_GET_32 (abfd, &extcore->c_ssize);
-  memcpy (intcore->c_cmdname, extcore->c_cmdname, sizeof (intcore->c_cmdname));
-  intcore->fp_stuff_pos = offsetof (struct external_sun3_core, fp_stuff);
-  /* FP stuff takes up whole rest of struct, except c_ucode.  */
-  intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -
-    offsetof (struct external_sun3_core, fp_stuff);
-  /* Ucode is the last thing in the struct -- just before the end.  */
-  intcore->c_ucode = H_GET_32 (abfd,
-			       (intcore->c_len
-				- sizeof (extcore->c_ucode)
-				+ (unsigned char *) extcore));
-  intcore->c_stacktop = 0x0E000000;	/* By experimentation.  */
-}
-
-/* Byte-swap in the Sparc core structure.  */
-
-static void
-swapcore_sparc (bfd *abfd, char *ext, struct internal_sunos_core *intcore)
-{
-  struct external_sparc_core *extcore = (struct external_sparc_core *) ext;
-
-  intcore->c_magic = H_GET_32 (abfd, &extcore->c_magic);
-  intcore->c_len = H_GET_32 (abfd, &extcore->c_len);
-  intcore->c_regs_pos = offsetof (struct external_sparc_core, c_regs);
-  intcore->c_regs_size = sizeof (extcore->c_regs);
-#if ARCH_SIZE == 64
-  aout_64_swap_exec_header_in
-#else
-  aout_32_swap_exec_header_in
-#endif
-    (abfd, &extcore->c_aouthdr, &intcore->c_aouthdr);
-  intcore->c_signo = H_GET_32 (abfd, &extcore->c_signo);
-  intcore->c_tsize = H_GET_32 (abfd, &extcore->c_tsize);
-  intcore->c_dsize = H_GET_32 (abfd, &extcore->c_dsize);
-  intcore->c_data_addr = N_DATADDR (&intcore->c_aouthdr);
-  intcore->c_ssize = H_GET_32 (abfd, &extcore->c_ssize);
-  memcpy (intcore->c_cmdname, extcore->c_cmdname, sizeof (intcore->c_cmdname));
-  intcore->fp_stuff_pos = offsetof (struct external_sparc_core, fp_stuff);
-  /* FP stuff takes up whole rest of struct, except c_ucode.  */
-  intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -
-    offsetof (struct external_sparc_core, fp_stuff);
-  /* Ucode is the last thing in the struct -- just before the end.  */
-  intcore->c_ucode = H_GET_32 (abfd,
-			       (intcore->c_len
-				- sizeof (extcore->c_ucode)
-				+ (unsigned char *) extcore));
-
-  /* Supposedly the user stack grows downward from the bottom of kernel memory.
-     Presuming that this remains true, this definition will work.  */
-  /* Now sun has provided us with another challenge.  The value is different
-     for sparc2 and sparc10 (both running SunOS 4.1.3).  We pick one or
-     the other based on the current value of the stack pointer.  This
-     loses (a) if the stack pointer has been clobbered, or (b) if the stack
-     is larger than 128 megabytes.
-
-     It's times like these you're glad they're switching to ELF.
-
-     Note that using include files or nlist on /vmunix would be wrong,
-     because we want the value for this core file, no matter what kind of
-     machine we were compiled on or are running on.  */
-#define SPARC_USRSTACK_SPARC2 ((bfd_vma)0xf8000000)
-#define SPARC_USRSTACK_SPARC10 ((bfd_vma)0xf0000000)
-  {
-    bfd_vma sp = H_GET_32 (abfd, &extcore->c_regs.r_o6);
-    if (sp < SPARC_USRSTACK_SPARC10)
-      intcore->c_stacktop = SPARC_USRSTACK_SPARC10;
-    else
-      intcore->c_stacktop = SPARC_USRSTACK_SPARC2;
-  }
-}
-
-/* Byte-swap in the Solaris BCP core structure.  */
-
-static void
-swapcore_solaris_bcp (bfd *abfd, char *ext, struct internal_sunos_core *intcore)
-{
-  struct external_solaris_bcp_core *extcore =
-    (struct external_solaris_bcp_core *) ext;
-
-  intcore->c_magic = H_GET_32 (abfd, &extcore->c_magic);
-  intcore->c_len = H_GET_32 (abfd, &extcore->c_len);
-  intcore->c_regs_pos = offsetof (struct external_solaris_bcp_core, c_regs);
-  intcore->c_regs_size = sizeof (extcore->c_regs);
-
-  /* The Solaris BCP exdata structure does not contain an a_syms field,
-     so we are unable to synthesize an internal exec header.
-     Luckily we are able to figure out the start address of the data section,
-     which is the only thing needed from the internal exec header,
-     from the exdata structure.
-
-     As of Solaris 2.3, BCP core files for statically linked executables
-     are buggy. The exdata structure is not properly filled in, and
-     the data section is written from address zero instead of the data
-     start address.  */
-  memset ((void *) &intcore->c_aouthdr, 0, sizeof (struct internal_exec));
-  intcore->c_data_addr = H_GET_32 (abfd, &extcore->c_exdata_datorg);
-  intcore->c_signo = H_GET_32 (abfd, &extcore->c_signo);
-  intcore->c_tsize = H_GET_32 (abfd, &extcore->c_tsize);
-  intcore->c_dsize = H_GET_32 (abfd, &extcore->c_dsize);
-  intcore->c_ssize = H_GET_32 (abfd, &extcore->c_ssize);
-  memcpy (intcore->c_cmdname, extcore->c_cmdname, sizeof (intcore->c_cmdname));
-  intcore->fp_stuff_pos =
-    offsetof (struct external_solaris_bcp_core, fp_stuff);
-  /* FP stuff takes up whole rest of struct, except c_ucode.  */
-  intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -
-    offsetof (struct external_solaris_bcp_core, fp_stuff);
-  /* Ucode is the last thing in the struct -- just before the end */
-  intcore->c_ucode = H_GET_32 (abfd,
-			       (intcore->c_len
-				- sizeof (extcore->c_ucode)
-				+ (unsigned char *) extcore));
-
-  /* Supposedly the user stack grows downward from the bottom of kernel memory.
-     Presuming that this remains true, this definition will work.  */
-  /* Now sun has provided us with another challenge.  The value is different
-     for sparc2 and sparc10 (both running SunOS 4.1.3).  We pick one or
-     the other based on the current value of the stack pointer.  This
-     loses (a) if the stack pointer has been clobbered, or (b) if the stack
-     is larger than 128 megabytes.
-
-     It's times like these you're glad they're switching to ELF.
-
-     Note that using include files or nlist on /vmunix would be wrong,
-     because we want the value for this core file, no matter what kind of
-     machine we were compiled on or are running on.  */
-#define SPARC_USRSTACK_SPARC2 ((bfd_vma)0xf8000000)
-#define SPARC_USRSTACK_SPARC10 ((bfd_vma)0xf0000000)
-  {
-    bfd_vma sp = H_GET_32 (abfd, &extcore->c_regs.r_o6);
-    if (sp < SPARC_USRSTACK_SPARC10)
-      intcore->c_stacktop = SPARC_USRSTACK_SPARC10;
-    else
-      intcore->c_stacktop = SPARC_USRSTACK_SPARC2;
-  }
-}
-
-/* Need this cast because ptr is really void *.  */
-#define core_hdr(bfd)      ((bfd)->tdata.sun_core_data)
-#define core_datasec(bfd)  (core_hdr (bfd)->data_section)
-#define core_stacksec(bfd) (core_hdr (bfd)->stack_section)
-#define core_regsec(bfd)   (core_hdr (bfd)->reg_section)
-#define core_reg2sec(bfd)  (core_hdr (bfd)->reg2_section)
-
-/* These are stored in the bfd's tdata.  */
-struct sun_core_struct
-{
-  struct internal_sunos_core *hdr;	/* Core file header.  */
-  asection *data_section;
-  asection *stack_section;
-  asection *reg_section;
-  asection *reg2_section;
-};
-
-static const bfd_target *
-sunos4_core_file_p (bfd *abfd)
-{
-  unsigned char longbuf[4];	/* Raw bytes of various header fields.  */
-  bfd_size_type core_size, amt;
-  unsigned long core_mag;
-  struct internal_sunos_core *core;
-  char *extcore;
-  struct mergem
-    {
-      struct sun_core_struct suncoredata;
-      struct internal_sunos_core internal_sunos_core;
-      char external_core[1];
-    } *mergem;
-  flagword flags;
-
-  if (bfd_bread ((void *) longbuf, (bfd_size_type) sizeof (longbuf), abfd)
-      != sizeof (longbuf))
-    return NULL;
-  core_mag = H_GET_32 (abfd, longbuf);
-
-  if (core_mag != CORE_MAGIC)
-    return NULL;
-
-  /* SunOS core headers can vary in length; second word is size; */
-  if (bfd_bread ((void *) longbuf, (bfd_size_type) sizeof (longbuf), abfd)
-      != sizeof (longbuf))
-    return NULL;
-  core_size = H_GET_32 (abfd, longbuf);
-  /* Sanity check.  */
-  if (core_size > 20000)
-    return NULL;
-
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    return NULL;
-
-  amt = core_size + sizeof (struct mergem);
-  mergem = bfd_zalloc (abfd, amt);
-  if (mergem == NULL)
-    return NULL;
-
-  extcore = mergem->external_core;
-
-  if ((bfd_bread ((void *) extcore, core_size, abfd)) != core_size)
-    {
-    loser:
-      bfd_release (abfd, (char *) mergem);
-      abfd->tdata.any = NULL;
-      bfd_section_list_clear (abfd);
-      return NULL;
-    }
-
-  /* Validate that it's a core file we know how to handle, due to sun
-     botching the positioning of registers and other fields in a machine
-     dependent way.  */
-  core = &mergem->internal_sunos_core;
-  switch (core_size)
-    {
-    case SPARC_CORE_LEN:
-      swapcore_sparc (abfd, extcore, core);
-      break;
-    case SUN3_CORE_LEN:
-      swapcore_sun3 (abfd, extcore, core);
-      break;
-    case SOLARIS_BCP_CORE_LEN:
-      swapcore_solaris_bcp (abfd, extcore, core);
-      break;
-    default:
-      bfd_set_error (bfd_error_system_call);	/* FIXME.  */
-      goto loser;
-    }
-
-  abfd->tdata.sun_core_data = &mergem->suncoredata;
-  abfd->tdata.sun_core_data->hdr = core;
-
-  /* Create the sections.  */
-  flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
-  core_stacksec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".stack",
-							     flags);
-  if (core_stacksec (abfd) == NULL)
-    /* bfd_release frees everything allocated after it's arg.  */
-    goto loser;
-
-  flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
-  core_datasec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".data",
-							    flags);
-  if (core_datasec (abfd) == NULL)
-    goto loser;
-
-  flags = SEC_HAS_CONTENTS;
-  core_regsec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg",
-							   flags);
-  if (core_regsec (abfd) == NULL)
-    goto loser;
-
-  flags = SEC_HAS_CONTENTS;
-  core_reg2sec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg2",
-							    flags);
-  if (core_reg2sec (abfd) == NULL)
-    goto loser;
-
-  core_stacksec (abfd)->size = core->c_ssize;
-  core_datasec (abfd)->size = core->c_dsize;
-  core_regsec (abfd)->size = core->c_regs_size;
-  core_reg2sec (abfd)->size = core->fp_stuff_size;
-
-  core_stacksec (abfd)->vma = (core->c_stacktop - core->c_ssize);
-  core_datasec (abfd)->vma = core->c_data_addr;
-  core_regsec (abfd)->vma = 0;
-  core_reg2sec (abfd)->vma = 0;
-
-  core_stacksec (abfd)->filepos = core->c_len + core->c_dsize;
-  core_datasec (abfd)->filepos = core->c_len;
-  /* We'll access the regs afresh in the core file, like any section:  */
-  core_regsec (abfd)->filepos = (file_ptr) core->c_regs_pos;
-  core_reg2sec (abfd)->filepos = (file_ptr) core->fp_stuff_pos;
-
-  /* Align to word at least.  */
-  core_stacksec (abfd)->alignment_power = 2;
-  core_datasec (abfd)->alignment_power = 2;
-  core_regsec (abfd)->alignment_power = 2;
-  core_reg2sec (abfd)->alignment_power = 2;
-
-  return abfd->xvec;
-}
-
-static char *
-sunos4_core_file_failing_command (bfd *abfd)
-{
-  return core_hdr (abfd)->hdr->c_cmdname;
-}
-
-static int
-sunos4_core_file_failing_signal (bfd *abfd)
-{
-  return core_hdr (abfd)->hdr->c_signo;
-}
-
-static bfd_boolean
-sunos4_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
-{
-  if (core_bfd->xvec != exec_bfd->xvec)
-    {
-      bfd_set_error (bfd_error_system_call);
-      return FALSE;
-    }
-
-  /* Solaris core files do not include an aouthdr.  */
-  if ((core_hdr (core_bfd)->hdr)->c_len == SOLARIS_BCP_CORE_LEN)
-    return TRUE;
-
-  return memcmp ((char *) &((core_hdr (core_bfd)->hdr)->c_aouthdr),
-		 (char *) exec_hdr (exec_bfd),
-		 sizeof (struct internal_exec)) == 0;
-}
-
-#define MY_set_sizes sunos4_set_sizes
-
-static bfd_boolean
-sunos4_set_sizes (bfd *abfd)
-{
-  switch (bfd_get_arch (abfd))
-    {
-    default:
-      return FALSE;
-    case bfd_arch_sparc:
-      adata (abfd).page_size = 0x2000;
-      adata (abfd).segment_size = 0x2000;
-      adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE;
-      return TRUE;
-    }
-}
-
-/* We default to setting the toolversion field to 1, as is required by
-   SunOS.  */
-#ifndef MY_exec_hdr_flags
-#define MY_exec_hdr_flags 1
-#endif
-
-#ifndef MY_entry_is_text_address
-#define MY_entry_is_text_address 0
-#endif
-#ifndef MY_add_dynamic_symbols
-#define MY_add_dynamic_symbols 0
-#endif
-#ifndef MY_add_one_symbol
-#define MY_add_one_symbol 0
-#endif
-#ifndef MY_link_dynamic_object
-#define MY_link_dynamic_object 0
-#endif
-#ifndef MY_write_dynamic_symbol
-#define MY_write_dynamic_symbol 0
-#endif
-#ifndef MY_check_dynamic_reloc
-#define MY_check_dynamic_reloc 0
-#endif
-#ifndef MY_finish_dynamic_link
-#define MY_finish_dynamic_link 0
-#endif
-
-static const struct aout_backend_data sunos4_aout_backend =
-{
-  0,				/* Zmagic files are not contiguous.  */
-  1,				/* Text includes header.  */
-  MY_entry_is_text_address,
-  MY_exec_hdr_flags,
-  0,				/* Default text vma.  */
-  sunos4_set_sizes,
-  0,				/* Header is counted in zmagic text.  */
-  MY_add_dynamic_symbols,
-  MY_add_one_symbol,
-  MY_link_dynamic_object,
-  MY_write_dynamic_symbol,
-  MY_check_dynamic_reloc,
-  MY_finish_dynamic_link
-};
-
-#define	MY_core_file_failing_command	sunos4_core_file_failing_command
-#define	MY_core_file_failing_signal	sunos4_core_file_failing_signal
-#define	MY_core_file_matches_executable_p sunos4_core_file_matches_executable_p
-
-#define MY_bfd_debug_info_start		_bfd_void_bfd
-#define MY_bfd_debug_info_end		_bfd_void_bfd
-#define MY_bfd_debug_info_accumulate	_bfd_void_bfd_asection
-#define MY_core_file_p			sunos4_core_file_p
-#define MY_write_object_contents	NAME(aout, sunos4_write_object_contents)
-#define MY_backend_data			& sunos4_aout_backend
-
-#ifndef TARGET_IS_LITTLE_ENDIAN_P
-#define TARGET_IS_BIG_ENDIAN_P
-#endif
-
-#include "aout-target.h"
diff --git a/bfd/cf-sparclynx.c b/bfd/cf-sparclynx.c
deleted file mode 100644
index eda3045..0000000
--- a/bfd/cf-sparclynx.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* BFD back-end for Sparc COFF LynxOS files.
-   Copyright (C) 1993-2018 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.  */
-
-#define TARGET_SYM	sparc_coff_lynx_vec
-#define TARGET_NAME	"coff-sparc-lynx"
-
-#define LYNXOS
-
-#define COFF_LONG_FILENAMES
-
-#include "coff-sparc.c"
diff --git a/bfd/coff-sparc.c b/bfd/coff-sparc.c
deleted file mode 100644
index 7bdb79a..0000000
--- a/bfd/coff-sparc.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* BFD back-end for Sparc COFF files.
-   Copyright (C) 1990-2018 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/sparc.h"
-#include "coff/internal.h"
-#include "libcoff.h"
-
-#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3)
-
-#define BADMAG(x) ((x).f_magic != SPARCMAGIC && (x).f_magic != LYNXCOFFMAGIC)
-
-/* The page size is a guess based on ELF.  */
-#define COFF_PAGE_SIZE 0x10000
-
-enum reloc_type
-  {
-    R_SPARC_NONE = 0,
-    R_SPARC_8,		R_SPARC_16,		R_SPARC_32,
-    R_SPARC_DISP8,	R_SPARC_DISP16,		R_SPARC_DISP32,
-    R_SPARC_WDISP30,	R_SPARC_WDISP22,
-    R_SPARC_HI22,	R_SPARC_22,
-    R_SPARC_13,		R_SPARC_LO10,
-    R_SPARC_GOT10,	R_SPARC_GOT13,		R_SPARC_GOT22,
-    R_SPARC_PC10,	R_SPARC_PC22,
-    R_SPARC_WPLT30,
-    R_SPARC_COPY,
-    R_SPARC_GLOB_DAT,	R_SPARC_JMP_SLOT,
-    R_SPARC_RELATIVE,
-    R_SPARC_UA32,
-    R_SPARC_max
-  };
-
-/* This is stolen pretty directly from elf.c.  */
-
-static bfd_reloc_status_type
-bfd_coff_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-			arelent *reloc_entry,
-			asymbol *symbol,
-			void * data ATTRIBUTE_UNUSED,
-			asection *input_section,
-			bfd *output_bfd,
-			char **error_message ATTRIBUTE_UNUSED)
-{
-  if (output_bfd != (bfd *) NULL
-      && (symbol->flags & BSF_SECTION_SYM) == 0)
-    {
-      reloc_entry->address += input_section->output_offset;
-      return bfd_reloc_ok;
-    }
-
-  return bfd_reloc_continue;
-}
-
-static reloc_howto_type coff_sparc_howto_table[] =
-{
-  HOWTO(R_SPARC_NONE,    0,3, 0,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_NONE",    FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_8,       0,0, 8,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_8",       FALSE,0,0x000000ff,TRUE),
-  HOWTO(R_SPARC_16,      0,1,16,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_16",      FALSE,0,0x0000ffff,TRUE),
-  HOWTO(R_SPARC_32,      0,2,32,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_32",      FALSE,0,0xffffffff,TRUE),
-  HOWTO(R_SPARC_DISP8,   0,0, 8,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_DISP8",   FALSE,0,0x000000ff,TRUE),
-  HOWTO(R_SPARC_DISP16,  0,1,16,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_DISP16",  FALSE,0,0x0000ffff,TRUE),
-  HOWTO(R_SPARC_DISP32,  0,2,32,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_DISP32",  FALSE,0,0x00ffffff,TRUE),
-  HOWTO(R_SPARC_WDISP30, 2,2,30,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_WDISP30", FALSE,0,0x3fffffff,TRUE),
-  HOWTO(R_SPARC_WDISP22, 2,2,22,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_WDISP22", FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_HI22,   10,2,22,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_HI22",    FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_22,      0,2,22,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_22",      FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_13,      0,2,13,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_13",      FALSE,0,0x00001fff,TRUE),
-  HOWTO(R_SPARC_LO10,    0,2,10,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_LO10",    FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_GOT10,   0,2,10,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_GOT10",   FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_GOT13,   0,2,13,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_GOT13",   FALSE,0,0x00001fff,TRUE),
-  HOWTO(R_SPARC_GOT22,  10,2,22,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_GOT22",   FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_PC10,    0,2,10,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_PC10",    FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_PC22,    0,2,22,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_PC22",    FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_WPLT30,  0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_WPLT30",  FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_COPY,    0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_COPY",    FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_GLOB_DAT,0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_GLOB_DAT",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_JMP_SLOT,0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_JMP_SLOT",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_RELATIVE,0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_RELATIVE",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_UA32,    0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_UA32",    FALSE,0,0x00000000,TRUE),
-};
-
-struct coff_reloc_map
-{
-  bfd_reloc_code_real_type bfd_reloc_val;
-  unsigned char coff_reloc_val;
-};
-
-static const struct coff_reloc_map sparc_reloc_map[] =
-{
-  { BFD_RELOC_NONE, R_SPARC_NONE, },
-  { BFD_RELOC_16, R_SPARC_16, },
-  { BFD_RELOC_8, R_SPARC_8 },
-  { BFD_RELOC_8_PCREL, R_SPARC_DISP8 },
-  { BFD_RELOC_CTOR, R_SPARC_32 }, /* @@ Assumes 32 bits.  */
-  { BFD_RELOC_32, R_SPARC_32 },
-  { BFD_RELOC_32_PCREL, R_SPARC_DISP32 },
-  { BFD_RELOC_HI22, R_SPARC_HI22 },
-  { BFD_RELOC_LO10, R_SPARC_LO10, },
-  { BFD_RELOC_32_PCREL_S2, R_SPARC_WDISP30 },
-  { BFD_RELOC_SPARC22, R_SPARC_22 },
-  { BFD_RELOC_SPARC13, R_SPARC_13 },
-  { BFD_RELOC_SPARC_GOT10, R_SPARC_GOT10 },
-  { BFD_RELOC_SPARC_GOT13, R_SPARC_GOT13 },
-  { BFD_RELOC_SPARC_GOT22, R_SPARC_GOT22 },
-  { BFD_RELOC_SPARC_PC10, R_SPARC_PC10 },
-  { BFD_RELOC_SPARC_PC22, R_SPARC_PC22 },
-  { BFD_RELOC_SPARC_WPLT30, R_SPARC_WPLT30 },
-  { BFD_RELOC_SPARC_COPY, R_SPARC_COPY },
-  { BFD_RELOC_SPARC_GLOB_DAT, R_SPARC_GLOB_DAT },
-  { BFD_RELOC_SPARC_JMP_SLOT, R_SPARC_JMP_SLOT },
-  { BFD_RELOC_SPARC_RELATIVE, R_SPARC_RELATIVE },
-  { BFD_RELOC_SPARC_WDISP22, R_SPARC_WDISP22 },
-  /*  { BFD_RELOC_SPARC_UA32, R_SPARC_UA32 }, not used?? */
-};
-
-static reloc_howto_type *
-coff_sparc_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			      bfd_reloc_code_real_type code)
-{
-  unsigned int i;
-  for (i = 0; i < sizeof (sparc_reloc_map) / sizeof (struct coff_reloc_map); i++)
-    {
-      if (sparc_reloc_map[i].bfd_reloc_val == code)
-	return &coff_sparc_howto_table[(int) sparc_reloc_map[i].coff_reloc_val];
-    }
-  return 0;
-}
-#define coff_bfd_reloc_type_lookup	coff_sparc_reloc_type_lookup
-
-static reloc_howto_type *
-coff_sparc_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			      const char *r_name)
-{
-  unsigned int i;
-
-  for (i = 0;
-       i < (sizeof (coff_sparc_howto_table)
-	    / sizeof (coff_sparc_howto_table[0]));
-       i++)
-    if (coff_sparc_howto_table[i].name != NULL
-	&& strcasecmp (coff_sparc_howto_table[i].name, r_name) == 0)
-      return &coff_sparc_howto_table[i];
-
-  return NULL;
-}
-#define coff_bfd_reloc_name_lookup coff_sparc_reloc_name_lookup
-
-static void
-rtype2howto (arelent *cache_ptr, struct internal_reloc *dst)
-{
-  BFD_ASSERT (dst->r_type < (unsigned int) R_SPARC_max);
-  cache_ptr->howto = &coff_sparc_howto_table[dst->r_type];
-}
-
-#define RTYPE2HOWTO(internal, relocentry) rtype2howto(internal,relocentry)
-
-#define SWAP_IN_RELOC_OFFSET	H_GET_32
-#define SWAP_OUT_RELOC_OFFSET	H_PUT_32
-#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr) \
-  cache_ptr->addend = reloc.r_offset;
-
-/* Clear the r_spare field in relocs.  */
-#define SWAP_OUT_RELOC_EXTRA(abfd,src,dst) \
-  do { \
-       dst->r_spare[0] = 0; \
-       dst->r_spare[1] = 0; \
-     } while (0)
-
-#define __A_MAGIC_SET__
-
-/* Enable Sparc-specific hacks in coffcode.h.  */
-
-#define COFF_SPARC
-
-#define bfd_pe_print_pdata	NULL
-
-#include "coffcode.h"
-
-#ifndef TARGET_SYM
-#define TARGET_SYM sparc_coff_vec
-#endif
-
-#ifndef TARGET_NAME
-#define TARGET_NAME "coff-sparc"
-#endif
-
-CREATE_BIG_COFF_TARGET_VEC (TARGET_SYM, TARGET_NAME, D_PAGED, 0, '_', NULL, COFF_SWAP_TABLE)
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 10bc1df..23800c5 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -84,14 +84,6 @@ case $targ in
  mips*-*-lnews* | \
  mips*-*-sysv* | mips*-*-riscos* | \
  powerpc-*-lynxos* | powerpc-*-windiss* | \
- sparclet-*-aout* | \
- sparc86x-*-aout* | \
- sparc*-*-chorus* | \
- sparc-*-linux*aout* | \
- sparc-*-netbsdaout* | \
- sparc-*-openbsd[0-2].* | sparc-*-openbsd3.[0-1] | \
- sparc64-*-aout* | \
- sparc*-*-coff* | \
  null)
     if test "x$enable_obsolete" != xyes; then
       echo "*** Configuration $targ is obsolete." >&2
@@ -144,7 +136,11 @@ case $targ in
  maxq-*-coff | \
  mips*el-*-rtems* | \
  sh*-*-symbianelf* | sh5*-*-* | sh64*-*-* | \
+ sparc*-*-*aout* | \
+ sparc*-*-chorus* | \
+ sparc*-*-coff* | \
  sparc-*-lynxos* | \
+ sparc-*-openbsd[0-2].* | sparc-*-openbsd3.[0-1] | \
  tahoe-*-* | \
  vax-*-bsd* | vax-*-ultrix* | vax-*-vms* | \
  w65-*-* | \
@@ -329,15 +325,6 @@ case "${targ}" in
     targ_selvecs=alpha_vms_lib_txt_vec
     want64=true
     ;;
-  sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu)
-    targ_defvec=sparc_elf64_fbsd_vec
-    targ_selvecs="sparc_elf64_vec sparc_elf32_vec sparc_aout_sunos_be_vec"
-    ;;
-  sparc64-*-netbsd* | sparc64-*-openbsd*)
-    targ_defvec=sparc_elf64_vec
-    targ_selvecs="sparc_elf32_vec sparc_aout_sunos_be_vec"
-    want64=true
-    ;;
 #endif /* BFD64 */
 
   am33_2.0-*-linux*)
@@ -1407,96 +1394,35 @@ case "${targ}" in
     targ_underscore=yes
     ;;
 
-  sparclet-*-aout*)
-    targ_defvec=sparc_aout_sunos_be_vec
-    targ_selvecs=sparc_aout_le_vec
-    targ_underscore=yes
-    ;;
-  sparc86x-*-aout*)
-    targ_defvec=sparc_aout_sunos_be_vec
-    targ_underscore=yes
-    ;;
-  sparclite-*-elf* | sparc86x-*-elf*)
-    targ_defvec=sparc_elf32_vec
-    ;;
-  sparc*-*-chorus*)
-    targ_defvec=sparc_elf32_vec
-    ;;
-  sparc-*-linux*aout*)
-    targ_defvec=sparc_aout_linux_vec
-    targ_selvecs="sparc_elf32_vec sparc_aout_sunos_be_vec"
-    targ_underscore=yes
-    ;;
-  sparc-*-linux-* | sparcv*-*-linux-*)
-    targ_defvec=sparc_elf32_vec
-    targ_selvecs="sparc_aout_linux_vec sparc_elf64_vec sparc_aout_sunos_be_vec"
-    ;;
-  sparc-*-netbsdelf*)
-    targ_defvec=sparc_elf32_vec
-    targ_selvecs=sparc_aout_nbsd_vec
-    ;;
-  sparc-*-netbsdaout* | sparc-*-netbsd*)
-    targ_defvec=sparc_aout_nbsd_vec
-    targ_selvecs=sparc_elf32_vec
-    targ_underscore=yes
-    ;;
-  sparc-*-openbsd[0-2].* | sparc-*-openbsd3.[0-1])
-    targ_defvec=sparc_aout_nbsd_vec
-    targ_underscore=yes
-    ;;
-  sparc-*-openbsd*)
-    targ_defvec=sparc_elf32_vec
-    targ_selvecs=sparc_aout_nbsd_vec
-    ;;
-  sparc-*-elf*)
-    targ_defvec=sparc_elf32_vec
-    targ_selvecs=sparc_aout_sunos_be_vec
-    ;;
   sparc-*-solaris2.[0-6] | sparc-*-solaris2.[0-6].*)
     targ_defvec=sparc_elf32_sol2_vec
-    targ_selvecs=sparc_aout_sunos_be_vec
     ;;
 #ifdef BFD64
   sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
     targ_defvec=sparc_elf32_sol2_vec
-    targ_selvecs="sparc_elf64_sol2_vec sparc_aout_sunos_be_vec"
+    targ_selvecs="sparc_elf64_sol2_vec"
     want64=true
     ;;
-#endif
-  sparc-*-sysv4*)
-    targ_defvec=sparc_elf32_vec
-    ;;
-  sparc-*-vxworks*)
-    targ_defvec=sparc_elf32_vxworks_vec
-    targ_selvecs="sparc_elf32_vec sparc_aout_sunos_be_vec"
-    ;;
-#ifdef BFD64
-  sparc64-*-aout*)
-    targ_defvec=sparc_aout_sunos_be_vec
-    targ_underscore=yes
-    want64=true
-    ;;
-  sparc64*-*-linux-*)
-    targ_defvec=sparc_elf64_vec
-    targ_selvecs="sparc_elf32_vec sparc_aout_linux_vec sparc_aout_sunos_be_vec"
-    want64=true
+  sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu)
+    targ_defvec=sparc_elf64_fbsd_vec
+    targ_selvecs="sparc_elf64_vec sparc_elf32_vec"
     ;;
-  sparc64-*-elf* | sparc64-*-rtems* )
+  sparc64*-*-*)
     targ_defvec=sparc_elf64_vec
-    targ_selvecs=sparc_elf32_vec
+    targ_selvecs="sparc_elf32_vec"
     want64=true
     ;;
-#endif /* BFD64 */
-  sparc*-*-coff*)
-    targ_defvec=sparc_coff_vec
-    ;;
-  sparc-*-rtems*)
+#endif
+  sparc-*-linux-* | sparcv*-*-linux-*)
     targ_defvec=sparc_elf32_vec
-    targ_selvecs="sparc_aout_sunos_be_vec sparc_coff_vec"
+    targ_selvecs="sparc_elf64_vec"
+    ;;
+  sparc-*-vxworks*)
+    targ_defvec=sparc_elf32_vxworks_vec
+    targ_selvecs="sparc_elf32_vec"
     ;;
   sparc*-*-*)
-    targ_defvec=sparc_aout_sunos_be_vec
-    targ_underscore=yes
+    targ_defvec=sparc_elf32_vec
     ;;
 
   spu-*-elf)
diff --git a/bfd/configure b/bfd/configure
index 6f7916f..dfe6ea1 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -14552,13 +14552,6 @@ do
     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 $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" ;;
diff --git a/bfd/configure.ac b/bfd/configure.ac
index b8bb5ca..dc7f84f 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -629,13 +629,6 @@ do
     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 $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" ;;
diff --git a/bfd/demo64.c b/bfd/demo64.c
deleted file mode 100644
index f0a99b4..0000000
--- a/bfd/demo64.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* BFD backend for demonstration 64-bit a.out binaries.
-   Copyright (C) 1990-2018 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.  */
-
-#define ARCH_SIZE 64
-
-/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
-   remove whitespace added here, and thus will fail to concatenate
-   the tokens.  */
-#define MY(OP) CONCAT2 (aout64_,OP)
-
-#define TARGETNAME  "demo64"
-#include "aoutf1.h"
diff --git a/bfd/po/SRC-POTFILES.in b/bfd/po/SRC-POTFILES.in
index e3645bb..4de3163 100644
--- a/bfd/po/SRC-POTFILES.in
+++ b/bfd/po/SRC-POTFILES.in
@@ -3,12 +3,10 @@ aix5ppc-core.c
 aout-arm.c
 aout-cris.c
 aout-ns32k.c
-aout-sparcle.c
 aout-target.h
 aout-tic30.c
 aout32.c
 aout64.c
-aoutf1.h
 aoutx.h
 archive.c
 archive64.c
@@ -20,7 +18,6 @@ bfdwin.c
 binary.c
 cache.c
 cf-i386lynx.c
-cf-sparclynx.c
 cisco-core.c
 coff-alpha.c
 coff-arm.c
@@ -30,7 +27,6 @@ coff-i386.c
 coff-mips.c
 coff-rs6000.c
 coff-sh.c
-coff-sparc.c
 coff-stgo32.c
 coff-tic30.c
 coff-tic4x.c
@@ -127,7 +123,6 @@ cpu-xstormy16.c
 cpu-xtensa.c
 cpu-z80.c
 cpu-z8k.c
-demo64.c
 dwarf1.c
 dwarf2.c
 ecoff.c
@@ -315,13 +310,9 @@ section.c
 simple.c
 som.c
 som.h
-sparclinux.c
-sparclynx.c
-sparcnetbsd.c
 srec.c
 stab-syms.c
 stabs.c
-sunos.c
 syms.c
 targets.c
 tekhex.c
diff --git a/bfd/sparclinux.c b/bfd/sparclinux.c
deleted file mode 100644
index 54f6a8e..0000000
--- a/bfd/sparclinux.c
+++ /dev/null
@@ -1,730 +0,0 @@
-/* BFD back-end for linux flavored sparc a.out binaries.
-   Copyright (C) 1992-2018 Free Software Foundation, Inc.
-
-   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.  */
-
-#define TARGET_PAGE_SIZE	4096
-#define ZMAGIC_DISK_BLOCK_SIZE	1024
-#define SEGMENT_SIZE		TARGET_PAGE_SIZE
-#define TEXT_START_ADDR		0x0
-
-#define MACHTYPE_OK(mtype) ((mtype) == M_SPARC || (mtype) == M_UNKNOWN)
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-#include "aout/aout64.h"
-#include "aout/stab_gnu.h"
-#include "aout/ar.h"
-#include "libaout.h"	       /* BFD a.out internal data structures */
-
-#define DEFAULT_ARCH bfd_arch_sparc
-/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
-   remove whitespace added here, and thus will fail to concatenate
-   the tokens.  */
-#define MY(OP) CONCAT2 (sparc_aout_linux_,OP)
-#define TARGETNAME "a.out-sparc-linux"
-
-extern const bfd_target MY(vec);
-
-/* We always generate QMAGIC files in preference to ZMAGIC files.  It
-   would be possible to make this a linker option, if that ever
-   becomes important.  */
-
-static void MY_final_link_callback
-  (bfd *, file_ptr *, file_ptr *, file_ptr *);
-
-static bfd_boolean
-sparclinux_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
-{
-  obj_aout_subformat (abfd) = q_magic_format;
-  return NAME(aout,final_link) (abfd, info, MY_final_link_callback);
-}
-
-#define MY_bfd_final_link sparclinux_bfd_final_link
-
-/* Set the machine type correctly.  */
-
-static bfd_boolean
-sparclinux_write_object_contents (bfd *abfd)
-{
-  struct external_exec exec_bytes;
-  struct internal_exec *execp = exec_hdr (abfd);
-
-  N_SET_MACHTYPE (execp, M_SPARC);
-
-  obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
-
-  WRITE_HEADERS (abfd, execp);
-
-  return TRUE;
-}
-
-#define MY_write_object_contents sparclinux_write_object_contents
-/* Code to link against Linux a.out shared libraries.  */
-
-/* See if a symbol name is a reference to the global offset table.  */
-
-#ifndef GOT_REF_PREFIX
-#define GOT_REF_PREFIX  "__GOT_"
-#endif
-
-#define IS_GOT_SYM(name)  (CONST_STRNEQ (name, GOT_REF_PREFIX))
-
-/* See if a symbol name is a reference to the procedure linkage table.  */
-
-#ifndef PLT_REF_PREFIX
-#define PLT_REF_PREFIX  "__PLT_"
-#endif
-
-#define IS_PLT_SYM(name)  (CONST_STRNEQ (name, PLT_REF_PREFIX))
-
-/* This string is used to generate specialized error messages.  */
-
-#ifndef NEEDS_SHRLIB
-#define NEEDS_SHRLIB "__NEEDS_SHRLIB_"
-#endif
-
-/* This special symbol is a set vector that contains a list of
-   pointers to fixup tables.  It will be present in any dynamically
-   linked file.  The linker generated fixup table should also be added
-   to the list, and it should always appear in the second slot (the
-   first one is a dummy with a magic number that is defined in
-   crt0.o).  */
-
-#ifndef SHARABLE_CONFLICTS
-#define SHARABLE_CONFLICTS "__SHARABLE_CONFLICTS__"
-#endif
-
-/* We keep a list of fixups.  The terminology is a bit strange, but
-   each fixup contains two 32 bit numbers.  A regular fixup contains
-   an address and a pointer, and at runtime we should store the
-   address at the location pointed to by the pointer.  A builtin fixup
-   contains two pointers, and we should read the address using one
-   pointer and store it at the location pointed to by the other
-   pointer.  Builtin fixups come into play when we have duplicate
-   __GOT__ symbols for the same variable.  The builtin fixup will copy
-   the GOT pointer from one over into the other.  */
-
-struct fixup
-{
-  struct fixup *next;
-  struct linux_link_hash_entry *h;
-  bfd_vma value;
-
-  /* Nonzero if this is a jump instruction that needs to be fixed,
-     zero if this is just a pointer */
-  char jump;
-
-  char builtin;
-};
-
-/* We don't need a special hash table entry structure, but we do need
-   to keep some information between linker passes, so we use a special
-   hash table.  */
-
-struct linux_link_hash_entry
-{
-  struct aout_link_hash_entry root;
-};
-
-struct linux_link_hash_table
-{
-  struct aout_link_hash_table root;
-
-  /* First dynamic object found in link.  */
-  bfd *dynobj;
-
-  /* Number of fixups.  */
-  size_t fixup_count;
-
-  /* Number of builtin fixups.  */
-  size_t local_builtins;
-
-  /* List of fixups.  */
-  struct fixup *fixup_list;
-};
-
-
-/* Routine to create an entry in an Linux link hash table.  */
-
-static struct bfd_hash_entry *
-linux_link_hash_newfunc (struct bfd_hash_entry *entry,
-			 struct bfd_hash_table *table,
-			 const char *string)
-{
-  struct linux_link_hash_entry *ret = (struct linux_link_hash_entry *) entry;
-
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (ret == (struct linux_link_hash_entry *) NULL)
-    ret = ((struct linux_link_hash_entry *)
-	   bfd_hash_allocate (table, sizeof (struct linux_link_hash_entry)));
-  if (ret == NULL)
-    return (struct bfd_hash_entry *) ret;
-
-  /* Call the allocation method of the superclass.  */
-  ret = ((struct linux_link_hash_entry *)
-	 NAME(aout,link_hash_newfunc) ((struct bfd_hash_entry *) ret,
-				       table, string));
-  if (ret != NULL)
-    {
-      /* Set local fields; there aren't any.  */
-    }
-
-  return (struct bfd_hash_entry *) ret;
-}
-
-/* Create a Linux link hash table.  */
-
-static struct bfd_link_hash_table *
-linux_link_hash_table_create (bfd *abfd)
-{
-  struct linux_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct linux_link_hash_table);
-
-  ret = (struct linux_link_hash_table *) bfd_zmalloc (amt);
-  if (ret == (struct linux_link_hash_table *) NULL)
-    return (struct bfd_link_hash_table *) NULL;
-  if (!NAME(aout,link_hash_table_init) (&ret->root, abfd,
-					linux_link_hash_newfunc,
-					sizeof (struct linux_link_hash_entry)))
-    {
-      free (ret);
-      return (struct bfd_link_hash_table *) NULL;
-    }
-
-  return &ret->root.root;
-}
-
-/* Look up an entry in a Linux link hash table.  */
-
-#define linux_link_hash_lookup(table, string, create, copy, follow) \
-  ((struct linux_link_hash_entry *) \
-   aout_link_hash_lookup (&(table)->root, (string), (create), (copy),\
-			  (follow)))
-
-/* Traverse a Linux link hash table.  */
-
-#define linux_link_hash_traverse(table, func, info)		       \
-  (aout_link_hash_traverse					       \
-   (&(table)->root,						       \
-    (bfd_boolean (*) (struct aout_link_hash_entry *, void *)) (func),  \
-    (info)))
-
-/* Get the Linux link hash table from the info structure.  This is
-   just a cast.  */
-
-#define linux_hash_table(p) ((struct linux_link_hash_table *) ((p)->hash))
-
-/* Store the information for a new fixup.  */
-
-static struct fixup *
-new_fixup (struct bfd_link_info *info,
-	   struct linux_link_hash_entry *h,
-	   bfd_vma value,
-	   int builtin)
-{
-  struct fixup *f;
-
-  f = (struct fixup *) bfd_hash_allocate (&info->hash->table,
-					  sizeof (struct fixup));
-  if (f == NULL)
-    return f;
-  f->next = linux_hash_table (info)->fixup_list;
-  linux_hash_table (info)->fixup_list = f;
-  f->h = h;
-  f->value = value;
-  f->builtin = builtin;
-  f->jump = 0;
-  ++linux_hash_table (info)->fixup_count;
-  return f;
-}
-
-/* We come here once we realize that we are going to link to a shared
-   library.  We need to create a special section that contains the
-   fixup table, and we ultimately need to add a pointer to this into
-   the set vector for SHARABLE_CONFLICTS.  At this point we do not
-   know the size of the section, but that's OK - we just need to
-   create it for now.  */
-
-static bfd_boolean
-linux_link_create_dynamic_sections (bfd *abfd,
-				    struct bfd_link_info *info ATTRIBUTE_UNUSED)
-{
-  flagword flags;
-  asection *s;
-
-  /* Note that we set the SEC_IN_MEMORY flag.  */
-  flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
-
-  /* We choose to use the name ".linux-dynamic" for the fixup table.
-     Why not?  */
-  s = bfd_make_section_with_flags (abfd, ".linux-dynamic", flags);
-  if (s == NULL
-      || ! bfd_set_section_alignment (abfd, s, 2))
-    return FALSE;
-  s->size = 0;
-  s->contents = 0;
-
-  return TRUE;
-}
-
-/* Function to add a single symbol to the linker hash table.  This is
-   a wrapper around _bfd_generic_link_add_one_symbol which handles the
-   tweaking needed for dynamic linking support.  */
-
-static bfd_boolean
-linux_add_one_symbol (struct bfd_link_info *info,
-		      bfd *abfd,
-		      const char *name,
-		      flagword flags,
-		      asection *section,
-		      bfd_vma value,
-		      const char *string,
-		      bfd_boolean copy,
-		      bfd_boolean collect,
-		      struct bfd_link_hash_entry **hashp)
-{
-  struct linux_link_hash_entry *h;
-  bfd_boolean insert;
-
-  /* Look up and see if we already have this symbol in the hash table.
-     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->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;
-
-  if (! bfd_link_relocatable (info)
-      && linux_hash_table (info)->dynobj == NULL
-      && strcmp (name, SHARABLE_CONFLICTS) == 0
-      && (flags & BSF_CONSTRUCTOR) != 0
-      && abfd->xvec == info->output_bfd->xvec)
-    {
-      if (! linux_link_create_dynamic_sections (abfd, info))
-	return FALSE;
-      linux_hash_table (info)->dynobj = abfd;
-      insert = TRUE;
-    }
-
-  if (bfd_is_abs_section (section)
-      && abfd->xvec == info->output_bfd->xvec)
-    {
-      h = linux_link_hash_lookup (linux_hash_table (info), name, FALSE,
-				  FALSE, FALSE);
-      if (h != NULL
-	  && (h->root.root.type == bfd_link_hash_defined
-	      || h->root.root.type == bfd_link_hash_defweak))
-	{
-	  struct fixup *f;
-
-	  if (hashp != NULL)
-	    *hashp = (struct bfd_link_hash_entry *) h;
-
-	  f = new_fixup (info, h, value, ! IS_PLT_SYM (name));
-	  if (f == NULL)
-	    return FALSE;
-	  f->jump = IS_PLT_SYM (name);
-
-	  return TRUE;
-	}
-    }
-
-  /* Do the usual procedure for adding a symbol.  */
-  if (! _bfd_generic_link_add_one_symbol (info, abfd, name, flags, section,
-					  value, string, copy, collect,
-					  hashp))
-    return FALSE;
-
-  /* Insert a pointer to our table in the set vector.  The dynamic
-     linker requires this information.  */
-  if (insert)
-    {
-      asection *s;
-
-      /* Here we do our special thing to add the pointer to the
-	 dynamic section in the SHARABLE_CONFLICTS set vector.  */
-      s = bfd_get_section_by_name (linux_hash_table (info)->dynobj,
-				   ".linux-dynamic");
-      BFD_ASSERT (s != NULL);
-
-      if (! (_bfd_generic_link_add_one_symbol
-	     (info, linux_hash_table (info)->dynobj, SHARABLE_CONFLICTS,
-	      BSF_GLOBAL | BSF_CONSTRUCTOR, s, (bfd_vma) 0, NULL,
-	      FALSE, FALSE, NULL)))
-	return FALSE;
-    }
-
-  return TRUE;
-}
-
-/* We will crawl the hash table and come here for every global symbol.
-   We will examine each entry and see if there are indications that we
-   need to add a fixup.  There are two possible cases - one is where
-   you have duplicate definitions of PLT or GOT symbols - these will
-   have already been caught and added as "builtin" fixups.  If we find
-   that the corresponding non PLT/GOT symbol is also present, we
-   convert it to a regular fixup instead.
-
-   This function is called via linux_link_hash_traverse.  */
-
-static bfd_boolean
-linux_tally_symbols (struct linux_link_hash_entry *h, void * data)
-{
-  struct bfd_link_info *info = (struct bfd_link_info *) data;
-  struct fixup *f, *f1;
-  int is_plt;
-  struct linux_link_hash_entry *h1, *h2;
-  bfd_boolean exists;
-
-  if (h->root.root.type == bfd_link_hash_undefined
-      && CONST_STRNEQ (h->root.root.root.string, NEEDS_SHRLIB))
-    {
-      const char *name;
-      char *p;
-      char *alloc = NULL;
-
-      name = h->root.root.root.string + sizeof NEEDS_SHRLIB - 1;
-      p = strrchr (name, '_');
-      if (p != NULL)
-	alloc = (char *) bfd_malloc ((bfd_size_type) strlen (name) + 1);
-
-      if (p == NULL || alloc == NULL)
-	_bfd_error_handler (_("output file requires shared library `%s'"),
-			    name);
-      else
-	{
-	  strcpy (alloc, name);
-	  p = strrchr (alloc, '_');
-	  *p++ = '\0';
-	  _bfd_error_handler
-	    /* xgettext:c-format */
-	    (_("output file requires shared library `%s.so.%s'"),
-	     alloc, p);
-	  free (alloc);
-	}
-
-      abort ();
-    }
-
-  /* If this symbol is not a PLT/GOT, we do not even need to look at
-     it.  */
-  is_plt = IS_PLT_SYM (h->root.root.root.string);
-
-  if (is_plt || IS_GOT_SYM (h->root.root.root.string))
-    {
-      /* Look up this symbol twice.  Once just as a regular lookup,
-	 and then again following all of the indirect links until we
-	 reach a real symbol.  */
-      h1 = linux_link_hash_lookup (linux_hash_table (info),
-				   (h->root.root.root.string
-				    + sizeof PLT_REF_PREFIX - 1),
-				   FALSE, FALSE, TRUE);
-      /* h2 does not follow indirect symbols.  */
-      h2 = linux_link_hash_lookup (linux_hash_table (info),
-				   (h->root.root.root.string
-				    + sizeof PLT_REF_PREFIX - 1),
-				   FALSE, FALSE, FALSE);
-
-      /* The real symbol must exist but if it is also an ABS symbol,
-	 there is no need to have a fixup.  This is because they both
-	 came from the same library.  If on the other hand, we had to
-	 use an indirect symbol to get to the real symbol, we add the
-	 fixup anyway, since there are cases where these symbols come
-	 from different shared libraries */
-      if (h1 != NULL
-	  && (((h1->root.root.type == bfd_link_hash_defined
-		|| h1->root.root.type == bfd_link_hash_defweak)
-	       && ! bfd_is_abs_section (h1->root.root.u.def.section))
-	      || h2->root.root.type == bfd_link_hash_indirect))
-	{
-	  /* See if there is a "builtin" fixup already present
-	     involving this symbol.  If so, convert it to a regular
-	     fixup.  In the end, this relaxes some of the requirements
-	     about the order of performing fixups.  */
-	  exists = FALSE;
-	  for (f1 = linux_hash_table (info)->fixup_list;
-	       f1 != NULL;
-	       f1 = f1->next)
-	    {
-	      if ((f1->h != h && f1->h != h1)
-		  || (! f1->builtin && ! f1->jump))
-		continue;
-	      if (f1->h == h1)
-		exists = TRUE;
-	      if (! exists
-		  && bfd_is_abs_section (h->root.root.u.def.section))
-		{
-		  f = new_fixup (info, h1, f1->h->root.root.u.def.value, 0);
-		  f->jump = is_plt;
-		}
-	      f1->h = h1;
-	      f1->jump = is_plt;
-	      f1->builtin = 0;
-	      exists = TRUE;
-	    }
-	  if (! exists
-	      && bfd_is_abs_section (h->root.root.u.def.section))
-	    {
-	      f = new_fixup (info, h1, h->root.root.u.def.value, 0);
-	      if (f == NULL)
-		{
-		  /* FIXME: No way to return error.  */
-		  abort ();
-		}
-	      f->jump = is_plt;
-	    }
-	}
-
-      /* Quick and dirty way of stripping these symbols from the
-	 symtab.  */
-      if (bfd_is_abs_section (h->root.root.u.def.section))
-	h->root.written = TRUE;
-    }
-
-  return TRUE;
-}
-
-/* This is called to set the size of the .linux-dynamic section is.
-   It is called by the Linux linker emulation before_allocation
-   routine.  We have finished reading all of the input files, and now
-   we just scan the hash tables to find out how many additional fixups
-   are required.  */
-
-bfd_boolean
-bfd_sparclinux_size_dynamic_sections (bfd *output_bfd,
-				      struct bfd_link_info *info)
-{
-  struct fixup *f;
-  asection *s;
-
-  if (output_bfd->xvec != &MY(vec))
-    return TRUE;
-
-  /* First find the fixups...  */
-  linux_link_hash_traverse (linux_hash_table (info),
-			    linux_tally_symbols,
-			    info);
-
-  /* If there are builtin fixups, leave room for a marker.  This is
-     used by the dynamic linker so that it knows that all that follow
-     are builtin fixups instead of regular fixups.  */
-  for (f = linux_hash_table (info)->fixup_list; f != NULL; f = f->next)
-    {
-      if (f->builtin)
-	{
-	  ++linux_hash_table (info)->fixup_count;
-	  ++linux_hash_table (info)->local_builtins;
-	  break;
-	}
-    }
-
-  if (linux_hash_table (info)->dynobj == NULL)
-    {
-      if (linux_hash_table (info)->fixup_count > 0)
-	abort ();
-      return TRUE;
-    }
-
-  /* Allocate memory for our fixup table.  We will fill it in later.  */
-  s = bfd_get_section_by_name (linux_hash_table (info)->dynobj,
-			       ".linux-dynamic");
-  if (s != NULL)
-    {
-      s->size = linux_hash_table (info)->fixup_count + 1;
-      s->size *= 8;
-      s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->size);
-      if (s->contents == NULL)
-	return FALSE;
-    }
-
-  return TRUE;
-}
-
-/* We come here once we are ready to actually write the fixup table to
-   the output file.  Scan the fixup tables and so forth and generate
-   the stuff we need.  */
-
-static bfd_boolean
-linux_finish_dynamic_link (bfd *output_bfd, struct bfd_link_info *info)
-{
-  asection *s, *os, *is;
-  bfd_byte *fixup_table;
-  struct linux_link_hash_entry *h;
-  struct fixup *f;
-  unsigned int new_addr;
-  int section_offset;
-  unsigned int fixups_written;
-
-  if (linux_hash_table (info)->dynobj == NULL)
-    return TRUE;
-
-  s = bfd_get_section_by_name (linux_hash_table (info)->dynobj,
-			       ".linux-dynamic");
-  BFD_ASSERT (s != NULL);
-  os = s->output_section;
-  fixups_written = 0;
-
-#ifdef LINUX_LINK_DEBUG
-  printf ("Fixup table file offset: %x  VMA: %x\n",
-	  os->filepos + s->output_offset,
-	  os->vma + s->output_offset);
-#endif
-
-  fixup_table = s->contents;
-  bfd_put_32 (output_bfd,
-	      (bfd_vma) linux_hash_table (info)->fixup_count, fixup_table);
-  fixup_table += 4;
-
-  /* Fill in fixup table.  */
-  for (f = linux_hash_table (info)->fixup_list; f != NULL; f = f->next)
-    {
-      if (f->builtin)
-	continue;
-
-      if (f->h->root.root.type != bfd_link_hash_defined
-	  && f->h->root.root.type != bfd_link_hash_defweak)
-	{
-	  _bfd_error_handler
-	    (_("symbol %s not defined for fixups"),
-	     f->h->root.root.root.string);
-	  continue;
-	}
-
-      is = f->h->root.root.u.def.section;
-      section_offset = is->output_section->vma + is->output_offset;
-      new_addr = f->h->root.root.u.def.value + section_offset;
-
-#ifdef LINUX_LINK_DEBUG
-      printf ("Fixup(%d) %s: %x %x\n",f->jump, f->h->root.root.string,
-	      new_addr, f->value);
-#endif
-
-      if (f->jump)
-	{
-	  /* Relative address */
-	  new_addr = new_addr - (f->value + 5);
-	  bfd_put_32 (output_bfd, (bfd_vma) new_addr, fixup_table);
-	  fixup_table += 4;
-	  bfd_put_32 (output_bfd, f->value + 1, fixup_table);
-	  fixup_table += 4;
-	}
-      else
-	{
-	  bfd_put_32 (output_bfd, (bfd_vma) new_addr, fixup_table);
-	  fixup_table += 4;
-	  bfd_put_32 (output_bfd, f->value, fixup_table);
-	  fixup_table += 4;
-	}
-      ++fixups_written;
-    }
-
-  if (linux_hash_table (info)->local_builtins != 0)
-    {
-      /* Special marker so we know to switch to the other type of fixup */
-      bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
-      fixup_table += 4;
-      bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
-      fixup_table += 4;
-      ++fixups_written;
-      for (f = linux_hash_table (info)->fixup_list; f != NULL; f = f->next)
-	{
-	  if (! f->builtin)
-	    continue;
-
-	  if (f->h->root.root.type != bfd_link_hash_defined
-	      && f->h->root.root.type != bfd_link_hash_defweak)
-	    {
-	      _bfd_error_handler
-		(_("symbol %s not defined for fixups"),
-		 f->h->root.root.root.string);
-	      continue;
-	    }
-
-	  is = f->h->root.root.u.def.section;
-	  section_offset = is->output_section->vma + is->output_offset;
-	  new_addr = f->h->root.root.u.def.value + section_offset;
-
-#ifdef LINUX_LINK_DEBUG
-	  printf ("Fixup(B) %s: %x %x\n", f->h->root.root.string,
-		  new_addr, f->value);
-#endif
-
-	  bfd_put_32 (output_bfd, (bfd_vma) new_addr, fixup_table);
-	  fixup_table += 4;
-	  bfd_put_32 (output_bfd, f->value, fixup_table);
-	  fixup_table += 4;
-	  ++fixups_written;
-	}
-    }
-
-  if (linux_hash_table (info)->fixup_count != fixups_written)
-    {
-      _bfd_error_handler (_("warning: fixup count mismatch"));
-      while (linux_hash_table (info)->fixup_count > fixups_written)
-	{
-	  bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
-	  fixup_table += 4;
-	  bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
-	  fixup_table += 4;
-	  ++fixups_written;
-	}
-    }
-
-  h = linux_link_hash_lookup (linux_hash_table (info),
-			      "__BUILTIN_FIXUPS__",
-			      FALSE, FALSE, FALSE);
-
-  if (h != NULL
-      && (h->root.root.type == bfd_link_hash_defined
-	  || h->root.root.type == bfd_link_hash_defweak))
-    {
-      is = h->root.root.u.def.section;
-      section_offset = is->output_section->vma + is->output_offset;
-      new_addr = h->root.root.u.def.value + section_offset;
-
-#ifdef LINUX_LINK_DEBUG
-      printf ("Builtin fixup table at %x\n", new_addr);
-#endif
-
-      bfd_put_32 (output_bfd, (bfd_vma) new_addr, fixup_table);
-    }
-  else
-    bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
-
-  if (bfd_seek (output_bfd, (file_ptr) (os->filepos + s->output_offset),
-		SEEK_SET) != 0)
-    return FALSE;
-
-  if (bfd_bwrite (s->contents, s->size, output_bfd) != s->size)
-    return FALSE;
-
-  return TRUE;
-}
-
-#define MY_bfd_link_hash_table_create linux_link_hash_table_create
-#define MY_add_one_symbol linux_add_one_symbol
-#define MY_finish_dynamic_link linux_finish_dynamic_link
-
-#define MY_zmagic_contiguous 1
-
-#include "aout-target.h"
diff --git a/bfd/sparclynx.c b/bfd/sparclynx.c
deleted file mode 100644
index 9815afd..0000000
--- a/bfd/sparclynx.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/* BFD support for Sparc binaries under LynxOS.
-   Copyright (C) 1990-2018 Free Software Foundation, Inc.
-
-   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.  */
-
-
-/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
-   remove whitespace added here, and thus will fail to concatenate
-   the tokens.  */
-#define MY(OP) CONCAT2 (sparc_aout_lynx_,OP)
-#define TARGETNAME "a.out-sparc-lynx"
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-#include "aout/sun4.h"
-#include "libaout.h"		/* BFD a.out internal data structures */
-
-#include "aout/aout64.h"
-#include "aout/stab_gnu.h"
-#include "aout/ar.h"
-
-void NAME (lynx,set_arch_mach) (bfd *, unsigned long);
-static void choose_reloc_size (bfd *);
-static bfd_boolean NAME (aout,sparclynx_write_object_contents) (bfd *);
-
-/* This is needed to reject a NewsOS file, e.g. in
-   gdb/testsuite/gdb.t10/crossload.exp. <kingdon@cygnus.com>
-   I needed to add M_UNKNOWN to recognize a 68000 object, so this will
-   probably no longer reject a NewsOS object.  <ian@cygnus.com>.  */
-#define MACHTYPE_OK(mtype) (   (mtype) == M_UNKNOWN \
-			    || (mtype) == M_68010 \
-			    || (mtype) == M_68020 \
-			    || (mtype) == M_SPARC)
-
-/* The file @code{aoutf1.h} contains the code for BFD's
-   a.out back end. Control over the generated back end is given by these
-   two preprocessor names:
-   @table @code
-   @item ARCH_SIZE
-   This value should be either 32 or 64, depending upon the size of an
-   int in the target format. It changes the sizes of the structs which
-   perform the memory/disk mapping of structures.
-
-   The 64 bit backend may only be used if the host compiler supports 64
-   ints (eg long long with gcc), by defining the name @code{BFD_HOST_64_BIT} in @code{bfd.h}.
-   With this name defined, @emph{all} bfd operations are performed with 64bit
-   arithmetic, not just those to a 64bit target.
-
-   @item TARGETNAME
-   The name put into the target vector.
-   @item
-   @end table  */
-
-void
-NAME(lynx,set_arch_mach) (bfd *abfd, unsigned long machtype)
-{
-  /* Determine the architecture and machine type of the object file.  */
-  enum bfd_architecture arch;
-  unsigned long machine;
-
-  switch (machtype)
-    {
-    case M_UNKNOWN:
-      /* Some Sun3s make magic numbers without cpu types in them, so
-	 we'll default to the 68000.  */
-      arch = bfd_arch_m68k;
-      machine = bfd_mach_m68000;
-      break;
-
-    case M_68010:
-    case M_HP200:
-      arch = bfd_arch_m68k;
-      machine = bfd_mach_m68010;
-      break;
-
-    case M_68020:
-    case M_HP300:
-      arch = bfd_arch_m68k;
-      machine = bfd_mach_m68020;
-      break;
-
-    case M_SPARC:
-      arch = bfd_arch_sparc;
-      machine = 0;
-      break;
-
-    case M_386:
-    case M_386_DYNIX:
-      arch = bfd_arch_i386;
-      machine = 0;
-      break;
-
-    case M_HPUX:
-      arch = bfd_arch_m68k;
-      machine = 0;
-      break;
-
-    default:
-      arch = bfd_arch_obscure;
-      machine = 0;
-      break;
-    }
-  bfd_set_arch_mach (abfd, arch, machine);
-}
-
-#define SET_ARCH_MACH(ABFD, EXECP) \
-  NAME(lynx,set_arch_mach) (ABFD, N_MACHTYPE (EXECP)); \
-  choose_reloc_size(ABFD);
-
-/* Determine the size of a relocation entry, based on the architecture.  */
-
-static void
-choose_reloc_size (bfd *abfd)
-{
-  switch (bfd_get_arch (abfd))
-    {
-    case bfd_arch_sparc:
-      obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE;
-      break;
-    default:
-      obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
-      break;
-    }
-}
-
-/* Write an object file in LynxOS format.
-  Section contents have already been written.  We write the
-  file header, symbols, and relocation.  */
-
-static bfd_boolean
-NAME(aout,sparclynx_write_object_contents) (bfd *abfd)
-{
-  struct external_exec exec_bytes;
-  struct internal_exec *execp = exec_hdr (abfd);
-
-  /* Magic number, maestro, please!  */
-  switch (bfd_get_arch (abfd))
-    {
-    case bfd_arch_m68k:
-      switch (bfd_get_mach (abfd))
-	{
-	case bfd_mach_m68010:
-	  N_SET_MACHTYPE (execp, M_68010);
-	  break;
-	default:
-	case bfd_mach_m68020:
-	  N_SET_MACHTYPE (execp, M_68020);
-	  break;
-	}
-      break;
-    case bfd_arch_sparc:
-      N_SET_MACHTYPE (execp, M_SPARC);
-      break;
-    case bfd_arch_i386:
-      N_SET_MACHTYPE (execp, M_386);
-      break;
-    default:
-      N_SET_MACHTYPE (execp, M_UNKNOWN);
-    }
-
-  choose_reloc_size (abfd);
-
-  N_SET_FLAGS (execp, aout_backend_info (abfd)->exec_hdr_flags);
-
-  WRITE_HEADERS (abfd, execp);
-
-  return TRUE;
-}
-
-#define MY_set_sizes sparclynx_set_sizes
-static bfd_boolean sparclynx_set_sizes (bfd *);
-
-static bfd_boolean
-sparclynx_set_sizes (bfd *abfd)
-{
-  switch (bfd_get_arch (abfd))
-    {
-    default:
-      return FALSE;
-    case bfd_arch_sparc:
-      adata (abfd).page_size = 0x2000;
-      adata (abfd).segment_size = 0x2000;
-      adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE;
-      return TRUE;
-    case bfd_arch_m68k:
-      adata (abfd).page_size = 0x2000;
-      adata (abfd).segment_size = 0x20000;
-      adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE;
-      return TRUE;
-    }
-}
-
-static const struct aout_backend_data sparclynx_aout_backend =
-  {
-    0, 1, 0, 1, 0, sparclynx_set_sizes, 0,
-    0,				/* add_dynamic_symbols */
-    0,				/* add_one_symbol */
-    0,				/* link_dynamic_object */
-    0,				/* write_dynamic_symbol */
-    0,				/* check_dynamic_reloc */
-    0				/* finish_dynamic_link */
-  };
-
-
-#define MY_bfd_debug_info_start		_bfd_void_bfd
-#define MY_bfd_debug_info_end		_bfd_void_bfd
-#define MY_bfd_debug_info_accumulate	_bfd_void_bfd_asection
-
-#define MY_write_object_contents	NAME(aout,sparclynx_write_object_contents)
-#define MY_backend_data			&sparclynx_aout_backend
-
-#define TARGET_IS_BIG_ENDIAN_P
-
-#ifdef LYNX_CORE
-
-char * lynx_core_file_failing_command ();
-int lynx_core_file_failing_signal ();
-bfd_boolean lynx_core_file_matches_executable_p ();
-const bfd_target * lynx_core_file_p ();
-
-#define	MY_core_file_failing_command lynx_core_file_failing_command
-#define	MY_core_file_failing_signal lynx_core_file_failing_signal
-#define	MY_core_file_matches_executable_p lynx_core_file_matches_executable_p
-#define	MY_core_file_p lynx_core_file_p
-
-#endif /* LYNX_CORE */
-
-#include "aout-target.h"
diff --git a/bfd/sparcnetbsd.c b/bfd/sparcnetbsd.c
deleted file mode 100644
index 7ea2b14..0000000
--- a/bfd/sparcnetbsd.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* BFD back-end for NetBSD/sparc a.out-ish binaries.
-   Copyright (C) 1990-2018 Free Software Foundation, Inc.
-
-   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.  */
-
-
-#define TARGET_IS_BIG_ENDIAN_P
-
-/* SPARC chips use either 4K or 8K pages, but object files always
-   assume 8K page alignment so they will work on either one.  */
-#define TARGET_PAGE_SIZE 0x2000
-
-#define DEFAULT_ARCH	bfd_arch_sparc
-#define DEFAULT_MID	M_SPARC_NETBSD
-
-/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
-   remove whitespace added here, and thus will fail to concatenate
-   the tokens.  */
-#define MY(OP) CONCAT2 (sparc_aout_nbsd_,OP)
-
-/* This needs to start with a.out so GDB knows it is an a.out variant.  */
-#define TARGETNAME "a.out-sparc-netbsd"
-
-#include "netbsd.h"
diff --git a/bfd/sunos.c b/bfd/sunos.c
deleted file mode 100644
index 5985384..0000000
--- a/bfd/sunos.c
+++ /dev/null
@@ -1,2845 +0,0 @@
-/* BFD backend for SunOS binaries.
-   Copyright (C) 1990-2018 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.  */
-
-#define TARGETNAME "a.out-sunos-big"
-
-/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
-   remove whitespace added here, and thus will fail to concatenate
-   the tokens.  */
-#define MY(OP) CONCAT2 (sparc_aout_sunos_be_,OP)
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "bfdlink.h"
-#include "libaout.h"
-
-/* ??? Where should this go?  */
-#define MACHTYPE_OK(mtype) \
-  (((mtype) == M_SPARC && bfd_lookup_arch (bfd_arch_sparc, 0) != NULL) \
-   || ((mtype) == M_SPARCLET \
-       && bfd_lookup_arch (bfd_arch_sparc, bfd_mach_sparc_sparclet) != NULL) \
-   || ((mtype) == M_SPARCLITE_LE \
-       && bfd_lookup_arch (bfd_arch_sparc, bfd_mach_sparc_sparclet) != NULL) \
-   || (((mtype) == M_UNKNOWN || (mtype) == M_68010 || (mtype) == M_68020) \
-       && bfd_lookup_arch (bfd_arch_m68k, 0) != NULL))
-
-#define MY_get_dynamic_symtab_upper_bound  sunos_get_dynamic_symtab_upper_bound
-#define MY_canonicalize_dynamic_symtab	   sunos_canonicalize_dynamic_symtab
-#define MY_get_synthetic_symtab		   _bfd_nodynamic_get_synthetic_symtab
-#define MY_get_dynamic_reloc_upper_bound   sunos_get_dynamic_reloc_upper_bound
-#define MY_canonicalize_dynamic_reloc	   sunos_canonicalize_dynamic_reloc
-#define MY_bfd_link_hash_table_create	   sunos_link_hash_table_create
-#define MY_add_dynamic_symbols		   sunos_add_dynamic_symbols
-#define MY_add_one_symbol		   sunos_add_one_symbol
-#define MY_link_dynamic_object		   sunos_link_dynamic_object
-#define MY_write_dynamic_symbol		   sunos_write_dynamic_symbol
-#define MY_check_dynamic_reloc		   sunos_check_dynamic_reloc
-#define MY_finish_dynamic_link		   sunos_finish_dynamic_link
-
-static bfd_boolean sunos_add_dynamic_symbols		(bfd *, struct bfd_link_info *, struct external_nlist **, bfd_size_type *, char **);
-static bfd_boolean sunos_add_one_symbol			(struct bfd_link_info *, bfd *, const char *, flagword, asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean, struct bfd_link_hash_entry **);
-static bfd_boolean sunos_link_dynamic_object		(struct bfd_link_info *, bfd *);
-static bfd_boolean sunos_write_dynamic_symbol		(bfd *, struct bfd_link_info *, struct aout_link_hash_entry *);
-static bfd_boolean sunos_check_dynamic_reloc		(struct bfd_link_info *, bfd *, asection *, struct aout_link_hash_entry *, void *, bfd_byte *, bfd_boolean *, bfd_vma *);
-static bfd_boolean sunos_finish_dynamic_link		(bfd *, struct bfd_link_info *);
-static struct bfd_link_hash_table *sunos_link_hash_table_create	 (bfd *);
-static long	   sunos_get_dynamic_symtab_upper_bound (bfd *);
-static long	   sunos_canonicalize_dynamic_symtab	(bfd *, asymbol **);
-static long	   sunos_get_dynamic_reloc_upper_bound	(bfd *);
-static long	   sunos_canonicalize_dynamic_reloc	(bfd *, arelent **, asymbol **);
-
-/* Include the usual a.out support.  */
-#include "aoutf1.h"
-
-/* The SunOS 4.1.4 /usr/include/locale.h defines valid as a macro.  */
-#undef valid
-
-/* SunOS shared library support.  We store a pointer to this structure
-   in obj_aout_dynamic_info (abfd).  */
-
-struct sunos_dynamic_info
-{
-  /* Whether we found any dynamic information.  */
-  bfd_boolean valid;
-  /* Dynamic information.  */
-  struct internal_sun4_dynamic_link dyninfo;
-  /* Number of dynamic symbols.  */
-  unsigned long dynsym_count;
-  /* Read in nlists for dynamic symbols.  */
-  struct external_nlist *dynsym;
-  /* asymbol structures for dynamic symbols.  */
-  aout_symbol_type *canonical_dynsym;
-  /* Read in dynamic string table.  */
-  char *dynstr;
-  /* Number of dynamic relocs.  */
-  unsigned long dynrel_count;
-  /* Read in dynamic relocs.  This may be reloc_std_external or
-     reloc_ext_external.  */
-  void * dynrel;
-  /* arelent structures for dynamic relocs.  */
-  arelent *canonical_dynrel;
-};
-
-/* The hash table of dynamic symbols is composed of two word entries.
-   See include/aout/sun4.h for details.  */
-
-#define HASH_ENTRY_SIZE (2 * BYTES_IN_WORD)
-
-/* Read in the basic dynamic information.  This locates the __DYNAMIC
-   structure and uses it to find the dynamic_link structure.  It
-   creates and saves a sunos_dynamic_info structure.  If it can't find
-   __DYNAMIC, it sets the valid field of the sunos_dynamic_info
-   structure to FALSE to avoid doing this work again.  */
-
-static bfd_boolean
-sunos_read_dynamic_info (bfd *abfd)
-{
-  struct sunos_dynamic_info *info;
-  asection *dynsec;
-  bfd_vma dynoff;
-  struct external_sun4_dynamic dyninfo;
-  unsigned long dynver;
-  struct external_sun4_dynamic_link linkinfo;
-  bfd_size_type amt;
-
-  if (obj_aout_dynamic_info (abfd) != NULL)
-    return TRUE;
-
-  if ((abfd->flags & DYNAMIC) == 0)
-    {
-      bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
-    }
-
-  amt = sizeof (struct sunos_dynamic_info);
-  info = bfd_zalloc (abfd, amt);
-  if (!info)
-    return FALSE;
-  info->valid = FALSE;
-  info->dynsym = NULL;
-  info->dynstr = NULL;
-  info->canonical_dynsym = NULL;
-  info->dynrel = NULL;
-  info->canonical_dynrel = NULL;
-  obj_aout_dynamic_info (abfd) = (void *) info;
-
-  /* This code used to look for the __DYNAMIC symbol to locate the dynamic
-     linking information.
-     However this inhibits recovering the dynamic symbols from a
-     stripped object file, so blindly assume that the dynamic linking
-     information is located at the start of the data section.
-     We could verify this assumption later by looking through the dynamic
-     symbols for the __DYNAMIC symbol.  */
-  if ((abfd->flags & DYNAMIC) == 0)
-    return TRUE;
-  if (! bfd_get_section_contents (abfd, obj_datasec (abfd), (void *) &dyninfo,
-				  (file_ptr) 0,
-				  (bfd_size_type) sizeof dyninfo))
-    return TRUE;
-
-  dynver = GET_WORD (abfd, dyninfo.ld_version);
-  if (dynver != 2 && dynver != 3)
-    return TRUE;
-
-  dynoff = GET_WORD (abfd, dyninfo.ld);
-
-  /* dynoff is a virtual address.  It is probably always in the .data
-     section, but this code should work even if it moves.  */
-  if (dynoff < bfd_get_section_vma (abfd, obj_datasec (abfd)))
-    dynsec = obj_textsec (abfd);
-  else
-    dynsec = obj_datasec (abfd);
-  dynoff -= bfd_get_section_vma (abfd, dynsec);
-  if (dynoff > dynsec->size)
-    return TRUE;
-
-  /* This executable appears to be dynamically linked in a way that we
-     can understand.  */
-  if (! bfd_get_section_contents (abfd, dynsec, (void *) &linkinfo,
-				  (file_ptr) dynoff,
-				  (bfd_size_type) sizeof linkinfo))
-    return TRUE;
-
-  /* Swap in the dynamic link information.  */
-  info->dyninfo.ld_loaded = GET_WORD (abfd, linkinfo.ld_loaded);
-  info->dyninfo.ld_need = GET_WORD (abfd, linkinfo.ld_need);
-  info->dyninfo.ld_rules = GET_WORD (abfd, linkinfo.ld_rules);
-  info->dyninfo.ld_got = GET_WORD (abfd, linkinfo.ld_got);
-  info->dyninfo.ld_plt = GET_WORD (abfd, linkinfo.ld_plt);
-  info->dyninfo.ld_rel = GET_WORD (abfd, linkinfo.ld_rel);
-  info->dyninfo.ld_hash = GET_WORD (abfd, linkinfo.ld_hash);
-  info->dyninfo.ld_stab = GET_WORD (abfd, linkinfo.ld_stab);
-  info->dyninfo.ld_stab_hash = GET_WORD (abfd, linkinfo.ld_stab_hash);
-  info->dyninfo.ld_buckets = GET_WORD (abfd, linkinfo.ld_buckets);
-  info->dyninfo.ld_symbols = GET_WORD (abfd, linkinfo.ld_symbols);
-  info->dyninfo.ld_symb_size = GET_WORD (abfd, linkinfo.ld_symb_size);
-  info->dyninfo.ld_text = GET_WORD (abfd, linkinfo.ld_text);
-  info->dyninfo.ld_plt_sz = GET_WORD (abfd, linkinfo.ld_plt_sz);
-
-  /* Reportedly the addresses need to be offset by the size of the
-     exec header in an NMAGIC file.  */
-  if (adata (abfd).magic == n_magic)
-    {
-      unsigned long exec_bytes_size = adata (abfd).exec_bytes_size;
-
-      info->dyninfo.ld_need += exec_bytes_size;
-      info->dyninfo.ld_rules += exec_bytes_size;
-      info->dyninfo.ld_rel += exec_bytes_size;
-      info->dyninfo.ld_hash += exec_bytes_size;
-      info->dyninfo.ld_stab += exec_bytes_size;
-      info->dyninfo.ld_symbols += exec_bytes_size;
-    }
-
-  /* The only way to get the size of the symbol information appears to
-     be to determine the distance between it and the string table.  */
-  info->dynsym_count = ((info->dyninfo.ld_symbols - info->dyninfo.ld_stab)
-			/ EXTERNAL_NLIST_SIZE);
-  BFD_ASSERT (info->dynsym_count * EXTERNAL_NLIST_SIZE
-	      == (unsigned long) (info->dyninfo.ld_symbols
-				  - info->dyninfo.ld_stab));
-
-  /* Similarly, the relocs end at the hash table.  */
-  info->dynrel_count = ((info->dyninfo.ld_hash - info->dyninfo.ld_rel)
-			/ obj_reloc_entry_size (abfd));
-  BFD_ASSERT (info->dynrel_count * obj_reloc_entry_size (abfd)
-	      == (unsigned long) (info->dyninfo.ld_hash
-				  - info->dyninfo.ld_rel));
-
-  info->valid = TRUE;
-
-  return TRUE;
-}
-
-/* Return the amount of memory required for the dynamic symbols.  */
-
-static long
-sunos_get_dynamic_symtab_upper_bound (bfd *abfd)
-{
-  struct sunos_dynamic_info *info;
-
-  if (! sunos_read_dynamic_info (abfd))
-    return -1;
-
-  info = (struct sunos_dynamic_info *) obj_aout_dynamic_info (abfd);
-  if (! info->valid)
-    {
-      bfd_set_error (bfd_error_no_symbols);
-      return -1;
-    }
-
-  return (info->dynsym_count + 1) * sizeof (asymbol *);
-}
-
-/* Read the external dynamic symbols.  */
-
-static bfd_boolean
-sunos_slurp_dynamic_symtab (bfd *abfd)
-{
-  struct sunos_dynamic_info *info;
-  bfd_size_type amt;
-
-  /* Get the general dynamic information.  */
-  if (obj_aout_dynamic_info (abfd) == NULL)
-    {
-      if (! sunos_read_dynamic_info (abfd))
-	  return FALSE;
-    }
-
-  info = (struct sunos_dynamic_info *) obj_aout_dynamic_info (abfd);
-  if (! info->valid)
-    {
-      bfd_set_error (bfd_error_no_symbols);
-      return FALSE;
-    }
-
-  /* Get the dynamic nlist structures.  */
-  if (info->dynsym == NULL)
-    {
-      amt = (bfd_size_type) info->dynsym_count * EXTERNAL_NLIST_SIZE;
-      info->dynsym = bfd_alloc (abfd, amt);
-      if (info->dynsym == NULL && info->dynsym_count != 0)
-	return FALSE;
-      if (bfd_seek (abfd, (file_ptr) info->dyninfo.ld_stab, SEEK_SET) != 0
-	  || bfd_bread ((void *) info->dynsym, amt, abfd) != amt)
-	{
-	  if (info->dynsym != NULL)
-	    {
-	      bfd_release (abfd, info->dynsym);
-	      info->dynsym = NULL;
-	    }
-	  return FALSE;
-	}
-    }
-
-  /* Get [...]

[diff truncated at 100000 bytes]



More information about the Binutils-cvs mailing list