if (!debugfile.empty ())
        {
-         gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile.c_str ()));
+         gdb_bfd_ref_ptr debug_bfd
+           (symfile_bfd_open_no_error (debugfile.c_str ()));
 
-         symbol_file_add_separate (debug_bfd, debugfile.c_str (),
-                                   symfile_flags, objfile);
+         if (debug_bfd != nullptr)
+           symbol_file_add_separate (debug_bfd, debugfile.c_str (),
+                                     symfile_flags, objfile);
        }
       else
        {
              if (fd.get () >= 0)
                {
                  /* File successfully retrieved from server.  */
-                 gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (symfile_path.get ()));
+                 gdb_bfd_ref_ptr debug_bfd
+                   (symfile_bfd_open_no_error (symfile_path.get ()));
 
-                 if (debug_bfd == nullptr)
-                   warning (_("File \"%s\" from debuginfod cannot be opened as bfd"),
-                            filename);
-                 else if (build_id_verify (debug_bfd.get (), build_id->size,
-                                           build_id->data))
+                 if (debug_bfd != nullptr
+                     && build_id_verify (debug_bfd.get (), build_id->size,
+                                         build_id->data))
                    {
                      symbol_file_add_separate (debug_bfd, symfile_path.get (),
                                                symfile_flags, objfile);
 
   return sym_bfd;
 }
 
+/* See symfile.h.  */
+
+gdb_bfd_ref_ptr
+symfile_bfd_open_no_error (const char *name) noexcept
+{
+  try
+    {
+      return symfile_bfd_open (name);
+    }
+  catch (const gdb_exception_error &err)
+    {
+      warning ("%s", err.what ());
+    }
+
+  return nullptr;
+}
+
 /* Return the section index for SECTION_NAME on OBJFILE.  Return -1 if
    the section was not found.  */
 
 
 
 extern gdb_bfd_ref_ptr symfile_bfd_open (const char *);
 
+/* Like symfile_bfd_open, but will not throw an exception on error.
+   Instead, it issues a warning and returns nullptr.  */
+
+extern gdb_bfd_ref_ptr symfile_bfd_open_no_error (const char *) noexcept;
+
 extern int get_section_index (struct objfile *, const char *);
 
 extern int print_symbol_loading_p (int from_tty, int mainline, int full);