diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index 75d21db88d1..a745372c0a4 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -77,7 +77,7 @@ BFD_H = bfd.h
 BFD32_LIBS = \
 	archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo cache.lo \
 	coff-bfd.lo compress.lo corefile.lo elf-properties.lo format.lo \
-	hash.lo init.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
+	hash.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
 	section.lo simple.lo stab-syms.lo stabs.lo syms.lo targets.lo \
 	binary.lo ihex.lo srec.lo tekhex.lo verilog.lo
 
@@ -86,7 +86,7 @@ BFD64_LIBS = archive64.lo
 BFD32_LIBS_CFILES = \
 	archive.c archures.c bfd.c bfdio.c bfdwin.c cache.c coff-bfd.c \
 	compress.c corefile.c elf-properties.c format.c hash.c \
-	init.c libbfd.c linker.c merge.c opncls.c reloc.c \
+	libbfd.c linker.c merge.c opncls.c reloc.c \
 	section.c simple.c stab-syms.c stabs.c syms.c targets.c \
 	binary.c ihex.c srec.c tekhex.c verilog.c
 
@@ -923,7 +923,7 @@ stmp-bfd-h: bfd-in3.h
 	rm -f bfd-tmp.h
 	touch stmp-bfd-h
 
-BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c \
+BFD_H_FILES = bfd-in.h opncls.c libbfd.c \
 	bfdio.c bfdwin.c section.c archures.c reloc.c \
 	syms.c bfd.c archive.c corefile.c targets.c format.c \
 	linker.c simple.c compress.c
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index 0b0bb1a950e..1e0c2dcae1e 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -186,10 +186,9 @@ LTLIBRARIES = $(bfdlib_LTLIBRARIES) $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 am__objects_1 = archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo \
 	cache.lo coff-bfd.lo compress.lo corefile.lo elf-properties.lo \
