diff --git a/gdb/NEWS b/gdb/NEWS
index eb1a589..bf4cadd 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -83,18 +83,6 @@ FreeBSD/mips			mips*-*-freebsd
 flash-erase
   Erases all the flash memory regions reported by the target.
 
-* New MI commands
-
--target-flash-erase
-  Erases all the flash memory regions reported by the target.  This is
-  equivalent to the CLI command flash-erase.
-
--file-list-shared-libraries
-  List the shared libraries in the program.  This is
-  equivalent to the CLI command "info shared".
-
-* New commands
-
 set disassembler-options
 show disassembler-options
   Controls the passing of target specific information to the disassembler.
@@ -106,6 +94,20 @@ show disassembler-options
 maint print arc arc-instruction address
   Print internal disassembler information about instruction at a given address.
 
+set debug separate-debug-file
+show debug separate-debug-file
+  Control the display of debug output about separate debug file search.
+
+* New MI commands
+
+-target-flash-erase
+  Erases all the flash memory regions reported by the target.  This is
+  equivalent to the CLI command flash-erase.
+
+-file-list-shared-libraries
+  List the shared libraries in the program.  This is
+  equivalent to the CLI command "info shared".
+
 * Removed targets and native configurations
 
 Alpha running FreeBSD         alpha*-*-freebsd*
diff --git a/gdb/build-id.c b/gdb/build-id.c
index 0f63223..4b2b63e 100644
--- a/gdb/build-id.c
+++ b/gdb/build-id.c
@@ -112,6 +112,9 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
 	s += sprintf (s, "%02x", (unsigned) *data++);
       strcpy (s, ".debug");
 
+      if (separate_debug_file_debug)
+	printf_unfiltered (_("  Trying %s\n"), link);
+
       /* lrealpath() is expensive even for the usually non-existent files.  */
       if (access (link, F_OK) == 0)
 	filename = lrealpath (link);
@@ -147,6 +150,10 @@ find_separate_debug_file_by_buildid (struct objfile *objfile)
   build_id = build_id_bfd_get (objfile->obfd);
   if (build_id != NULL)
     {
+      if (separate_debug_file_debug)
+	printf_unfiltered (_("\nLooking for separate debug info (build-id) for "
+			     "%s\n"), objfile_name (objfile));
+
       gdb_bfd_ref_ptr abfd (build_id_to_debug_bfd (build_id->size,
 						   build_id->data));
       /* Prevent looping on a stripped .debug file.  */
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 9fb70f6..c1f65f6 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -23979,6 +23979,12 @@ the serial line to the remote machine.  The info is printed on the
 @value{GDBN} standard output stream. The default is off.
 @item show debug remote
 Displays the state of display of remote packets.
+
+@item set debug separate-debug-file
+Turns on or off display of debug output about separate debug file search.
+@item show debug separate-debug-file
+Displays the state of separate debug file search debug output.
+
 @item set debug serial
 Turns on or off display of @value{GDBN} serial debugging info. The
 default is off.
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 846aabe..f936cf3 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1333,6 +1333,10 @@ symbol_file_clear (int from_tty)
     printf_unfiltered (_("No symbol file now.\n"));
 }
 
+/* See symfile.h.  */
+
+int separate_debug_file_debug = 0;
+
 static int
 separate_debug_file_exists (const char *name, unsigned long crc,
 			    struct objfile *parent_objfile)
@@ -1351,6 +1355,9 @@ separate_debug_file_exists (const char *name, unsigned long crc,
   if (filename_cmp (name, objfile_name (parent_objfile)) == 0)
     return 0;
 
+  if (separate_debug_file_debug)
+    printf_unfiltered (_("  Trying %s\n"), name);
+
   gdb_bfd_ref_ptr abfd (gdb_bfd_open (name, gnutarget, -1));
 
   if (abfd == NULL)
@@ -1444,6 +1451,10 @@ find_separate_debug_file (const char *dir,
   struct cleanup *back_to;
   int ix;
 
+  if (separate_debug_file_debug)
+    printf_unfiltered (_("\nLooking for separate debug info (debug link) for "
+		         "%s\n"), objfile_name (objfile));
+
   /* Set I to std::max (strlen (canon_dir), strlen (dir)).  */
   i = strlen (dir);
   if (canon_dir != NULL && strlen (canon_dir) > i)
@@ -3975,4 +3986,11 @@ full  == print messages for the executable,\n\
 			NULL,
 			NULL,
 			&setprintlist, &showprintlist);
+
+  add_setshow_boolean_cmd ("separate-debug-file", no_class,
+			   &separate_debug_file_debug, _("\
+Set printing of separate debug info file search debug."), _("\
+Show printing of separate debug info file search debug."), _("\
+When on, GDB prints the searched locations while looking for separate debug \
+info files."), NULL, NULL, &setdebuglist, &showdebuglist);
 }
diff --git a/gdb/symfile.h b/gdb/symfile.h
index ab536e8..bb47fdf 100644
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
@@ -646,4 +646,8 @@ extern void elfmdebug_build_psymtabs (struct objfile *,
 
 extern gdb_bfd_ref_ptr find_separate_debug_file_in_section (struct objfile *);
 
+/* True if we are printing debug output about separate debug info files.  */
+
+extern int separate_debug_file_debug;
+
 #endif /* !defined(SYMFILE_H) */
