aboutsummaryrefslogtreecommitdiff
path: root/gdb/linux-thread-db.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2014-01-13 21:19:18 +0100
committerJan Kratochvil <jan.kratochvil@redhat.com>2014-01-13 21:19:18 +0100
commitfde4f8ed8ce077b652f046ada8b208eaccbf3a7a (patch)
treef1ca339d56987ffc09ab9a9e98c44456899742b2 /gdb/linux-thread-db.c
parentbdf61915fc102bc07c12aa450376d7402bd427b4 (diff)
downloadgdb-fde4f8ed8ce077b652f046ada8b208eaccbf3a7a.zip
gdb-fde4f8ed8ce077b652f046ada8b208eaccbf3a7a.tar.gz
gdb-fde4f8ed8ce077b652f046ada8b208eaccbf3a7a.tar.bz2
Fix set auto-load safe-path false warning regression (PR 16216)
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.
Diffstat (limited to 'gdb/linux-thread-db.c')
-rw-r--r--gdb/linux-thread-db.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index 692d574..0daf24c 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -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;