Fix set auto-load safe-path false warning regression (PR 16216)
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 13 Jan 2014 20:19:18 +0000 (21:19 +0100)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 13 Jan 2014 20:19:18 +0000 (21:19 +0100)
gdb/
2014-01-07  Jan Kratochvil  <jan.kratochvil@redhat.com>

PR threads/16216
* linux-thread-db.c (try_thread_db_load): Add parameter
check_auto_load_safe.  Move here the file_is_auto_load_safe call.
(try_thread_db_load_from_pdir_1): Move it there from here.
(try_thread_db_load_from_sdir): Update caller.
(try_thread_db_load_from_dir): Move it there from here.

gdb/ChangeLog
gdb/linux-thread-db.c

index 16ed4f0..2355f53 100644 (file)
@@ -1,3 +1,12 @@
+2014-01-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       PR threads/16216
+       * linux-thread-db.c (try_thread_db_load): Add parameter
+       check_auto_load_safe.  Move here the file_is_auto_load_safe call.
+       (try_thread_db_load_from_pdir_1): Move it there from here.
+       (try_thread_db_load_from_sdir): Update caller.
+       (try_thread_db_load_from_dir): Move it there from here.
+
 2014-01-13  Patrick Palka  <patrick@parcs.ath.cx>
 
        * regformats/regdat.sh: Always rewrite the register file.
index 692d574..0daf24c 100644 (file)
@@ -838,7 +838,7 @@ try_thread_db_load_1 (struct thread_db_info *info)
    relative, or just LIBTHREAD_DB.  */
 
 static int
-try_thread_db_load (const char *library)
+try_thread_db_load (const char *library, int check_auto_load_safe)
 {
   void *handle;
   struct thread_db_info *info;
@@ -846,6 +846,25 @@ try_thread_db_load (const char *library)
   if (libthread_db_debug)
     printf_unfiltered (_("Trying host libthread_db library: %s.\n"),
                        library);
+
+  if (check_auto_load_safe)
+    {
+      if (access (library, R_OK) != 0)
+       {
+         /* Do not print warnings by file_is_auto_load_safe if the library does
+            not exist at this place.  */
+         if (libthread_db_debug)
+           printf_unfiltered (_("open failed: %s.\n"), safe_strerror (errno));
+         return 0;
+       }
+
+      if (!file_is_auto_load_safe (library, _("auto-load: Loading libthread-db "
+                                             "library \"%s\" from explicit "
+                                             "directory.\n"),
+                                  library))
+       return 0;
+    }
+
   handle = dlopen (library, RTLD_NOW);
   if (handle == NULL)
     {
@@ -919,12 +938,7 @@ try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
     }
   strcat (cp, LIBTHREAD_DB_SO);
 
-  if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
-                                      "library \"%s\" from $pdir.\n"),
-                              path))
-    result = 0;
-  else
-    result = try_thread_db_load (path);
+  result = try_thread_db_load (path, 1);
 
   do_cleanups (cleanup);
   return result;
@@ -970,7 +984,7 @@ try_thread_db_load_from_pdir (const char *subdir)
 static int
 try_thread_db_load_from_sdir (void)
 {
-  return try_thread_db_load (LIBTHREAD_DB_SO);
+  return try_thread_db_load (LIBTHREAD_DB_SO, 0);
 }
 
 /* Try to load libthread_db from directory DIR of length DIR_LEN.
@@ -993,13 +1007,7 @@ try_thread_db_load_from_dir (const char *dir, size_t dir_len)
   path[dir_len] = '/';
   strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
 
-  if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
-                                      "library \"%s\" from explicit "
-                                      "directory.\n"),
-                              path))
-    result = 0;
-  else
-    result = try_thread_db_load (path);
+  result = try_thread_db_load (path, 1);
 
   do_cleanups (cleanup);
   return result;