+- return debug_bfd;
++ return ret_bfd;
+ }
+
+ /* See build-id.h. */
+
+ gdb_bfd_ref_ptr
+-build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
++build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id,
++ char **link_return, int add_debug_suffix)
+ {
+ /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
+ cause "/.build-id/..." lookups. */
+@@ -143,16 +652,16 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
+ if (size > 0)
+ {
+ size--;
+- string_appendf (link, "%02x/", (unsigned) *data++);
++ string_appendf (link, "%02x", (unsigned) *data++);
+ }
+-
++ if (size > 0)
++ link += "/";
+ while (size-- > 0)
+ string_appendf (link, "%02x", (unsigned) *data++);
+
+- link += ".debug";
+-
+ gdb_bfd_ref_ptr debug_bfd
+- = build_id_to_debug_bfd_1 (link, build_id_len, build_id);
++ = build_id_to_debug_bfd_1 (link, build_id_len, build_id,
++ link_return, add_debug_suffix);
+ if (debug_bfd != NULL)
+ return debug_bfd;
+
+@@ -166,7 +675,8 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
+ if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) != 0)
+ {
+ link = gdb_sysroot + link;
+- debug_bfd = build_id_to_debug_bfd_1 (link, build_id_len, build_id);
++ debug_bfd = build_id_to_debug_bfd_1 (link, build_id_len, build_id,
++ link_return, add_debug_suffix);
+ if (debug_bfd != NULL)
+ return debug_bfd;
+ }
+@@ -175,22 +685,190 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
+ return {};