+2018-10-15  Alan Modra  <amodra@gmail.com>
+
+       PR 23534
+       * init.c (BFD_INIT_MAGIC): Define.
+       (bfd_init): Return BFD_INIT_MAGIC.
+       bfd-in2.h: Regenerate.
+
 2018-10-13  Alan Modra  <amodra@gmail.com>
 
        PR 23770
 
 extern int elf32_csky_setup_section_lists
   (bfd *, struct bfd_link_info *);
 /* Extracted from init.c.  */
-void bfd_init (void);
+size_t 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;
 
        bfd_init
 
 SYNOPSIS
-       void bfd_init (void);
+       size_t 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.  */
 
-void
+size_t
 bfd_init (void)
 {
+  return BFD_INIT_MAGIC;
 }
 
+2018-10-15  Alan Modra  <amodra@gmail.com>
+
+       PR 23534
+       * addr2line.c (main): Exit with fatal error if bfd_init
+       returns an unexpected value.
+       * ar.c (main): Likewise.
+       * dlltool.c (identify_dll_for_implib): Likewise.
+       * nm.c (main): Likewise.
+       * objcopy.c (main): Likewise.
+       * objdump.c (main): Likewise.
+       * size.c (main): Likewise.
+       * strings.c (main): Likewise.
+       * windmc.c (main): Likewise.
+       * windres.c (main): Likewise.
+
 2018-10-11  Jordan Rupprecht  <rupprecht@google.com>
            Nick Clifton  <nickc@redhat.com>
 
 
 
   expandargv (&argc, &argv);
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   file_name = NULL;
 
 
   START_PROGRESS (program_name, 0);
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   xatexit (remove_output);
 
   search_data.symname = "__NULL_IMPORT_DESCRIPTOR";
   search_data.found = FALSE;
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
 
   abfd = bfd_openr (identify_imp_name, 0);
   if (abfd == NULL)
 
 
   expandargv (&argc, &argv);
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   while ((c = getopt_long (argc, argv, "aABCDef:gHhlnopPrSst:uvVvX:",
 
   strip_symbols = STRIP_UNDEF;
   discard_locals = LOCALS_UNDEF;
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   if (is_strip < 0)
 
 
   expandargv (&argc, &argv);
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   while ((c = getopt_long (argc, argv,
 
 
   expandargv (&argc, &argv);
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   while ((c = getopt_long (argc, argv, "ABHhVvdfotx", long_options,
 
       usage (stderr, 1);
     }
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   if (optind >= argc)
 
 
   expandargv (&argc, &argv);
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   target = NULL;
 
 
   expandargv (&argc, &argv);
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
 
   res_init ();
 
+2018-10-15  Alan Modra  <amodra@gmail.com>
+
+       PR 23534
+       * as.c (main): Exit with fatal error if bfd_init returns an
+       unexpected value.
+
 2018-10-11  Jan Beulich  <jbeulich@suse.com>
 
        * testsuite/gas/i386/xmmword.s: Add MOVQ / VMOVQ cases.
 
   out_file_name = OBJ_DEFAULT_OUTPUT_FILE_NAME;
 
   hex_init ();
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    as_fatal (_("libbfd ABI mismatch"));
   bfd_set_error_program_name (myname);
 
 #ifdef USE_EMULATIONS
 
+2018-10-15  Alan Modra  <amodra@gmail.com>
+
+       PR 23534
+       * ldmain.c (main): Exit with fatal error if bfd_init returns
+       an unexpected value.
+
 2018-10-13  Alan Modra  <amodra@gmail.com>
 
        * Makefile.am (eelf32btsmip_fbsd.c, eelf32btsmipn32_fbsd.c),
 
 
   expandargv (&argc, &argv);
 
-  bfd_init ();
+  if (bfd_init () != BFD_INIT_MAGIC)
+    einfo (_("%F%P: fatal error: libbfd ABI mismatch\n"));
 
   bfd_set_error_program_name (program_name);