From 9c02c1294723e1363c7555c8f404cf88eaf8e7c4 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Thu, 13 Jun 2013 23:01:37 +0000 Subject: [PATCH] * dwarf2read.c (try_open_dwop_file): Work around behaviour of OPF_TRY_CWD_FIRST to not search path if the file contains a '/'. --- gdb/ChangeLog | 5 +++++ gdb/dwarf2read.c | 23 ++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ad73d8f..7ae0797 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2013-06-13 Doug Evans + + * dwarf2read.c (try_open_dwop_file): Work around behaviour of + OPF_TRY_CWD_FIRST to not search path if the file contains a '/'. + 2013-06-12 Phil Muldoon * stack.c (backtrace_command_1): Fix indentation. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 55b1b17..a902b70 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9290,22 +9290,31 @@ try_open_dwop_file (const char *file_name, int is_dwp) bfd *sym_bfd; int desc, flags; char *absolute_name; + /* Blech. OPF_TRY_CWD_FIRST also disables searching the path list if + FILE_NAME contains a '/'. So we can't use it. Instead prepend "." + to debug_file_directory. */ + char *search_path; + static const char dirname_separator_string[] = { DIRNAME_SEPARATOR, '\0' }; + + if (*debug_file_directory != '\0') + search_path = concat (".", dirname_separator_string, debug_file_directory, + NULL); + else + search_path = xstrdup ("."); - flags = OPF_TRY_CWD_FIRST; + flags = 0; if (is_dwp) flags |= OPF_SEARCH_IN_PATH; - desc = openp (debug_file_directory, flags, file_name, + desc = openp (search_path, flags, file_name, O_RDONLY | O_BINARY, &absolute_name); + xfree (search_path); if (desc < 0) return NULL; sym_bfd = gdb_bfd_open (absolute_name, gnutarget, desc); - if (!sym_bfd) - { - xfree (absolute_name); - return NULL; - } xfree (absolute_name); + if (sym_bfd == NULL) + return NULL; bfd_set_cacheable (sym_bfd, 1); if (!bfd_check_format (sym_bfd, bfd_object)) -- 2.7.4