1 /* libthread_db assisted debugging support, generic parts.
3 Copyright (C) 1999-2021 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 #include "gdb_proc_service.h"
23 #include "nat/gdb_thread_db.h"
24 #include "gdbsupport/gdb_vecs.h"
28 #include "gdbthread.h"
36 #include "solib-svr4.h"
38 #include "observable.h"
39 #include "linux-nat.h"
40 #include "nat/linux-procfs.h"
41 #include "nat/linux-ptrace.h"
42 #include "nat/linux-osdata.h"
43 #include "auto-load.h"
44 #include "cli/cli-utils.h"
47 #include "nat/linux-namespaces.h"
49 #include "gdbsupport/pathstuff.h"
51 #include "cli/cli-style.h"
53 /* GNU/Linux libthread_db support.
55 libthread_db is a library, provided along with libpthread.so, which
56 exposes the internals of the thread library to a debugger. It
57 allows GDB to find existing threads, new threads as they are
58 created, thread IDs (usually, the result of pthread_self), and
59 thread-local variables.
61 The libthread_db interface originates on Solaris, where it is both
62 more powerful and more complicated. This implementation only works
63 for NPTL, the glibc threading library. It assumes that each thread
64 is permanently assigned to a single light-weight process (LWP). At
65 some point it also supported the older LinuxThreads library, but it
68 libthread_db-specific information is stored in the "private" field
69 of struct thread_info. When the field is NULL we do not yet have
70 information about the new thread; this could be temporary (created,
71 but the thread library's data structures do not reflect it yet)
72 or permanent (created using clone instead of pthread_create).
74 Process IDs managed by linux-thread-db.c match those used by
75 linux-nat.c: a common PID for all processes, an LWP ID for each
76 thread, and no TID. We save the TID in private. Keeping it out
77 of the ptid_t prevents thread IDs changing when libpthread is
78 loaded or unloaded. */
80 static const target_info thread_db_target_info
= {
82 N_("multi-threaded child process."),
83 N_("Threads and pthreads support.")
86 class thread_db_target final
: public target_ops
89 const target_info
&info () const override
90 { return thread_db_target_info
; }
92 strata
stratum () const override
{ return thread_stratum
; }
94 void detach (inferior
*, int) override
;
95 ptid_t
wait (ptid_t
, struct target_waitstatus
*, target_wait_flags
) override
;
96 void resume (ptid_t
, int, enum gdb_signal
) override
;
97 void mourn_inferior () override
;
98 void follow_exec (inferior
*, ptid_t
, const char *) override
;
99 void update_thread_list () override
;
100 std::string
pid_to_str (ptid_t
) override
;
101 CORE_ADDR
get_thread_local_address (ptid_t ptid
,
102 CORE_ADDR load_module_addr
,
103 CORE_ADDR offset
) override
;
104 const char *extra_thread_info (struct thread_info
*) override
;
105 ptid_t
get_ada_task_ptid (long lwp
, long thread
) override
;
107 thread_info
*thread_handle_to_thread_info (const gdb_byte
*thread_handle
,
109 inferior
*inf
) override
;
110 gdb::byte_vector
thread_info_to_thread_handle (struct thread_info
*) override
;
113 static char *libthread_db_search_path
;
115 /* Set to true if thread_db auto-loading is enabled
116 by the "set auto-load libthread-db" command. */
117 static bool auto_load_thread_db
= true;
119 /* Set to true if load-time libthread_db tests have been enabled
120 by the "maintenance set check-libthread-db" command. */
121 static bool check_thread_db_on_load
= false;
123 /* "show" command for the auto_load_thread_db configuration variable. */
126 show_auto_load_thread_db (struct ui_file
*file
, int from_tty
,
127 struct cmd_list_element
*c
, const char *value
)
129 fprintf_filtered (file
, _("Auto-loading of inferior specific libthread_db "
135 set_libthread_db_search_path (const char *ignored
, int from_tty
,
136 struct cmd_list_element
*c
)
138 if (*libthread_db_search_path
== '\0')
140 xfree (libthread_db_search_path
);
141 libthread_db_search_path
= xstrdup (LIBTHREAD_DB_SEARCH_PATH
);
145 /* If non-zero, print details of libthread_db processing. */
147 static unsigned int libthread_db_debug
;
150 show_libthread_db_debug (struct ui_file
*file
, int from_tty
,
151 struct cmd_list_element
*c
, const char *value
)
153 fprintf_filtered (file
, _("libthread-db debugging is %s.\n"), value
);
156 /* If we're running on GNU/Linux, we must explicitly attach to any new
159 /* This module's target vector. */
160 static thread_db_target the_thread_db_target
;
162 /* Non-zero if we have determined the signals used by the threads
164 static int thread_signals
;
166 struct thread_db_info
168 struct thread_db_info
*next
;
170 /* The target this thread_db_info is bound to. */
171 process_stratum_target
*process_target
;
173 /* Process id this object refers to. */
176 /* Handle from dlopen for libthread_db.so. */
179 /* Absolute pathname from gdb_realpath to disk file used for dlopen-ing
180 HANDLE. It may be NULL for system library. */
183 /* Structure that identifies the child process for the
184 <proc_service.h> interface. */
185 struct ps_prochandle proc_handle
;
187 /* Connection to the libthread_db library. */
188 td_thragent_t
*thread_agent
;
190 /* True if we need to apply the workaround for glibc/BZ5983. When
191 we catch a PTRACE_O_TRACEFORK, and go query the child's thread
192 list, nptl_db returns the parent's threads in addition to the new
193 (single) child thread. If this flag is set, we do extra work to
194 be able to ignore such stale entries. */
195 int need_stale_parent_threads_check
;
197 /* Pointers to the libthread_db functions. */
199 td_init_ftype
*td_init_p
;
200 td_ta_new_ftype
*td_ta_new_p
;
201 td_ta_delete_ftype
*td_ta_delete_p
;
202 td_ta_map_lwp2thr_ftype
*td_ta_map_lwp2thr_p
;
203 td_ta_thr_iter_ftype
*td_ta_thr_iter_p
;
204 td_thr_get_info_ftype
*td_thr_get_info_p
;
205 td_thr_tls_get_addr_ftype
*td_thr_tls_get_addr_p
;
206 td_thr_tlsbase_ftype
*td_thr_tlsbase_p
;
209 /* List of known processes using thread_db, and the required
211 static thread_db_info
*thread_db_list
;
213 static void thread_db_find_new_threads_1 (thread_info
*stopped
);
214 static void thread_db_find_new_threads_2 (thread_info
*stopped
,
217 static void check_thread_signals (void);
219 static struct thread_info
*record_thread
220 (struct thread_db_info
*info
, struct thread_info
*tp
,
221 ptid_t ptid
, const td_thrhandle_t
*th_p
, const td_thrinfo_t
*ti_p
);
223 /* Add the current inferior to the list of processes using libpthread.
224 Return a pointer to the newly allocated object that was added to
225 THREAD_DB_LIST. HANDLE is the handle returned by dlopen'ing
228 static struct thread_db_info
*
229 add_thread_db_info (void *handle
)
231 struct thread_db_info
*info
= XCNEW (struct thread_db_info
);
233 info
->process_target
= current_inferior ()->process_target ();
234 info
->pid
= inferior_ptid
.pid ();
235 info
->handle
= handle
;
237 /* The workaround works by reading from /proc/pid/status, so it is
238 disabled for core files. */
239 if (target_has_execution ())
240 info
->need_stale_parent_threads_check
= 1;
242 info
->next
= thread_db_list
;
243 thread_db_list
= info
;
248 /* Return the thread_db_info object representing the bookkeeping
249 related to process PID, if any; NULL otherwise. */
251 static struct thread_db_info
*
252 get_thread_db_info (process_stratum_target
*targ
, int pid
)
254 struct thread_db_info
*info
;
256 for (info
= thread_db_list
; info
; info
= info
->next
)
257 if (targ
== info
->process_target
&& pid
== info
->pid
)
263 static const char *thread_db_err_str (td_err_e err
);
265 /* When PID has exited or has been detached, we no longer want to keep
266 track of it as using libpthread. Call this function to discard
267 thread_db related info related to PID. Note that this closes
268 LIBTHREAD_DB_SO's dlopen'ed handle. */
271 delete_thread_db_info (process_stratum_target
*targ
, int pid
)
273 struct thread_db_info
*info
, *info_prev
;
277 for (info
= thread_db_list
; info
; info_prev
= info
, info
= info
->next
)
278 if (targ
== info
->process_target
&& pid
== info
->pid
)
284 if (info
->thread_agent
!= NULL
&& info
->td_ta_delete_p
!= NULL
)
286 td_err_e err
= info
->td_ta_delete_p (info
->thread_agent
);
289 warning (_("Cannot deregister process %d from libthread_db: %s"),
290 pid
, thread_db_err_str (err
));
291 info
->thread_agent
= NULL
;
294 if (info
->handle
!= NULL
)
295 dlclose (info
->handle
);
297 xfree (info
->filename
);
300 info_prev
->next
= info
->next
;
302 thread_db_list
= info
->next
;
307 /* Use "struct private_thread_info" to cache thread state. This is
308 a substantial optimization. */
310 struct thread_db_thread_info
: public private_thread_info
312 /* Flag set when we see a TD_DEATH event for this thread. */
315 /* Cached thread state. */
316 td_thrhandle_t th
{};
320 static thread_db_thread_info
*
321 get_thread_db_thread_info (thread_info
*thread
)
323 return static_cast<thread_db_thread_info
*> (thread
->priv
.get ());
327 thread_db_err_str (td_err_e err
)
334 return "generic 'call succeeded'";
336 return "generic error";
338 return "no thread to satisfy query";
340 return "no sync handle to satisfy query";
342 return "no LWP to satisfy query";
344 return "invalid process handle";
346 return "invalid thread handle";
348 return "invalid synchronization handle";
350 return "invalid thread agent";
352 return "invalid key";
354 return "no event message for getmsg";
356 return "FPU register set not available";
358 return "application not linked with libthread";
360 return "requested event is not supported";
362 return "capability not available";
364 return "debugger service failed";
366 return "operation not applicable to";
368 return "no thread-specific data for this thread";
370 return "malloc failed";
372 return "only part of register set was written/read";
374 return "X register set not available for this thread";
375 #ifdef THREAD_DB_HAS_TD_NOTALLOC
377 return "thread has not yet allocated TLS for given module";
379 #ifdef THREAD_DB_HAS_TD_VERSION
381 return "versions of libpthread and libthread_db do not match";
383 #ifdef THREAD_DB_HAS_TD_NOTLS
385 return "there is no TLS segment in the given module";
388 snprintf (buf
, sizeof (buf
), "unknown thread_db error '%d'", err
);
393 /* Fetch the user-level thread id of PTID. STOPPED is a stopped
394 thread that we can use to access memory. */
396 static struct thread_info
*
397 thread_from_lwp (thread_info
*stopped
, ptid_t ptid
)
402 struct thread_db_info
*info
;
403 struct thread_info
*tp
;
405 /* Just in case td_ta_map_lwp2thr doesn't initialize it completely. */
408 /* This ptid comes from linux-nat.c, which should always fill in the
410 gdb_assert (ptid
.lwp () != 0);
412 info
= get_thread_db_info (stopped
->inf
->process_target (), ptid
.pid ());
414 /* Access an lwp we know is stopped. */
415 info
->proc_handle
.thread
= stopped
;
416 err
= info
->td_ta_map_lwp2thr_p (info
->thread_agent
, ptid
.lwp (),
419 error (_("Cannot find user-level thread for LWP %ld: %s"),
420 ptid
.lwp (), thread_db_err_str (err
));
422 err
= info
->td_thr_get_info_p (&th
, &ti
);
424 error (_("thread_get_info_callback: cannot get thread info: %s"),
425 thread_db_err_str (err
));
427 /* Fill the cache. */
428 tp
= find_thread_ptid (stopped
->inf
->process_target (), ptid
);
429 return record_thread (info
, tp
, ptid
, &th
, &ti
);
433 /* See linux-nat.h. */
436 thread_db_notice_clone (ptid_t parent
, ptid_t child
)
438 struct thread_db_info
*info
;
440 info
= get_thread_db_info (linux_target
, child
.pid ());
445 thread_info
*stopped
= find_thread_ptid (linux_target
, parent
);
447 thread_from_lwp (stopped
, child
);
449 /* If we do not know about the main thread's pthread info yet, this
450 would be a good time to find it. */
451 thread_from_lwp (stopped
, parent
);
456 verbose_dlsym (void *handle
, const char *name
)
458 void *sym
= dlsym (handle
, name
);
460 warning (_("Symbol \"%s\" not found in libthread_db: %s"),
465 /* Verify inferior's '\0'-terminated symbol VER_SYMBOL starts with "%d.%d" and
466 return 1 if this version is lower (and not equal) to
467 VER_MAJOR_MIN.VER_MINOR_MIN. Return 0 in all other cases. */
470 inferior_has_bug (const char *ver_symbol
, int ver_major_min
, int ver_minor_min
)
472 struct bound_minimal_symbol version_msym
;
473 CORE_ADDR version_addr
;
476 version_msym
= lookup_minimal_symbol (ver_symbol
, NULL
, NULL
);
477 if (version_msym
.minsym
== NULL
)
480 version_addr
= BMSYMBOL_VALUE_ADDRESS (version_msym
);
481 gdb::unique_xmalloc_ptr
<char> version
482 = target_read_string (version_addr
, 32, &got
);
483 if (version
!= nullptr
484 && memchr (version
.get (), 0, got
) == version
.get () + got
- 1)
488 retval
= (sscanf (version
.get (), "%d.%d", &major
, &minor
) == 2
489 && (major
< ver_major_min
490 || (major
== ver_major_min
&& minor
< ver_minor_min
)));
496 /* Similar as thread_db_find_new_threads_1, but try to silently ignore errors
499 Return 1 if the caller should abort libthread_db initialization. Return 0
503 thread_db_find_new_threads_silently (thread_info
*stopped
)
508 thread_db_find_new_threads_2 (stopped
, true);
511 catch (const gdb_exception_error
&except
)
513 if (libthread_db_debug
)
514 exception_fprintf (gdb_stdlog
, except
,
515 "Warning: thread_db_find_new_threads_silently: ");
517 /* There is a bug fixed between nptl 2.6.1 and 2.7 by
518 commit 7d9d8bd18906fdd17364f372b160d7ab896ce909
519 where calls to td_thr_get_info fail with TD_ERR for statically linked
520 executables if td_thr_get_info is called before glibc has initialized
523 If the nptl bug is NOT present in the inferior and still thread_db
524 reports an error return 1. It means the inferior has corrupted thread
525 list and GDB should fall back only to LWPs.
527 If the nptl bug is present in the inferior return 0 to silently ignore
528 such errors, and let gdb enumerate threads again later. In such case
529 GDB cannot properly display LWPs if the inferior thread list is
530 corrupted. For core files it does not apply, no 'later enumeration'
533 if (!target_has_execution () || !inferior_has_bug ("nptl_version", 2, 7))
535 exception_fprintf (gdb_stderr
, except
,
536 _("Warning: couldn't activate thread debugging "
537 "using libthread_db: "));
545 /* Lookup a library in which given symbol resides.
546 Note: this is looking in GDB process, not in the inferior.
547 Returns library name, or NULL. */
550 dladdr_to_soname (const void *addr
)
554 if (dladdr (addr
, &info
) != 0)
555 return info
.dli_fname
;
559 /* State for check_thread_db_callback. */
561 struct check_thread_db_info
563 /* The libthread_db under test. */
564 struct thread_db_info
*info
;
566 /* True if progress should be logged. */
569 /* True if the callback was called. */
572 /* Name of last libthread_db function called. */
573 const char *last_call
;
575 /* Value returned by last libthread_db call. */
576 td_err_e last_result
;
579 static struct check_thread_db_info
*tdb_testinfo
;
581 /* Callback for check_thread_db. */
584 check_thread_db_callback (const td_thrhandle_t
*th
, void *arg
)
586 gdb_assert (tdb_testinfo
!= NULL
);
587 tdb_testinfo
->threads_seen
= true;
589 #define LOG(fmt, args...) \
592 if (tdb_testinfo->log_progress) \
594 debug_printf (fmt, ## args); \
595 gdb_flush (gdb_stdlog); \
600 #define CHECK_1(expr, args...) \
605 LOG (" ... FAIL!\n"); \
611 #define CHECK(expr) \
612 CHECK_1 (expr, "(%s) == false", #expr)
614 #define CALL_UNCHECKED(func, args...) \
617 tdb_testinfo->last_call = #func; \
618 tdb_testinfo->last_result \
619 = tdb_testinfo->info->func ## _p (args); \
623 #define CHECK_CALL() \
624 CHECK_1 (tdb_testinfo->last_result == TD_OK, \
625 _("%s failed: %s"), \
626 tdb_testinfo->last_call, \
627 thread_db_err_str (tdb_testinfo->last_result)) \
629 #define CALL(func, args...) \
632 CALL_UNCHECKED (func, args); \
639 /* Check td_ta_thr_iter passed consistent arguments. */
641 CHECK (arg
== (void *) tdb_testinfo
);
642 CHECK (th
->th_ta_p
== tdb_testinfo
->info
->thread_agent
);
644 LOG (" %s", core_addr_to_string_nz ((CORE_ADDR
) th
->th_unique
));
646 /* Check td_thr_get_info. */
648 CALL (td_thr_get_info
, th
, &ti
);
650 LOG (" => %d", ti
.ti_lid
);
652 CHECK (ti
.ti_ta_p
== th
->th_ta_p
);
653 CHECK (ti
.ti_tid
== (thread_t
) th
->th_unique
);
655 /* Check td_ta_map_lwp2thr. */
657 memset (&th2
, 23, sizeof (td_thrhandle_t
));
658 CALL_UNCHECKED (td_ta_map_lwp2thr
, th
->th_ta_p
, ti
.ti_lid
, &th2
);
660 if (tdb_testinfo
->last_result
== TD_ERR
&& !target_has_execution ())
662 /* Some platforms require execution for td_ta_map_lwp2thr. */
663 LOG (_("; can't map_lwp2thr"));
669 LOG (" => %s", core_addr_to_string_nz ((CORE_ADDR
) th2
.th_unique
));
671 CHECK (memcmp (th
, &th2
, sizeof (td_thrhandle_t
)) == 0);
674 /* Attempt TLS access. Assuming errno is TLS, this calls
675 thread_db_get_thread_local_address, which in turn calls
676 td_thr_tls_get_addr for live inferiors or td_thr_tlsbase
677 for core files. This test is skipped if the thread has
678 not been recorded; proceeding in that case would result
679 in the test having the side-effect of noticing threads
682 Note that in glibc's libthread_db td_thr_tls_get_addr is
683 a thin wrapper around td_thr_tlsbase; this check always
684 hits the bulk of the code.
686 Note also that we don't actually check any libthread_db
687 calls are made, we just assume they were; future changes
688 to how GDB accesses TLS could result in this passing
689 without exercising the calls it's supposed to. */
690 ptid_t ptid
= ptid_t (tdb_testinfo
->info
->pid
, ti
.ti_lid
, 0);
691 thread_info
*thread_info
= find_thread_ptid (linux_target
, ptid
);
692 if (thread_info
!= NULL
&& thread_info
->priv
!= NULL
)
696 scoped_restore_current_thread restore_current_thread
;
697 switch_to_thread (thread_info
);
699 expression_up expr
= parse_expression ("(int) errno");
700 struct value
*val
= evaluate_expression (expr
.get ());
702 if (tdb_testinfo
->log_progress
)
704 struct value_print_options opts
;
706 get_user_print_options (&opts
);
708 value_print (val
, gdb_stdlog
, &opts
);
717 #undef CALL_UNCHECKED
724 /* Run integrity checks on the dlopen()ed libthread_db described by
725 INFO. Returns true on success, displays a warning and returns
726 false on failure. Logs progress messages to gdb_stdlog during
727 the test if LOG_PROGRESS is true. */
730 check_thread_db (struct thread_db_info
*info
, bool log_progress
)
732 bool test_passed
= true;
735 debug_printf (_("Running libthread_db integrity checks:\n"));
737 /* GDB avoids using td_ta_thr_iter wherever possible (see comment
738 in try_thread_db_load_1 below) so in order to test it we may
739 have to locate it ourselves. */
740 td_ta_thr_iter_ftype
*td_ta_thr_iter_p
= info
->td_ta_thr_iter_p
;
741 if (td_ta_thr_iter_p
== NULL
)
743 void *thr_iter
= verbose_dlsym (info
->handle
, "td_ta_thr_iter");
744 if (thr_iter
== NULL
)
747 td_ta_thr_iter_p
= (td_ta_thr_iter_ftype
*) thr_iter
;
750 /* Set up the test state we share with the callback. */
751 gdb_assert (tdb_testinfo
== NULL
);
752 struct check_thread_db_info tdb_testinfo_buf
;
753 tdb_testinfo
= &tdb_testinfo_buf
;
755 memset (tdb_testinfo
, 0, sizeof (struct check_thread_db_info
));
756 tdb_testinfo
->info
= info
;
757 tdb_testinfo
->log_progress
= log_progress
;
759 /* td_ta_thr_iter shouldn't be used on running processes. Note that
760 it's possible the inferior will stop midway through modifying one
761 of its thread lists, in which case the check will spuriously
763 linux_stop_and_wait_all_lwps ();
767 td_err_e err
= td_ta_thr_iter_p (info
->thread_agent
,
768 check_thread_db_callback
,
771 TD_THR_LOWEST_PRIORITY
,
773 TD_THR_ANY_USER_FLAGS
);
776 error (_("td_ta_thr_iter failed: %s"), thread_db_err_str (err
));
778 if (!tdb_testinfo
->threads_seen
)
779 error (_("no threads seen"));
781 catch (const gdb_exception_error
&except
)
783 if (warning_pre_print
)
784 fputs_unfiltered (warning_pre_print
, gdb_stderr
);
786 exception_fprintf (gdb_stderr
, except
,
787 _("libthread_db integrity checks failed: "));
792 if (test_passed
&& log_progress
)
793 debug_printf (_("libthread_db integrity checks passed.\n"));
797 linux_unstop_all_lwps ();
802 /* Predicate which tests whether objfile OBJ refers to the library
803 containing pthread related symbols. Historically, this library has
804 been named in such a way that looking for "libpthread" in the name
805 was sufficient to identify it. As of glibc-2.34, the C library
806 (libc) contains the thread library symbols. Therefore we check
807 that the name matches a possible thread library, but we also check
808 that it contains at least one of the symbols (pthread_create) that
809 we'd expect to find in the thread library. */
812 libpthread_objfile_p (objfile
*obj
)
814 return (libpthread_name_p (objfile_name (obj
))
815 && lookup_minimal_symbol ("pthread_create",
817 obj
).minsym
!= NULL
);
820 /* Attempt to initialize dlopen()ed libthread_db, described by INFO.
821 Return true on success.
822 Failure could happen if libthread_db does not have symbols we expect,
823 or when it refuses to work with the current inferior (e.g. due to
824 version mismatch between libthread_db and libpthread). */
827 try_thread_db_load_1 (struct thread_db_info
*info
)
831 /* Initialize pointers to the dynamic library functions we will use.
832 Essential functions first. */
834 #define TDB_VERBOSE_DLSYM(info, func) \
835 info->func ## _p = (func ## _ftype *) verbose_dlsym (info->handle, #func)
837 #define TDB_DLSYM(info, func) \
838 info->func ## _p = (func ## _ftype *) dlsym (info->handle, #func)
847 CHK (TDB_VERBOSE_DLSYM (info
, td_init
));
849 err
= info
->td_init_p ();
852 warning (_("Cannot initialize libthread_db: %s"),
853 thread_db_err_str (err
));
857 CHK (TDB_VERBOSE_DLSYM (info
, td_ta_new
));
859 /* Initialize the structure that identifies the child process. */
860 info
->proc_handle
.thread
= inferior_thread ();
862 /* Now attempt to open a connection to the thread library. */
863 err
= info
->td_ta_new_p (&info
->proc_handle
, &info
->thread_agent
);
866 if (libthread_db_debug
)
867 fprintf_unfiltered (gdb_stdlog
, _("td_ta_new failed: %s\n"),
868 thread_db_err_str (err
));
873 #ifdef THREAD_DB_HAS_TD_VERSION
876 /* The errors above are not unexpected and silently ignored:
877 they just mean we haven't found correct version of
881 warning (_("td_ta_new failed: %s"), thread_db_err_str (err
));
886 /* These are essential. */
887 CHK (TDB_VERBOSE_DLSYM (info
, td_ta_map_lwp2thr
));
888 CHK (TDB_VERBOSE_DLSYM (info
, td_thr_get_info
));
890 /* These are not essential. */
891 TDB_DLSYM (info
, td_thr_tls_get_addr
);
892 TDB_DLSYM (info
, td_thr_tlsbase
);
893 TDB_DLSYM (info
, td_ta_delete
);
895 /* It's best to avoid td_ta_thr_iter if possible. That walks data
896 structures in the inferior's address space that may be corrupted,
897 or, if the target is running, may change while we walk them. If
898 there's execution (and /proc is mounted), then we're already
899 attached to all LWPs. Use thread_from_lwp, which uses
900 td_ta_map_lwp2thr instead, which does not walk the thread list.
902 td_ta_map_lwp2thr uses ps_get_thread_area, but we can't use that
903 currently on core targets, as it uses ptrace directly. */
904 if (target_has_execution ()
905 && linux_proc_task_list_dir_exists (inferior_ptid
.pid ()))
906 info
->td_ta_thr_iter_p
= NULL
;
908 CHK (TDB_VERBOSE_DLSYM (info
, td_ta_thr_iter
));
910 #undef TDB_VERBOSE_DLSYM
914 /* Run integrity checks if requested. */
915 if (check_thread_db_on_load
)
917 if (!check_thread_db (info
, libthread_db_debug
))
921 if (info
->td_ta_thr_iter_p
== NULL
)
924 int pid
= inferior_ptid
.pid ();
925 thread_info
*curr_thread
= inferior_thread ();
927 linux_stop_and_wait_all_lwps ();
930 if (lp
->ptid
.pid () == pid
)
931 thread_from_lwp (curr_thread
, lp
->ptid
);
933 linux_unstop_all_lwps ();
935 else if (thread_db_find_new_threads_silently (inferior_thread ()) != 0)
937 /* Even if libthread_db initializes, if the thread list is
938 corrupted, we'd not manage to list any threads. Better reject this
939 thread_db, and fall back to at least listing LWPs. */
943 printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
945 if (*libthread_db_search_path
|| libthread_db_debug
)
947 struct ui_file
*file
;
950 library
= dladdr_to_soname ((const void *) *info
->td_ta_new_p
);
952 library
= LIBTHREAD_DB_SO
;
954 /* If we'd print this to gdb_stdout when debug output is
955 disabled, still print it to gdb_stdout if debug output is
956 enabled. User visible output should not depend on debug
958 file
= *libthread_db_search_path
!= '\0' ? gdb_stdout
: gdb_stdlog
;
959 fprintf_unfiltered (file
,
960 _("Using host libthread_db library \"%ps\".\n"),
961 styled_string (file_name_style
.style (), library
));
964 /* The thread library was detected. Activate the thread_db target
966 current_inferior ()->push_target (&the_thread_db_target
);
970 /* Attempt to use LIBRARY as libthread_db. LIBRARY could be absolute,
971 relative, or just LIBTHREAD_DB. */
974 try_thread_db_load (const char *library
, bool check_auto_load_safe
)
977 struct thread_db_info
*info
;
979 if (libthread_db_debug
)
980 fprintf_unfiltered (gdb_stdlog
,
981 _("Trying host libthread_db library: %s.\n"),
984 if (check_auto_load_safe
)
986 if (access (library
, R_OK
) != 0)
988 /* Do not print warnings by file_is_auto_load_safe if the library does
989 not exist at this place. */
990 if (libthread_db_debug
)
991 fprintf_unfiltered (gdb_stdlog
, _("open failed: %s.\n"),
992 safe_strerror (errno
));
996 auto_load_debug_printf
997 ("Loading libthread-db library \"%s\" from explicit directory.",
1000 if (!file_is_auto_load_safe (library
))
1004 handle
= dlopen (library
, RTLD_NOW
);
1007 if (libthread_db_debug
)
1008 fprintf_unfiltered (gdb_stdlog
, _("dlopen failed: %s.\n"), dlerror ());
1012 if (libthread_db_debug
&& strchr (library
, '/') == NULL
)
1016 td_init
= dlsym (handle
, "td_init");
1017 if (td_init
!= NULL
)
1019 const char *const libpath
= dladdr_to_soname (td_init
);
1021 if (libpath
!= NULL
)
1022 fprintf_unfiltered (gdb_stdlog
, _("Host %s resolved to: %s.\n"),
1027 info
= add_thread_db_info (handle
);
1029 /* Do not save system library name, that one is always trusted. */
1030 if (strchr (library
, '/') != NULL
)
1031 info
->filename
= gdb_realpath (library
).release ();
1035 if (try_thread_db_load_1 (info
))
1038 catch (const gdb_exception_error
&except
)
1040 if (libthread_db_debug
)
1041 exception_fprintf (gdb_stdlog
, except
,
1042 "Warning: While trying to load libthread_db: ");
1045 /* This library "refused" to work on current inferior. */
1046 delete_thread_db_info (current_inferior ()->process_target (),
1047 inferior_ptid
.pid ());
1051 /* Subroutine of try_thread_db_load_from_pdir to simplify it.
1052 Try loading libthread_db in directory(OBJ)/SUBDIR.
1053 SUBDIR may be NULL. It may also be something like "../lib64".
1054 The result is true for success. */
1057 try_thread_db_load_from_pdir_1 (struct objfile
*obj
, const char *subdir
)
1059 const char *obj_name
= objfile_name (obj
);
1061 if (obj_name
[0] != '/')
1063 warning (_("Expected absolute pathname for libpthread in the"
1064 " inferior, but got %ps."),
1065 styled_string (file_name_style
.style (), obj_name
));
1069 std::string path
= obj_name
;
1070 size_t cp
= path
.rfind ('/');
1071 /* This should at minimum hit the first character. */
1072 gdb_assert (cp
!= std::string::npos
);
1073 path
.resize (cp
+ 1);
1075 path
= path
+ subdir
+ "/";
1076 path
+= LIBTHREAD_DB_SO
;
1078 return try_thread_db_load (path
.c_str (), true);
1081 /* Handle $pdir in libthread-db-search-path.
1082 Look for libthread_db in directory(libpthread)/SUBDIR.
1083 SUBDIR may be NULL. It may also be something like "../lib64".
1084 The result is true for success. */
1087 try_thread_db_load_from_pdir (const char *subdir
)
1089 if (!auto_load_thread_db
)
1092 for (objfile
*obj
: current_program_space
->objfiles ())
1093 if (libpthread_objfile_p (obj
))
1095 if (try_thread_db_load_from_pdir_1 (obj
, subdir
))
1098 /* We may have found the separate-debug-info version of
1099 libpthread, and it may live in a directory without a matching
1101 if (obj
->separate_debug_objfile_backlink
!= NULL
)
1102 return try_thread_db_load_from_pdir_1 (obj
->separate_debug_objfile_backlink
,
1111 /* Handle $sdir in libthread-db-search-path.
1112 Look for libthread_db in the system dirs, or wherever a plain
1113 dlopen(file_without_path) will look.
1114 The result is true for success. */
1117 try_thread_db_load_from_sdir (void)
1119 return try_thread_db_load (LIBTHREAD_DB_SO
, false);
1122 /* Try to load libthread_db from directory DIR of length DIR_LEN.
1123 The result is true for success. */
1126 try_thread_db_load_from_dir (const char *dir
, size_t dir_len
)
1128 if (!auto_load_thread_db
)
1131 std::string path
= std::string (dir
, dir_len
) + "/" + LIBTHREAD_DB_SO
;
1133 return try_thread_db_load (path
.c_str (), true);
1136 /* Search libthread_db_search_path for libthread_db which "agrees"
1137 to work on current inferior.
1138 The result is true for success. */
1141 thread_db_load_search (void)
1145 std::vector
<gdb::unique_xmalloc_ptr
<char>> dir_vec
1146 = dirnames_to_char_ptr_vec (libthread_db_search_path
);
1148 for (const gdb::unique_xmalloc_ptr
<char> &this_dir_up
: dir_vec
)
1150 const char *this_dir
= this_dir_up
.get ();
1151 const int pdir_len
= sizeof ("$pdir") - 1;
1152 size_t this_dir_len
;
1154 this_dir_len
= strlen (this_dir
);
1156 if (strncmp (this_dir
, "$pdir", pdir_len
) == 0
1157 && (this_dir
[pdir_len
] == '\0'
1158 || this_dir
[pdir_len
] == '/'))
1160 const char *subdir
= NULL
;
1162 std::string subdir_holder
;
1163 if (this_dir
[pdir_len
] == '/')
1165 subdir_holder
= std::string (this_dir
+ pdir_len
+ 1);
1166 subdir
= subdir_holder
.c_str ();
1168 rc
= try_thread_db_load_from_pdir (subdir
);
1172 else if (strcmp (this_dir
, "$sdir") == 0)
1174 if (try_thread_db_load_from_sdir ())
1182 if (try_thread_db_load_from_dir (this_dir
, this_dir_len
))
1190 if (libthread_db_debug
)
1191 fprintf_unfiltered (gdb_stdlog
,
1192 _("thread_db_load_search returning %d\n"), rc
);
1196 /* Return true if the inferior has a libpthread. */
1199 has_libpthread (void)
1201 for (objfile
*obj
: current_program_space
->objfiles ())
1202 if (libpthread_objfile_p (obj
))
1208 /* Attempt to load and initialize libthread_db.
1209 Return 1 on success. */
1212 thread_db_load (void)
1214 inferior
*inf
= current_inferior ();
1216 /* When attaching / handling fork child, don't try loading libthread_db
1217 until we know about all shared libraries. */
1218 if (inf
->in_initial_library_scan
)
1221 thread_db_info
*info
= get_thread_db_info (inf
->process_target (),
1222 inferior_ptid
.pid ());
1227 /* Don't attempt to use thread_db on executables not running
1229 if (!target_has_registers ())
1232 /* Don't attempt to use thread_db for remote targets. */
1233 if (!(target_can_run () || core_bfd
))
1236 if (thread_db_load_search ())
1239 /* We couldn't find a libthread_db.
1240 If the inferior has a libpthread warn the user. */
1241 if (has_libpthread ())
1243 warning (_("Unable to find libthread_db matching inferior's thread"
1244 " library, thread debugging will not be available."));
1248 /* Either this executable isn't using libpthread at all, or it is
1249 statically linked. Since we can't easily distinguish these two cases,
1250 no warning is issued. */
1255 check_thread_signals (void)
1257 if (!thread_signals
)
1261 for (i
= 0; i
< lin_thread_get_thread_signal_num (); i
++)
1263 int sig
= lin_thread_get_thread_signal (i
);
1264 signal_stop_update (gdb_signal_from_host (sig
), 0);
1265 signal_print_update (gdb_signal_from_host (sig
), 0);
1271 /* Check whether thread_db is usable. This function is called when
1272 an inferior is created (or otherwise acquired, e.g. attached to)
1273 and when new shared libraries are loaded into a running process. */
1276 check_for_thread_db (void)
1278 /* Do nothing if we couldn't load libthread_db.so.1. */
1279 if (!thread_db_load ())
1283 /* This function is called via the new_objfile observer. */
1286 thread_db_new_objfile (struct objfile
*objfile
)
1288 /* This observer must always be called with inferior_ptid set
1292 /* libpthread with separate debug info has its debug info file already
1293 loaded (and notified without successful thread_db initialization)
1294 the time gdb::observers::new_objfile.notify is called for the library itself.
1295 Static executables have their separate debug info loaded already
1296 before the inferior has started. */
1297 && objfile
->separate_debug_objfile_backlink
== NULL
1298 /* Only check for thread_db if we loaded libpthread,
1299 or if this is the main symbol file.
1300 We need to check OBJF_MAINLINE to handle the case of debugging
1301 a statically linked executable AND the symbol file is specified AFTER
1302 the exec file is loaded (e.g., gdb -c core ; file foo).
1303 For dynamically linked executables, libpthread can be near the end
1304 of the list of shared libraries to load, and in an app of several
1305 thousand shared libraries, this can otherwise be painful. */
1306 && ((objfile
->flags
& OBJF_MAINLINE
) != 0
1307 || libpthread_objfile_p (objfile
)))
1308 check_for_thread_db ();
1312 check_pid_namespace_match (inferior
*inf
)
1314 /* Check is only relevant for local targets targets. */
1315 if (target_can_run ())
1317 /* If the child is in a different PID namespace, its idea of its
1318 PID will differ from our idea of its PID. When we scan the
1319 child's thread list, we'll mistakenly think it has no threads
1320 since the thread PID fields won't match the PID we give to
1322 if (!linux_ns_same (inf
->pid
, LINUX_NS_PID
))
1324 warning (_ ("Target and debugger are in different PID "
1325 "namespaces; thread lists and other data are "
1326 "likely unreliable. "
1327 "Connect to gdbserver inside the container."));
1332 /* This function is called via the inferior_created observer.
1333 This handles the case of debugging statically linked executables. */
1336 thread_db_inferior_created (inferior
*inf
)
1338 check_pid_namespace_match (inf
);
1339 check_for_thread_db ();
1342 /* Update the thread's state (what's displayed in "info threads"),
1343 from libthread_db thread state information. */
1346 update_thread_state (thread_db_thread_info
*priv
,
1347 const td_thrinfo_t
*ti_p
)
1349 priv
->dying
= (ti_p
->ti_state
== TD_THR_UNKNOWN
1350 || ti_p
->ti_state
== TD_THR_ZOMBIE
);
1353 /* Record a new thread in GDB's thread list. Creates the thread's
1354 private info. If TP is NULL or TP is marked as having exited,
1355 creates a new thread. Otherwise, uses TP. */
1357 static struct thread_info
*
1358 record_thread (struct thread_db_info
*info
,
1359 struct thread_info
*tp
,
1360 ptid_t ptid
, const td_thrhandle_t
*th_p
,
1361 const td_thrinfo_t
*ti_p
)
1363 /* A thread ID of zero may mean the thread library has not
1364 initialized yet. Leave private == NULL until the thread library
1366 if (ti_p
->ti_tid
== 0)
1369 /* Construct the thread's private data. */
1370 thread_db_thread_info
*priv
= new thread_db_thread_info
;
1373 priv
->tid
= ti_p
->ti_tid
;
1374 update_thread_state (priv
, ti_p
);
1376 /* Add the thread to GDB's thread list. If we already know about a
1377 thread with this PTID, but it's marked exited, then the kernel
1378 reused the tid of an old thread. */
1379 if (tp
== NULL
|| tp
->state
== THREAD_EXITED
)
1380 tp
= add_thread_with_info (info
->process_target
, ptid
, priv
);
1382 tp
->priv
.reset (priv
);
1384 if (target_has_execution ())
1385 check_thread_signals ();
1391 thread_db_target::detach (inferior
*inf
, int from_tty
)
1393 delete_thread_db_info (inf
->process_target (), inf
->pid
);
1395 beneath ()->detach (inf
, from_tty
);
1397 /* NOTE: From this point on, inferior_ptid is null_ptid. */
1399 /* Detach the thread_db target from this inferior. */
1400 inf
->unpush_target (this);
1404 thread_db_target::wait (ptid_t ptid
, struct target_waitstatus
*ourstatus
,
1405 target_wait_flags options
)
1407 struct thread_db_info
*info
;
1409 process_stratum_target
*beneath
1410 = as_process_stratum_target (this->beneath ());
1412 ptid
= beneath
->wait (ptid
, ourstatus
, options
);
1414 switch (ourstatus
->kind
)
1416 case TARGET_WAITKIND_IGNORE
:
1417 case TARGET_WAITKIND_EXITED
:
1418 case TARGET_WAITKIND_THREAD_EXITED
:
1419 case TARGET_WAITKIND_SIGNALLED
:
1420 case TARGET_WAITKIND_EXECD
:
1424 info
= get_thread_db_info (beneath
, ptid
.pid ());
1426 /* If this process isn't using thread_db, we're done. */
1430 /* Fill in the thread's user-level thread id and status. */
1431 thread_from_lwp (find_thread_ptid (beneath
, ptid
), ptid
);
1437 thread_db_target::mourn_inferior ()
1439 process_stratum_target
*target_beneath
1440 = as_process_stratum_target (this->beneath ());
1442 delete_thread_db_info (target_beneath
, inferior_ptid
.pid ());
1444 target_beneath
->mourn_inferior ();
1446 /* Detach the thread_db target from this inferior. */
1447 current_inferior ()->unpush_target (this);
1451 thread_db_target::follow_exec (inferior
*follow_inf
, ptid_t ptid
,
1452 const char *execd_pathname
)
1454 process_stratum_target
*beneath
1455 = as_process_stratum_target (this->beneath ());
1457 delete_thread_db_info (beneath
, ptid
.pid ());
1459 current_inferior ()->unpush_target (this);
1460 beneath
->follow_exec (follow_inf
, ptid
, execd_pathname
);
1463 struct callback_data
1465 struct thread_db_info
*info
;
1470 find_new_threads_callback (const td_thrhandle_t
*th_p
, void *data
)
1474 struct thread_info
*tp
;
1475 struct callback_data
*cb_data
= (struct callback_data
*) data
;
1476 struct thread_db_info
*info
= cb_data
->info
;
1478 err
= info
->td_thr_get_info_p (th_p
, &ti
);
1480 error (_("find_new_threads_callback: cannot get thread info: %s"),
1481 thread_db_err_str (err
));
1483 if (ti
.ti_lid
== -1)
1485 /* A thread with kernel thread ID -1 is either a thread that
1486 exited and was joined, or a thread that is being created but
1487 hasn't started yet, and that is reusing the tcb/stack of a
1488 thread that previously exited and was joined. (glibc marks
1489 terminated and joined threads with kernel thread ID -1. See
1491 if (libthread_db_debug
)
1492 fprintf_unfiltered (gdb_stdlog
,
1493 "thread_db: skipping exited and "
1494 "joined thread (0x%lx)\n",
1495 (unsigned long) ti
.ti_tid
);
1501 /* A thread ID of zero means that this is the main thread, but
1502 glibc has not yet initialized thread-local storage and the
1503 pthread library. We do not know what the thread's TID will
1506 /* In that case, we're not stopped in a fork syscall and don't
1507 need this glibc bug workaround. */
1508 info
->need_stale_parent_threads_check
= 0;
1513 /* Ignore stale parent threads, caused by glibc/BZ5983. This is a
1514 bit expensive, as it needs to open /proc/pid/status, so try to
1515 avoid doing the work if we know we don't have to. */
1516 if (info
->need_stale_parent_threads_check
)
1518 int tgid
= linux_proc_get_tgid (ti
.ti_lid
);
1520 if (tgid
!= -1 && tgid
!= info
->pid
)
1524 ptid_t
ptid (info
->pid
, ti
.ti_lid
);
1525 tp
= find_thread_ptid (info
->process_target
, ptid
);
1526 if (tp
== NULL
|| tp
->priv
== NULL
)
1527 record_thread (info
, tp
, ptid
, th_p
, &ti
);
1532 /* Helper for thread_db_find_new_threads_2.
1533 Returns number of new threads found. */
1536 find_new_threads_once (struct thread_db_info
*info
, int iteration
,
1539 struct callback_data data
;
1540 td_err_e err
= TD_ERR
;
1543 data
.new_threads
= 0;
1545 /* See comment in thread_db_update_thread_list. */
1546 gdb_assert (info
->td_ta_thr_iter_p
!= NULL
);
1550 /* Iterate over all user-space threads to discover new threads. */
1551 err
= info
->td_ta_thr_iter_p (info
->thread_agent
,
1552 find_new_threads_callback
,
1555 TD_THR_LOWEST_PRIORITY
,
1557 TD_THR_ANY_USER_FLAGS
);
1559 catch (const gdb_exception_error
&except
)
1561 if (libthread_db_debug
)
1563 exception_fprintf (gdb_stdlog
, except
,
1564 "Warning: find_new_threads_once: ");
1568 if (libthread_db_debug
)
1570 fprintf_unfiltered (gdb_stdlog
,
1571 _("Found %d new threads in iteration %d.\n"),
1572 data
.new_threads
, iteration
);
1578 return data
.new_threads
;
1581 /* Search for new threads, accessing memory through stopped thread
1582 PTID. If UNTIL_NO_NEW is true, repeat searching until several
1583 searches in a row do not discover any new threads. */
1586 thread_db_find_new_threads_2 (thread_info
*stopped
, bool until_no_new
)
1588 td_err_e err
= TD_OK
;
1589 struct thread_db_info
*info
;
1592 info
= get_thread_db_info (stopped
->inf
->process_target (),
1593 stopped
->ptid
.pid ());
1595 /* Access an lwp we know is stopped. */
1596 info
->proc_handle
.thread
= stopped
;
1600 /* Require 4 successive iterations which do not find any new threads.
1601 The 4 is a heuristic: there is an inherent race here, and I have
1602 seen that 2 iterations in a row are not always sufficient to
1603 "capture" all threads. */
1604 for (i
= 0, loop
= 0; loop
< 4 && err
== TD_OK
; ++i
, ++loop
)
1605 if (find_new_threads_once (info
, i
, &err
) != 0)
1607 /* Found some new threads. Restart the loop from beginning. */
1612 find_new_threads_once (info
, 0, &err
);
1615 error (_("Cannot find new threads: %s"), thread_db_err_str (err
));
1619 thread_db_find_new_threads_1 (thread_info
*stopped
)
1621 thread_db_find_new_threads_2 (stopped
, 0);
1624 /* Implement the to_update_thread_list target method for this
1628 thread_db_target::update_thread_list ()
1630 struct thread_db_info
*info
;
1634 for (inferior
*inf
: all_inferiors ())
1639 info
= get_thread_db_info (inf
->process_target (), inf
->pid
);
1643 thread_info
*thread
= any_live_thread_of_inferior (inf
);
1644 if (thread
== NULL
|| thread
->executing
)
1647 /* It's best to avoid td_ta_thr_iter if possible. That walks
1648 data structures in the inferior's address space that may be
1649 corrupted, or, if the target is running, the list may change
1650 while we walk it. In the latter case, it's possible that a
1651 thread exits just at the exact time that causes GDB to get
1652 stuck in an infinite loop. To avoid pausing all threads
1653 whenever the core wants to refresh the thread list, we
1654 instead use thread_from_lwp immediately when we see an LWP
1655 stop. That uses thread_db entry points that do not walk
1656 libpthread's thread list, so should be safe, as well as more
1658 if (thread
->inf
->has_execution ())
1661 thread_db_find_new_threads_1 (thread
);
1664 /* Give the beneath target a chance to do extra processing. */
1665 this->beneath ()->update_thread_list ();
1669 thread_db_target::pid_to_str (ptid_t ptid
)
1671 thread_info
*thread_info
= find_thread_ptid (current_inferior (), ptid
);
1673 if (thread_info
!= NULL
&& thread_info
->priv
!= NULL
)
1675 thread_db_thread_info
*priv
= get_thread_db_thread_info (thread_info
);
1677 return string_printf ("Thread 0x%lx (LWP %ld)",
1678 (unsigned long) priv
->tid
, ptid
.lwp ());
1681 return beneath ()->pid_to_str (ptid
);
1684 /* Return a string describing the state of the thread specified by
1688 thread_db_target::extra_thread_info (thread_info
*info
)
1690 if (info
->priv
== NULL
)
1693 thread_db_thread_info
*priv
= get_thread_db_thread_info (info
);
1701 /* Return pointer to the thread_info struct which corresponds to
1702 THREAD_HANDLE (having length HANDLE_LEN). */
1705 thread_db_target::thread_handle_to_thread_info (const gdb_byte
*thread_handle
,
1709 thread_t handle_tid
;
1711 /* When debugging a 32-bit target from a 64-bit host, handle_len
1712 will be 4 and sizeof (handle_tid) will be 8. This requires
1713 a different cast than the more straightforward case where
1714 the sizes are the same.
1716 Use "--target_board unix/-m32" from a native x86_64 linux build
1717 to test the 32/64-bit case. */
1718 if (handle_len
== 4 && sizeof (handle_tid
) == 8)
1719 handle_tid
= (thread_t
) * (const uint32_t *) thread_handle
;
1720 else if (handle_len
== sizeof (handle_tid
))
1721 handle_tid
= * (const thread_t
*) thread_handle
;
1723 error (_("Thread handle size mismatch: %d vs %zu (from libthread_db)"),
1724 handle_len
, sizeof (handle_tid
));
1726 for (thread_info
*tp
: inf
->non_exited_threads ())
1728 thread_db_thread_info
*priv
= get_thread_db_thread_info (tp
);
1730 if (priv
!= NULL
&& handle_tid
== priv
->tid
)
1737 /* Return the thread handle associated the thread_info pointer TP. */
1740 thread_db_target::thread_info_to_thread_handle (struct thread_info
*tp
)
1742 thread_db_thread_info
*priv
= get_thread_db_thread_info (tp
);
1745 return gdb::byte_vector ();
1747 int handle_size
= sizeof (priv
->tid
);
1748 gdb::byte_vector
rv (handle_size
);
1750 memcpy (rv
.data (), &priv
->tid
, handle_size
);
1755 /* Get the address of the thread local variable in load module LM which
1756 is stored at OFFSET within the thread local storage for thread PTID. */
1759 thread_db_target::get_thread_local_address (ptid_t ptid
,
1763 struct thread_info
*thread_info
;
1764 process_stratum_target
*beneath
1765 = as_process_stratum_target (this->beneath ());
1766 /* Find the matching thread. */
1767 thread_info
= find_thread_ptid (beneath
, ptid
);
1769 /* We may not have discovered the thread yet. */
1770 if (thread_info
!= NULL
&& thread_info
->priv
== NULL
)
1771 thread_info
= thread_from_lwp (thread_info
, ptid
);
1773 if (thread_info
!= NULL
&& thread_info
->priv
!= NULL
)
1777 thread_db_info
*info
= get_thread_db_info (beneath
, ptid
.pid ());
1778 thread_db_thread_info
*priv
= get_thread_db_thread_info (thread_info
);
1780 /* Finally, get the address of the variable. */
1783 /* glibc doesn't provide the needed interface. */
1784 if (!info
->td_thr_tls_get_addr_p
)
1785 throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR
,
1786 _("No TLS library support"));
1788 /* Note the cast through uintptr_t: this interface only works if
1789 a target address fits in a psaddr_t, which is a host pointer.
1790 So a 32-bit debugger can not access 64-bit TLS through this. */
1791 err
= info
->td_thr_tls_get_addr_p (&priv
->th
,
1792 (psaddr_t
)(uintptr_t) lm
,
1797 /* If glibc doesn't provide the needed interface throw an error
1798 that LM is zero - normally cases it should not be. */
1799 if (!info
->td_thr_tlsbase_p
)
1800 throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR
,
1801 _("TLS load module not found"));
1803 /* This code path handles the case of -static -pthread executables:
1804 https://sourceware.org/ml/libc-help/2014-03/msg00024.html
1805 For older GNU libc r_debug.r_map is NULL. For GNU libc after
1806 PR libc/16831 due to GDB PR threads/16954 LOAD_MODULE is also NULL.
1807 The constant number 1 depends on GNU __libc_setup_tls
1808 initialization of l_tls_modid to 1. */
1809 err
= info
->td_thr_tlsbase_p (&priv
->th
, 1, &address
);
1810 address
= (char *) address
+ offset
;
1813 #ifdef THREAD_DB_HAS_TD_NOTALLOC
1814 /* The memory hasn't been allocated, yet. */
1815 if (err
== TD_NOTALLOC
)
1816 /* Now, if libthread_db provided the initialization image's
1817 address, we *could* try to build a non-lvalue value from
1818 the initialization image. */
1819 throw_error (TLS_NOT_ALLOCATED_YET_ERROR
,
1820 _("TLS not allocated yet"));
1823 /* Something else went wrong. */
1825 throw_error (TLS_GENERIC_ERROR
,
1826 (("%s")), thread_db_err_str (err
));
1828 /* Cast assuming host == target. Joy. */
1829 /* Do proper sign extension for the target. */
1830 gdb_assert (current_program_space
->exec_bfd ());
1831 return (bfd_get_sign_extend_vma (current_program_space
->exec_bfd ()) > 0
1832 ? (CORE_ADDR
) (intptr_t) address
1833 : (CORE_ADDR
) (uintptr_t) address
);
1836 return beneath
->get_thread_local_address (ptid
, lm
, offset
);
1839 /* Implement the to_get_ada_task_ptid target method for this target. */
1842 thread_db_target::get_ada_task_ptid (long lwp
, long thread
)
1844 /* NPTL uses a 1:1 model, so the LWP id suffices. */
1845 return ptid_t (inferior_ptid
.pid (), lwp
, 0);
1849 thread_db_target::resume (ptid_t ptid
, int step
, enum gdb_signal signo
)
1851 process_stratum_target
*beneath
1852 = as_process_stratum_target (this->beneath ());
1854 thread_db_info
*info
1855 = get_thread_db_info (beneath
, (ptid
== minus_one_ptid
1856 ? inferior_ptid
.pid ()
1859 /* This workaround is only needed for child fork lwps stopped in a
1860 PTRACE_O_TRACEFORK event. When the inferior is resumed, the
1861 workaround can be disabled. */
1863 info
->need_stale_parent_threads_check
= 0;
1865 beneath
->resume (ptid
, step
, signo
);
1868 /* std::sort helper function for info_auto_load_libthread_db, sort the
1869 thread_db_info pointers primarily by their FILENAME and secondarily by their
1870 PID, both in ascending order. */
1873 info_auto_load_libthread_db_compare (const struct thread_db_info
*a
,
1874 const struct thread_db_info
*b
)
1878 retval
= strcmp (a
->filename
, b
->filename
);
1882 return a
->pid
< b
->pid
;
1885 /* Implement 'info auto-load libthread-db'. */
1888 info_auto_load_libthread_db (const char *args
, int from_tty
)
1890 struct ui_out
*uiout
= current_uiout
;
1891 const char *cs
= args
? args
: "";
1892 struct thread_db_info
*info
;
1893 unsigned unique_filenames
;
1894 size_t max_filename_len
, pids_len
;
1897 cs
= skip_spaces (cs
);
1899 error (_("'info auto-load libthread-db' does not accept any parameters"));
1901 std::vector
<struct thread_db_info
*> array
;
1902 for (info
= thread_db_list
; info
; info
= info
->next
)
1903 if (info
->filename
!= NULL
)
1904 array
.push_back (info
);
1906 /* Sort ARRAY by filenames and PIDs. */
1907 std::sort (array
.begin (), array
.end (),
1908 info_auto_load_libthread_db_compare
);
1910 /* Calculate the number of unique filenames (rows) and the maximum string
1911 length of PIDs list for the unique filenames (columns). */
1913 unique_filenames
= 0;
1914 max_filename_len
= 0;
1916 for (i
= 0; i
< array
.size (); i
++)
1918 int pid
= array
[i
]->pid
;
1919 size_t this_pid_len
;
1921 for (this_pid_len
= 0; pid
!= 0; pid
/= 10)
1924 if (i
== 0 || strcmp (array
[i
- 1]->filename
, array
[i
]->filename
) != 0)
1927 max_filename_len
= std::max (max_filename_len
,
1928 strlen (array
[i
]->filename
));
1931 pids_len
-= strlen (", ");
1934 pids_len
+= this_pid_len
+ strlen (", ");
1937 pids_len
-= strlen (", ");
1939 /* Table header shifted right by preceding "libthread-db: " would not match
1941 if (array
.size () > 0 && args
== auto_load_info_scripts_pattern_nl
)
1945 ui_out_emit_table
table_emitter (uiout
, 2, unique_filenames
,
1946 "LinuxThreadDbTable");
1948 uiout
->table_header (max_filename_len
, ui_left
, "filename", "Filename");
1949 uiout
->table_header (pids_len
, ui_left
, "PIDs", "Pids");
1950 uiout
->table_body ();
1952 /* Note I is incremented inside the cycle, not at its end. */
1953 for (i
= 0; i
< array
.size ();)
1955 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
1958 uiout
->field_string ("filename", info
->filename
);
1961 while (i
< array
.size () && strcmp (info
->filename
,
1962 array
[i
]->filename
) == 0)
1966 string_appendf (pids
, "%u", array
[i
]->pid
);
1970 uiout
->field_string ("pids", pids
);
1977 uiout
->message (_("No auto-loaded libthread-db.\n"));
1980 /* Implement 'maintenance check libthread-db'. */
1983 maintenance_check_libthread_db (const char *args
, int from_tty
)
1985 int inferior_pid
= inferior_ptid
.pid ();
1986 struct thread_db_info
*info
;
1988 if (inferior_pid
== 0)
1989 error (_("No inferior running"));
1991 info
= get_thread_db_info (current_inferior ()->process_target (),
1994 error (_("No libthread_db loaded"));
1996 check_thread_db (info
, true);
1999 void _initialize_thread_db ();
2001 _initialize_thread_db ()
2003 /* Defer loading of libthread_db.so until inferior is running.
2004 This allows gdb to load correct libthread_db for a given
2005 executable -- there could be multiple versions of glibc,
2006 and until there is a running inferior, we can't tell which
2007 libthread_db is the correct one to load. */
2009 libthread_db_search_path
= xstrdup (LIBTHREAD_DB_SEARCH_PATH
);
2011 add_setshow_optional_filename_cmd ("libthread-db-search-path",
2013 &libthread_db_search_path
, _("\
2014 Set search path for libthread_db."), _("\
2015 Show the current search path or libthread_db."), _("\
2016 This path is used to search for libthread_db to be loaded into \
2018 Its value is a colon (':') separate list of directories to search.\n\
2019 Setting the search path to an empty list resets it to its default value."),
2020 set_libthread_db_search_path
,
2022 &setlist
, &showlist
);
2024 add_setshow_zuinteger_cmd ("libthread-db", class_maintenance
,
2025 &libthread_db_debug
, _("\
2026 Set libthread-db debugging."), _("\
2027 Show libthread-db debugging."), _("\
2028 When non-zero, libthread-db debugging is enabled."),
2030 show_libthread_db_debug
,
2031 &setdebuglist
, &showdebuglist
);
2033 add_setshow_boolean_cmd ("libthread-db", class_support
,
2034 &auto_load_thread_db
, _("\
2035 Enable or disable auto-loading of inferior specific libthread_db."), _("\
2036 Show whether auto-loading inferior specific libthread_db is enabled."), _("\
2037 If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n\
2038 locations to load libthread_db compatible with the inferior.\n\
2039 Standard system libthread_db still gets loaded even with this option off.\n\
2040 This option has security implications for untrusted inferiors."),
2041 NULL
, show_auto_load_thread_db
,
2042 auto_load_set_cmdlist_get (),
2043 auto_load_show_cmdlist_get ());
2045 add_cmd ("libthread-db", class_info
, info_auto_load_libthread_db
,
2046 _("Print the list of loaded inferior specific libthread_db.\n\
2047 Usage: info auto-load libthread-db"),
2048 auto_load_info_cmdlist_get ());
2050 add_cmd ("libthread-db", class_maintenance
,
2051 maintenance_check_libthread_db
, _("\
2052 Run integrity checks on the current inferior's libthread_db."),
2053 &maintenancechecklist
);
2055 add_setshow_boolean_cmd ("check-libthread-db",
2057 &check_thread_db_on_load
, _("\
2058 Set whether to check libthread_db at load time."), _("\
2059 Show whether to check libthread_db at load time."), _("\
2060 If enabled GDB will run integrity checks on inferior specific libthread_db\n\
2061 as they are loaded."),
2064 &maintenance_set_cmdlist
,
2065 &maintenance_show_cmdlist
);
2067 /* Add ourselves to objfile event chain. */
2068 gdb::observers::new_objfile
.attach (thread_db_new_objfile
, "linux-thread-db");
2070 /* Add ourselves to inferior_created event chain.
2071 This is needed to handle debugging statically linked programs where
2072 the new_objfile observer won't get called for libpthread. */
2073 gdb::observers::inferior_created
.attach (thread_db_inferior_created
,