[PATCH 2/2][PR GDB/32956] gdb: query inferior's filesystem for build-id debug files

Fabian Kilger
2025-05-11T15:02:24Z

This fixes a bug related to build-id files with linux namespaces.
Specifically, we expect the debug files to be present inside the container,
thus the container filesystem should be queried if the program is running
inside one.

---
gdb/build-id.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/gdb/build-id.c b/gdb/build-id.c
index 43a80dd3978..abbd65a7c12 100644
--- a/gdb/build-id.c
+++ b/gdb/build-id.c
@@ -29,6 +29,7 @@
#include "gdbsupport/scoped_fd.h"
#include "debuginfod-support.h"
#include "extension.h"
+#include "inferior.h"

/* See build-id.h. */

@@ -128,7 +129,8 @@ build_id_to_debug_bfd_1 (const std::string &original_link,
if (supports_target_stat != TRIBOOL_FALSE)
{
struct stat sb;
- int res = target_fileio_stat (nullptr, link_on_target, &sb,
+ int res = target_fileio_stat (current_inferior (),
+ link_on_target, &sb,
&target_errno);

if (res != 0 && target_errno != FILEIO_ENOSYS)
@@ -157,7 +159,7 @@ build_id_to_debug_bfd_1 (const std::string &original_link,
the path doesn't exist, but we just assume that anything
other than EINVAL indicates the path doesn't exist. */
std::optional<std::string> link_target
- = target_fileio_readlink (nullptr, link_on_target,
+ = target_fileio_readlink (current_inferior (), link_on_target,
&target_errno);
if (link_target.has_value ()
|| target_errno == FILEIO_EINVAL)
--
2.49.0