-	format.lo hash.lo init.lo libbfd.lo linker.lo merge.lo \
-	opncls.lo reloc.lo section.lo simple.lo stab-syms.lo stabs.lo \
-	syms.lo targets.lo binary.lo ihex.lo srec.lo tekhex.lo \
-	verilog.lo
+	format.lo hash.lo libbfd.lo linker.lo merge.lo opncls.lo \
+	reloc.lo section.lo simple.lo stab-syms.lo stabs.lo syms.lo \
+	targets.lo binary.lo ihex.lo srec.lo tekhex.lo verilog.lo
 am_libbfd_la_OBJECTS = $(am__objects_1)
 libbfd_la_OBJECTS = $(am_libbfd_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -546,7 +545,7 @@ BFD_H = bfd.h
 BFD32_LIBS = \
 	archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo cache.lo \
 	coff-bfd.lo compress.lo corefile.lo elf-properties.lo format.lo \
-	hash.lo init.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
+	hash.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
 	section.lo simple.lo stab-syms.lo stabs.lo syms.lo targets.lo \
 	binary.lo ihex.lo srec.lo tekhex.lo verilog.lo
 
@@ -554,7 +553,7 @@ BFD64_LIBS = archive64.lo
 BFD32_LIBS_CFILES = \
 	archive.c archures.c bfd.c bfdio.c bfdwin.c cache.c coff-bfd.c \
 	compress.c corefile.c elf-properties.c format.c hash.c \
-	init.c libbfd.c linker.c merge.c opncls.c reloc.c \
+	libbfd.c linker.c merge.c opncls.c reloc.c \
 	section.c simple.c stab-syms.c stabs.c syms.c targets.c \
 	binary.c ihex.c srec.c tekhex.c verilog.c
 
@@ -1216,7 +1215,7 @@ libbfd_la_LIBADD = `cat ofiles` @SHARED_LIBADD@ $(LIBDL) $(ZLIB) $(ZSTD_LIBS) ..
 # everything else starts using libtool.  FIXME.
 noinst_LIBRARIES = libbfd.a
 libbfd_a_SOURCES = 
-BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c \
+BFD_H_FILES = bfd-in.h opncls.c libbfd.c \
 	bfdio.c bfdwin.c section.c archures.c reloc.c \
 	syms.c bfd.c archive.c corefile.c targets.c format.c \
 	linker.c simple.c compress.c
@@ -1263,7 +1262,6 @@ DOCFILES = \
 	doc/elf.texi \
 	doc/format.texi \
 	doc/hash.texi \
-	doc/init.texi \
 	doc/libbfd.texi \
 	doc/linker.texi \
 	doc/mmo.texi \
@@ -1296,13 +1294,12 @@ SRCPROT = $(srcdir)/archive.c $(srcdir)/archures.c \
 	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
 	$(srcdir)/opncls.c $(srcdir)/reloc.c \
 	$(srcdir)/section.c $(srcdir)/syms.c \
-	$(srcdir)/targets.c $(srcdir)/init.c
+	$(srcdir)/targets.c
 
 SRCIPROT = $(srcdir)/cache.c $(srcdir)/libbfd.c \
 	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
 	$(srcdir)/reloc.c $(srcdir)/cpu-h8300.c \
-	$(srcdir)/archures.c \
-	$(srcdir)/init.c
+	$(srcdir)/archures.c
 
 TEXIDIR = $(srcdir)/../texinfo/fsf
 info_TEXINFOS = doc/bfd.texi
@@ -1682,7 +1679,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386lynx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386msdos.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ihex.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/irix-core.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbfd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linker.Plo@am__quote@
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index aeb8d5de7b9..bb2b30200dc 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -1,8 +1,8 @@
 /* DO NOT EDIT!  -*- buffer-read-only: t -*-  This file is automatically
-   generated from "bfd-in.h", "init.c", "opncls.c", "libbfd.c",
-   "bfdio.c", "bfdwin.c", "section.c", "archures.c", "reloc.c",
-   "syms.c", "bfd.c", "archive.c", "corefile.c", "targets.c", "format.c",
-   "linker.c", "simple.c" and "compress.c".
+   generated from "bfd-in.h", "opncls.c", "libbfd.c", "bfdio.c",
+   "bfdwin.c", "section.c", "archures.c", "reloc.c", "syms.c", "bfd.c",
+   "archive.c", "corefile.c", "targets.c", "format.c", "linker.c",
+   "simple.c" and "compress.c".
    Run "make headers" in your build bfd/ to regenerate.  */
 
 /* Main header file for the bfd library -- portable access to object files.
@@ -488,13 +488,6 @@ startswith (const char *str, const char *prefix)
 {
   return strncmp (str, prefix, strlen (prefix)) == 0;
 }
-/* Extracted from init.c.  */
-unsigned int bfd_init (void);
-
-
-/* Value returned by bfd_init.  */
-
-#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
 /* Extracted from opncls.c.  */
 /* Set to N to open the next N BFDs using an alternate id space.  */
 extern unsigned int bfd_use_reserved_id;
@@ -7263,6 +7256,11 @@ bfd_vma bfd_emul_get_commonpagesize (const char *);
 
 char *bfd_demangle (bfd *, const char *, int);
 
+unsigned int bfd_init (void);
+
+/* Value returned by bfd_init.  */
+#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
+
 /* Extracted from archive.c.  */
 symindex bfd_get_next_mapent
    (bfd *abfd, symindex previous, carsym **sym);
diff --git a/bfd/bfd.c b/bfd/bfd.c
index 9cbb674b989..1d1c4498938 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -696,9 +696,9 @@ CODE_FRAGMENT
 .
 */
 
-static bfd_error_type bfd_error = bfd_error_no_error;
-static bfd *input_bfd = NULL;
-static bfd_error_type input_error = bfd_error_no_error;
+static bfd_error_type bfd_error;
+static bfd *input_bfd;
+static bfd_error_type input_error;
 
 const char *const bfd_errmsgs[] =
 {
@@ -2605,3 +2605,34 @@ _bfd_get_link_info (bfd *abfd)
 
   return elf_link_info (abfd);
 }
+
+/*
+FUNCTION
+	bfd_init
+
+SYNOPSIS
+	unsigned int bfd_init (void);
+
+DESCRIPTION
+	This routine must be called before any other BFD function to
+	initialize magical internal data structures.
+	Returns a magic number, which may be used to check
+	that the bfd library is configured as expected by users.
+
+.{* Value returned by bfd_init.  *}
+.#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
+.
+*/
+
+unsigned int
+bfd_init (void)
+{
+  bfd_error = bfd_error_no_error;
+  input_bfd = NULL;
+  input_error = bfd_error_no_error;
+  _bfd_error_program_name = NULL;
+  _bfd_error_internal = error_handler_fprintf;
+  _bfd_assert_handler = _bfd_default_assert_handler;
+
+  return BFD_INIT_MAGIC;
+}
diff --git a/bfd/doc/local.mk b/bfd/doc/local.mk
index cf2b479c1c9..41ab89fc6d8 100644
--- a/bfd/doc/local.mk
+++ b/bfd/doc/local.mk
@@ -32,7 +32,6 @@ DOCFILES = \
 	%D%/elf.texi \
 	%D%/format.texi \
 	%D%/hash.texi \
-	%D%/init.texi \
 	%D%/libbfd.texi \
 	%D%/linker.texi \
 	%D%/mmo.texi \
@@ -64,13 +63,12 @@ SRCPROT = $(srcdir)/archive.c $(srcdir)/archures.c \
 	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
 	$(srcdir)/opncls.c $(srcdir)/reloc.c \
 	$(srcdir)/section.c $(srcdir)/syms.c \
-	$(srcdir)/targets.c $(srcdir)/init.c
+	$(srcdir)/targets.c
 
 SRCIPROT = $(srcdir)/cache.c $(srcdir)/libbfd.c \
 	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
 	$(srcdir)/reloc.c $(srcdir)/cpu-h8300.c \
-	$(srcdir)/archures.c \
-	$(srcdir)/init.c
+	$(srcdir)/archures.c
 
 TEXIDIR = $(srcdir)/../texinfo/fsf
 
diff --git a/bfd/init.c b/bfd/init.c
index eee9891b1b5..bcae3cbdb99 100644
--- a/bfd/init.c
+++ b/bfd/init.c
@@ -33,29 +33,3 @@ SUBSECTION
 	These are the functions that handle initializing a BFD.
 */
 
-/*
-FUNCTION
-	bfd_init
-
-SYNOPSIS
-	unsigned int bfd_init (void);
-
-DESCRIPTION
-	This routine must be called before any other BFD function to
-	initialize magical internal data structures.
-	Returns a magic number, which may be used to check
-	that the bfd library is configured as expected by users.
-.
-.{* Value returned by bfd_init.  *}
-.
-.#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
-*/
-
-/* Actually, there is currently nothing for this function to do.
-   However, someday it may be needed, so keep it around.  */
-
-unsigned int
-bfd_init (void)
-{
-  return BFD_INIT_MAGIC;
-}
diff --git a/bfd/po/SRC-POTFILES.in b/bfd/po/SRC-POTFILES.in
index 26d5a2ce25d..a127ac0904c 100644
--- a/bfd/po/SRC-POTFILES.in
+++ b/bfd/po/SRC-POTFILES.in
@@ -284,7 +284,6 @@ i386bsd.c
 i386lynx.c
 i386msdos.c
 ihex.c
-init.c
 irix-core.c
 libaout.h
 libbfd.c
