* dwarf2read.c (try_open_dwop_file): Work around behaviour of
authorDoug Evans <dje@google.com>
Thu, 13 Jun 2013 23:01:37 +0000 (23:01 +0000)
committerDoug Evans <dje@google.com>
Thu, 13 Jun 2013 23:01:37 +0000 (23:01 +0000)
OPF_TRY_CWD_FIRST to not search path if the file contains a '/'.

gdb/ChangeLog
gdb/dwarf2read.c

index ad73d8f..7ae0797 100644 (file)
@@ -1,3 +1,8 @@
+2013-06-13  Doug Evans  <dje@google.com>
+
+       * 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  <pmuldoon@redhat.com>
 
        * stack.c (backtrace_command_1): Fix indentation.
index 55b1b17..a902b70 100644 (file)
@@ -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))