dwarf2_per_bfd::dwarf2_per_bfd (bfd *obfd, const dwarf2_debug_sections *names,
bool can_copy_)
: obfd (obfd),
- can_copy (can_copy_)
+ can_copy (can_copy_),
+ captured_cwd (current_directory),
+ captured_debug_dir (debug_file_directory)
{
if (names == NULL)
names = &dwarf2_elf_names;
gdb::unique_xmalloc_ptr<char> search_path_holder;
if (search_cwd)
{
- if (!debug_file_directory.empty ())
+ const std::string &debug_dir = per_objfile->per_bfd->captured_debug_dir;
+
+ if (!debug_dir.empty ())
{
search_path_holder.reset (concat (".", dirname_separator_string,
- debug_file_directory.c_str (),
+ debug_dir.c_str (),
(char *) NULL));
search_path = search_path_holder.get ();
}
search_path = ".";
}
else
- search_path = debug_file_directory.c_str ();
+ search_path = per_objfile->per_bfd->captured_debug_dir.c_str ();
/* Add the path for the executable binary to the list of search paths. */
std::string objfile_dir = ldirname (objfile_name (per_objfile->objfile));
gdb::unique_xmalloc_ptr<char> absolute_name;
desc = openp (search_path, flags, file_name,
- O_RDONLY | O_BINARY, &absolute_name);
+ O_RDONLY | O_BINARY, &absolute_name,
+ per_objfile->per_bfd->captured_cwd.c_str ());
if (desc < 0)
return NULL;
/* That didn't work, try debug-file-directory, which, despite its name,
is a list of paths. */
- if (debug_file_directory.empty ())
+ if (per_objfile->per_bfd->captured_debug_dir.empty ())
return NULL;
return try_open_dwop_file (per_objfile, file_name,
[IWBN if the dwp file name was recorded in the executable, akin to
.gnu_debuglink, but that doesn't exist yet.]
Strip the directory from FILE_NAME and search again. */
- if (!debug_file_directory.empty ())
+ if (!per_objfile->per_bfd->captured_debug_dir.empty ())
{
/* Don't implicitly search the current directory here.
If the user wants to search "." to handle this case,
std::unordered_map<sect_offset, std::vector<sect_offset>,
gdb::hash_enum<sect_offset>>
abstract_to_concrete;
+
+ /* Current directory, captured at the moment that object this was
+ created. */
+ std::string captured_cwd;
+ /* Captured copy of debug_file_directory. */
+ std::string captured_debug_dir;
};
/* An iterator for all_units that is based on index. This