mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-30 07:49:07 +08:00
linux-thread-db.c: use bool where possible in thread_db code
I happened to be looking at this code and noticed we could replace ints by bools at a few places. gdb/ChangeLog: * linux-thread-db.c (try_thread_db_load_1): Change return type to bool. (try_thread_db_load): Likewise. (try_thread_db_load_from_pdir_1): Likewise. (try_thread_db_load_from_pdir): Likewise. (try_thread_db_load_from_sdir): Likewise. (try_thread_db_load_from_dir): Likewise. (thread_db_load_search): Likewise. (has_libpthread): Likewise. (thread_db_load): Likewise.
This commit is contained in:
@ -1,3 +1,16 @@
|
|||||||
|
2019-05-15 Simon Marchi <simon.marchi@efficios.com>
|
||||||
|
|
||||||
|
* linux-thread-db.c (try_thread_db_load_1): Change return type
|
||||||
|
to bool.
|
||||||
|
(try_thread_db_load): Likewise.
|
||||||
|
(try_thread_db_load_from_pdir_1): Likewise.
|
||||||
|
(try_thread_db_load_from_pdir): Likewise.
|
||||||
|
(try_thread_db_load_from_sdir): Likewise.
|
||||||
|
(try_thread_db_load_from_dir): Likewise.
|
||||||
|
(thread_db_load_search): Likewise.
|
||||||
|
(has_libpthread): Likewise.
|
||||||
|
(thread_db_load): Likewise.
|
||||||
|
|
||||||
2019-05-15 Sergio Durigan Junior <sergiodj@redhat.com>
|
2019-05-15 Sergio Durigan Junior <sergiodj@redhat.com>
|
||||||
|
|
||||||
Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192
|
Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192
|
||||||
|
@ -795,12 +795,12 @@ check_thread_db (struct thread_db_info *info, bool log_progress)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Attempt to initialize dlopen()ed libthread_db, described by INFO.
|
/* Attempt to initialize dlopen()ed libthread_db, described by INFO.
|
||||||
Return 1 on success.
|
Return true on success.
|
||||||
Failure could happen if libthread_db does not have symbols we expect,
|
Failure could happen if libthread_db does not have symbols we expect,
|
||||||
or when it refuses to work with the current inferior (e.g. due to
|
or when it refuses to work with the current inferior (e.g. due to
|
||||||
version mismatch between libthread_db and libpthread). */
|
version mismatch between libthread_db and libpthread). */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
try_thread_db_load_1 (struct thread_db_info *info)
|
try_thread_db_load_1 (struct thread_db_info *info)
|
||||||
{
|
{
|
||||||
td_err_e err;
|
td_err_e err;
|
||||||
@ -818,7 +818,7 @@ try_thread_db_load_1 (struct thread_db_info *info)
|
|||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if ((a) == NULL) \
|
if ((a) == NULL) \
|
||||||
return 0; \
|
return false; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
CHK (TDB_VERBOSE_DLSYM (info, td_init));
|
CHK (TDB_VERBOSE_DLSYM (info, td_init));
|
||||||
@ -828,7 +828,7 @@ try_thread_db_load_1 (struct thread_db_info *info)
|
|||||||
{
|
{
|
||||||
warning (_("Cannot initialize libthread_db: %s"),
|
warning (_("Cannot initialize libthread_db: %s"),
|
||||||
thread_db_err_str (err));
|
thread_db_err_str (err));
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHK (TDB_VERBOSE_DLSYM (info, td_ta_new));
|
CHK (TDB_VERBOSE_DLSYM (info, td_ta_new));
|
||||||
@ -857,7 +857,7 @@ try_thread_db_load_1 (struct thread_db_info *info)
|
|||||||
default:
|
default:
|
||||||
warning (_("td_ta_new failed: %s"), thread_db_err_str (err));
|
warning (_("td_ta_new failed: %s"), thread_db_err_str (err));
|
||||||
}
|
}
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* These are essential. */
|
/* These are essential. */
|
||||||
@ -892,7 +892,7 @@ try_thread_db_load_1 (struct thread_db_info *info)
|
|||||||
if (check_thread_db_on_load)
|
if (check_thread_db_on_load)
|
||||||
{
|
{
|
||||||
if (!check_thread_db (info, libthread_db_debug))
|
if (!check_thread_db (info, libthread_db_debug))
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->td_ta_thr_iter_p == NULL)
|
if (info->td_ta_thr_iter_p == NULL)
|
||||||
@ -914,7 +914,7 @@ try_thread_db_load_1 (struct thread_db_info *info)
|
|||||||
/* Even if libthread_db initializes, if the thread list is
|
/* Even if libthread_db initializes, if the thread list is
|
||||||
corrupted, we'd not manage to list any threads. Better reject this
|
corrupted, we'd not manage to list any threads. Better reject this
|
||||||
thread_db, and fall back to at least listing LWPs. */
|
thread_db, and fall back to at least listing LWPs. */
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
|
printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
|
||||||
@ -942,14 +942,14 @@ try_thread_db_load_1 (struct thread_db_info *info)
|
|||||||
if (thread_db_list->next == NULL)
|
if (thread_db_list->next == NULL)
|
||||||
push_target (&the_thread_db_target);
|
push_target (&the_thread_db_target);
|
||||||
|
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attempt to use LIBRARY as libthread_db. LIBRARY could be absolute,
|
/* Attempt to use LIBRARY as libthread_db. LIBRARY could be absolute,
|
||||||
relative, or just LIBTHREAD_DB. */
|
relative, or just LIBTHREAD_DB. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
try_thread_db_load (const char *library, int check_auto_load_safe)
|
try_thread_db_load (const char *library, bool check_auto_load_safe)
|
||||||
{
|
{
|
||||||
void *handle;
|
void *handle;
|
||||||
struct thread_db_info *info;
|
struct thread_db_info *info;
|
||||||
@ -968,14 +968,14 @@ try_thread_db_load (const char *library, int check_auto_load_safe)
|
|||||||
if (libthread_db_debug)
|
if (libthread_db_debug)
|
||||||
fprintf_unfiltered (gdb_stdlog, _("open failed: %s.\n"),
|
fprintf_unfiltered (gdb_stdlog, _("open failed: %s.\n"),
|
||||||
safe_strerror (errno));
|
safe_strerror (errno));
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file_is_auto_load_safe (library, _("auto-load: Loading libthread-db "
|
if (!file_is_auto_load_safe (library, _("auto-load: Loading libthread-db "
|
||||||
"library \"%s\" from explicit "
|
"library \"%s\" from explicit "
|
||||||
"directory.\n"),
|
"directory.\n"),
|
||||||
library))
|
library))
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
handle = dlopen (library, RTLD_NOW);
|
handle = dlopen (library, RTLD_NOW);
|
||||||
@ -983,7 +983,7 @@ try_thread_db_load (const char *library, int check_auto_load_safe)
|
|||||||
{
|
{
|
||||||
if (libthread_db_debug)
|
if (libthread_db_debug)
|
||||||
fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
|
fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (libthread_db_debug && strchr (library, '/') == NULL)
|
if (libthread_db_debug && strchr (library, '/') == NULL)
|
||||||
@ -1008,11 +1008,11 @@ try_thread_db_load (const char *library, int check_auto_load_safe)
|
|||||||
info->filename = gdb_realpath (library).release ();
|
info->filename = gdb_realpath (library).release ();
|
||||||
|
|
||||||
if (try_thread_db_load_1 (info))
|
if (try_thread_db_load_1 (info))
|
||||||
return 1;
|
return true;
|
||||||
|
|
||||||
/* This library "refused" to work on current inferior. */
|
/* This library "refused" to work on current inferior. */
|
||||||
delete_thread_db_info (inferior_ptid.pid ());
|
delete_thread_db_info (inferior_ptid.pid ());
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Subroutine of try_thread_db_load_from_pdir to simplify it.
|
/* Subroutine of try_thread_db_load_from_pdir to simplify it.
|
||||||
@ -1020,7 +1020,7 @@ try_thread_db_load (const char *library, int check_auto_load_safe)
|
|||||||
SUBDIR may be NULL. It may also be something like "../lib64".
|
SUBDIR may be NULL. It may also be something like "../lib64".
|
||||||
The result is true for success. */
|
The result is true for success. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
|
try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
|
||||||
{
|
{
|
||||||
const char *obj_name = objfile_name (obj);
|
const char *obj_name = objfile_name (obj);
|
||||||
@ -1029,7 +1029,7 @@ try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
|
|||||||
{
|
{
|
||||||
warning (_("Expected absolute pathname for libpthread in the"
|
warning (_("Expected absolute pathname for libpthread in the"
|
||||||
" inferior, but got %s."), obj_name);
|
" inferior, but got %s."), obj_name);
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string path = obj_name;
|
std::string path = obj_name;
|
||||||
@ -1041,7 +1041,7 @@ try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
|
|||||||
path = path + subdir + "/";
|
path = path + subdir + "/";
|
||||||
path += LIBTHREAD_DB_SO;
|
path += LIBTHREAD_DB_SO;
|
||||||
|
|
||||||
return try_thread_db_load (path.c_str (), 1);
|
return try_thread_db_load (path.c_str (), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle $pdir in libthread-db-search-path.
|
/* Handle $pdir in libthread-db-search-path.
|
||||||
@ -1049,17 +1049,17 @@ try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
|
|||||||
SUBDIR may be NULL. It may also be something like "../lib64".
|
SUBDIR may be NULL. It may also be something like "../lib64".
|
||||||
The result is true for success. */
|
The result is true for success. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
try_thread_db_load_from_pdir (const char *subdir)
|
try_thread_db_load_from_pdir (const char *subdir)
|
||||||
{
|
{
|
||||||
if (!auto_load_thread_db)
|
if (!auto_load_thread_db)
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
for (objfile *obj : current_program_space->objfiles ())
|
for (objfile *obj : current_program_space->objfiles ())
|
||||||
if (libpthread_name_p (objfile_name (obj)))
|
if (libpthread_name_p (objfile_name (obj)))
|
||||||
{
|
{
|
||||||
if (try_thread_db_load_from_pdir_1 (obj, subdir))
|
if (try_thread_db_load_from_pdir_1 (obj, subdir))
|
||||||
return 1;
|
return true;
|
||||||
|
|
||||||
/* We may have found the separate-debug-info version of
|
/* We may have found the separate-debug-info version of
|
||||||
libpthread, and it may live in a directory without a matching
|
libpthread, and it may live in a directory without a matching
|
||||||
@ -1068,10 +1068,10 @@ try_thread_db_load_from_pdir (const char *subdir)
|
|||||||
return try_thread_db_load_from_pdir_1 (obj->separate_debug_objfile_backlink,
|
return try_thread_db_load_from_pdir_1 (obj->separate_debug_objfile_backlink,
|
||||||
subdir);
|
subdir);
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle $sdir in libthread-db-search-path.
|
/* Handle $sdir in libthread-db-search-path.
|
||||||
@ -1079,34 +1079,34 @@ try_thread_db_load_from_pdir (const char *subdir)
|
|||||||
dlopen(file_without_path) will look.
|
dlopen(file_without_path) will look.
|
||||||
The result is true for success. */
|
The result is true for success. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
try_thread_db_load_from_sdir (void)
|
try_thread_db_load_from_sdir (void)
|
||||||
{
|
{
|
||||||
return try_thread_db_load (LIBTHREAD_DB_SO, 0);
|
return try_thread_db_load (LIBTHREAD_DB_SO, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try to load libthread_db from directory DIR of length DIR_LEN.
|
/* Try to load libthread_db from directory DIR of length DIR_LEN.
|
||||||
The result is true for success. */
|
The result is true for success. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
try_thread_db_load_from_dir (const char *dir, size_t dir_len)
|
try_thread_db_load_from_dir (const char *dir, size_t dir_len)
|
||||||
{
|
{
|
||||||
if (!auto_load_thread_db)
|
if (!auto_load_thread_db)
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
std::string path = std::string (dir, dir_len) + "/" + LIBTHREAD_DB_SO;
|
std::string path = std::string (dir, dir_len) + "/" + LIBTHREAD_DB_SO;
|
||||||
|
|
||||||
return try_thread_db_load (path.c_str (), 1);
|
return try_thread_db_load (path.c_str (), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Search libthread_db_search_path for libthread_db which "agrees"
|
/* Search libthread_db_search_path for libthread_db which "agrees"
|
||||||
to work on current inferior.
|
to work on current inferior.
|
||||||
The result is true for success. */
|
The result is true for success. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
thread_db_load_search (void)
|
thread_db_load_search (void)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
bool rc = false;
|
||||||
|
|
||||||
std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
|
std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
|
||||||
= dirnames_to_char_ptr_vec (libthread_db_search_path);
|
= dirnames_to_char_ptr_vec (libthread_db_search_path);
|
||||||
@ -1159,22 +1159,22 @@ thread_db_load_search (void)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return non-zero if the inferior has a libpthread. */
|
/* Return true if the inferior has a libpthread. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
has_libpthread (void)
|
has_libpthread (void)
|
||||||
{
|
{
|
||||||
for (objfile *obj : current_program_space->objfiles ())
|
for (objfile *obj : current_program_space->objfiles ())
|
||||||
if (libpthread_name_p (objfile_name (obj)))
|
if (libpthread_name_p (objfile_name (obj)))
|
||||||
return 1;
|
return true;
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attempt to load and initialize libthread_db.
|
/* Attempt to load and initialize libthread_db.
|
||||||
Return 1 on success. */
|
Return 1 on success. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
thread_db_load (void)
|
thread_db_load (void)
|
||||||
{
|
{
|
||||||
struct thread_db_info *info;
|
struct thread_db_info *info;
|
||||||
@ -1182,19 +1182,19 @@ thread_db_load (void)
|
|||||||
info = get_thread_db_info (inferior_ptid.pid ());
|
info = get_thread_db_info (inferior_ptid.pid ());
|
||||||
|
|
||||||
if (info != NULL)
|
if (info != NULL)
|
||||||
return 1;
|
return true;
|
||||||
|
|
||||||
/* Don't attempt to use thread_db on executables not running
|
/* Don't attempt to use thread_db on executables not running
|
||||||
yet. */
|
yet. */
|
||||||
if (!target_has_registers)
|
if (!target_has_registers)
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
/* Don't attempt to use thread_db for remote targets. */
|
/* Don't attempt to use thread_db for remote targets. */
|
||||||
if (!(target_can_run () || core_bfd))
|
if (!(target_can_run () || core_bfd))
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
if (thread_db_load_search ())
|
if (thread_db_load_search ())
|
||||||
return 1;
|
return true;
|
||||||
|
|
||||||
/* We couldn't find a libthread_db.
|
/* We couldn't find a libthread_db.
|
||||||
If the inferior has a libpthread warn the user. */
|
If the inferior has a libpthread warn the user. */
|
||||||
@ -1202,13 +1202,13 @@ thread_db_load (void)
|
|||||||
{
|
{
|
||||||
warning (_("Unable to find libthread_db matching inferior's thread"
|
warning (_("Unable to find libthread_db matching inferior's thread"
|
||||||
" library, thread debugging will not be available."));
|
" library, thread debugging will not be available."));
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Either this executable isn't using libpthread at all, or it is
|
/* Either this executable isn't using libpthread at all, or it is
|
||||||
statically linked. Since we can't easily distinguish these two cases,
|
statically linked. Since we can't easily distinguish these two cases,
|
||||||
no warning is issued. */
|
no warning is issued. */
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Reference in New Issue
Block a user