gdb: query inferior's filesystem for build-id debug files

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.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32956
Approved-By: Andrew Burgess <aburgess@redhat.com>
This commit is contained in:
Fabian Kilger
2025-06-11 22:52:17 +02:00
committed by Andrew Burgess
parent bd389c9515
commit 56443763a8

View File

@@ -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_lstat (nullptr, link_on_target, &sb,
int res = target_fileio_lstat (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)