Rename gdb/ChangeLog to gdb/ChangeLog-2021
[binutils-gdb.git] / gdb / linux-thread-db.c
blob5b4e5a8654f9f18a9b4bc35484c735798b1405b6
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/>. */
20 #include "defs.h"
21 #include <dlfcn.h>
22 #include "gdb_proc_service.h"
23 #include "nat/gdb_thread_db.h"
24 #include "gdbsupport/gdb_vecs.h"
25 #include "bfd.h"
26 #include "command.h"
27 #include "gdbcmd.h"
28 #include "gdbthread.h"
29 #include "inferior.h"
30 #include "infrun.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "target.h"
34 #include "regcache.h"
35 #include "solib.h"
36 #include "solib-svr4.h"
37 #include "gdbcore.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"
45 #include <signal.h>
46 #include <ctype.h>
47 #include "nat/linux-namespaces.h"
48 #include <algorithm>
49 #include "gdbsupport/pathstuff.h"
50 #include "valprint.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
66 no longer does.
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 = {
81 "multi-thread",
82 N_("multi-threaded child process."),
83 N_("Threads and pthreads support.")
86 class thread_db_target final : public target_ops
88 public:
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,
108 int handle_len,
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. */
125 static void
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 "
130 "is %s.\n"),
131 value);
134 static void
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;
149 static void
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
157 threads. */
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
163 library. */
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. */
174 int pid;
176 /* Handle from dlopen for libthread_db.so. */
177 void *handle;
179 /* Absolute pathname from gdb_realpath to disk file used for dlopen-ing
180 HANDLE. It may be NULL for system library. */
181 char *filename;
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
210 bookkeeping. */
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,
215 bool until_no_new);
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
226 LIBTHREAD_DB_SO. */
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;
245 return 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)
258 return info;
260 return NULL;
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. */
270 static void
271 delete_thread_db_info (process_stratum_target *targ, int pid)
273 struct thread_db_info *info, *info_prev;
275 info_prev = NULL;
277 for (info = thread_db_list; info; info_prev = info, info = info->next)
278 if (targ == info->process_target && pid == info->pid)
279 break;
281 if (info == NULL)
282 return;
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);
288 if (err != TD_OK)
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);
299 if (info_prev)
300 info_prev->next = info->next;
301 else
302 thread_db_list = info->next;
304 xfree (info);
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. */
313 bool dying = false;
315 /* Cached thread state. */
316 td_thrhandle_t th {};
317 thread_t tid {};
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 ());
326 static const char *
327 thread_db_err_str (td_err_e err)
329 static char buf[64];
331 switch (err)
333 case TD_OK:
334 return "generic 'call succeeded'";
335 case TD_ERR:
336 return "generic error";
337 case TD_NOTHR:
338 return "no thread to satisfy query";
339 case TD_NOSV:
340 return "no sync handle to satisfy query";
341 case TD_NOLWP:
342 return "no LWP to satisfy query";
343 case TD_BADPH:
344 return "invalid process handle";
345 case TD_BADTH:
346 return "invalid thread handle";
347 case TD_BADSH:
348 return "invalid synchronization handle";
349 case TD_BADTA:
350 return "invalid thread agent";
351 case TD_BADKEY:
352 return "invalid key";
353 case TD_NOMSG:
354 return "no event message for getmsg";
355 case TD_NOFPREGS:
356 return "FPU register set not available";
357 case TD_NOLIBTHREAD:
358 return "application not linked with libthread";
359 case TD_NOEVENT:
360 return "requested event is not supported";
361 case TD_NOCAPAB:
362 return "capability not available";
363 case TD_DBERR:
364 return "debugger service failed";
365 case TD_NOAPLIC:
366 return "operation not applicable to";
367 case TD_NOTSD:
368 return "no thread-specific data for this thread";
369 case TD_MALLOC:
370 return "malloc failed";
371 case TD_PARTIALREG:
372 return "only part of register set was written/read";
373 case TD_NOXREGS:
374 return "X register set not available for this thread";
375 #ifdef THREAD_DB_HAS_TD_NOTALLOC
376 case TD_NOTALLOC:
377 return "thread has not yet allocated TLS for given module";
378 #endif
379 #ifdef THREAD_DB_HAS_TD_VERSION
380 case TD_VERSION:
381 return "versions of libpthread and libthread_db do not match";
382 #endif
383 #ifdef THREAD_DB_HAS_TD_NOTLS
384 case TD_NOTLS:
385 return "there is no TLS segment in the given module";
386 #endif
387 default:
388 snprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err);
389 return buf;
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)
399 td_thrhandle_t th;
400 td_thrinfo_t ti;
401 td_err_e err;
402 struct thread_db_info *info;
403 struct thread_info *tp;
405 /* Just in case td_ta_map_lwp2thr doesn't initialize it completely. */
406 th.th_unique = 0;
408 /* This ptid comes from linux-nat.c, which should always fill in the
409 LWP. */
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 (),
417 &th);
418 if (err != TD_OK)
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);
423 if (err != TD_OK)
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 ());
442 if (info == NULL)
443 return 0;
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);
452 return 1;
455 static void *
456 verbose_dlsym (void *handle, const char *name)
458 void *sym = dlsym (handle, name);
459 if (sym == NULL)
460 warning (_("Symbol \"%s\" not found in libthread_db: %s"),
461 name, dlerror ());
462 return sym;
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. */
469 static int
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;
474 int got, retval = 0;
476 version_msym = lookup_minimal_symbol (ver_symbol, NULL, NULL);
477 if (version_msym.minsym == NULL)
478 return 0;
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)
486 int major, minor;
488 retval = (sscanf (version.get (), "%d.%d", &major, &minor) == 2
489 && (major < ver_major_min
490 || (major == ver_major_min && minor < ver_minor_min)));
493 return retval;
496 /* Similar as thread_db_find_new_threads_1, but try to silently ignore errors
497 if appropriate.
499 Return 1 if the caller should abort libthread_db initialization. Return 0
500 otherwise. */
502 static int
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
521 itself.
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'
531 is possible. */
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: "));
538 return 1;
542 return 0;
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. */
549 static const char *
550 dladdr_to_soname (const void *addr)
552 Dl_info info;
554 if (dladdr (addr, &info) != 0)
555 return info.dli_fname;
556 return NULL;
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. */
567 bool log_progress;
569 /* True if the callback was called. */
570 bool threads_seen;
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. */
583 static int
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...) \
590 do \
592 if (tdb_testinfo->log_progress) \
594 debug_printf (fmt, ## args); \
595 gdb_flush (gdb_stdlog); \
598 while (0)
600 #define CHECK_1(expr, args...) \
601 do \
603 if (!(expr)) \
605 LOG (" ... FAIL!\n"); \
606 error (args); \
609 while (0)
611 #define CHECK(expr) \
612 CHECK_1 (expr, "(%s) == false", #expr)
614 #define CALL_UNCHECKED(func, args...) \
615 do \
617 tdb_testinfo->last_call = #func; \
618 tdb_testinfo->last_result \
619 = tdb_testinfo->info->func ## _p (args); \
621 while (0)
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...) \
630 do \
632 CALL_UNCHECKED (func, args); \
633 CHECK_CALL (); \
635 while (0)
637 LOG (" Got thread");
639 /* Check td_ta_thr_iter passed consistent arguments. */
640 CHECK (th != NULL);
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. */
647 td_thrinfo_t ti;
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. */
656 td_thrhandle_t th2;
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"));
665 else
667 CHECK_CALL ();
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
680 which seems wrong.
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)
694 LOG ("; errno");
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);
707 LOG (" = ");
708 value_print (val, gdb_stdlog, &opts);
712 LOG (" ... OK\n");
714 #undef LOG
715 #undef CHECK_1
716 #undef CHECK
717 #undef CALL_UNCHECKED
718 #undef CHECK_CALL
719 #undef CALL
721 return 0;
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. */
729 static bool
730 check_thread_db (struct thread_db_info *info, bool log_progress)
732 bool test_passed = true;
734 if (log_progress)
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)
745 return 0;
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
762 fail. */
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,
769 tdb_testinfo,
770 TD_THR_ANY_STATE,
771 TD_THR_LOWEST_PRIORITY,
772 TD_SIGNO_MASK,
773 TD_THR_ANY_USER_FLAGS);
775 if (err != TD_OK)
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: "));
789 test_passed = false;
792 if (test_passed && log_progress)
793 debug_printf (_("libthread_db integrity checks passed.\n"));
795 tdb_testinfo = NULL;
797 linux_unstop_all_lwps ();
799 return test_passed;
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. */
811 static bool
812 libpthread_objfile_p (objfile *obj)
814 return (libpthread_name_p (objfile_name (obj))
815 && lookup_minimal_symbol ("pthread_create",
816 NULL,
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). */
826 static bool
827 try_thread_db_load_1 (struct thread_db_info *info)
829 td_err_e err;
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)
840 #define CHK(a) \
841 do \
843 if ((a) == NULL) \
844 return false; \
845 } while (0)
847 CHK (TDB_VERBOSE_DLSYM (info, td_init));
849 err = info->td_init_p ();
850 if (err != TD_OK)
852 warning (_("Cannot initialize libthread_db: %s"),
853 thread_db_err_str (err));
854 return false;
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);
864 if (err != TD_OK)
866 if (libthread_db_debug)
867 fprintf_unfiltered (gdb_stdlog, _("td_ta_new failed: %s\n"),
868 thread_db_err_str (err));
869 else
870 switch (err)
872 case TD_NOLIBTHREAD:
873 #ifdef THREAD_DB_HAS_TD_VERSION
874 case TD_VERSION:
875 #endif
876 /* The errors above are not unexpected and silently ignored:
877 they just mean we haven't found correct version of
878 libthread_db yet. */
879 break;
880 default:
881 warning (_("td_ta_new failed: %s"), thread_db_err_str (err));
883 return false;
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;
907 else
908 CHK (TDB_VERBOSE_DLSYM (info, td_ta_thr_iter));
910 #undef TDB_VERBOSE_DLSYM
911 #undef TDB_DLSYM
912 #undef CHK
914 /* Run integrity checks if requested. */
915 if (check_thread_db_on_load)
917 if (!check_thread_db (info, libthread_db_debug))
918 return false;
921 if (info->td_ta_thr_iter_p == NULL)
923 struct lwp_info *lp;
924 int pid = inferior_ptid.pid ();
925 thread_info *curr_thread = inferior_thread ();
927 linux_stop_and_wait_all_lwps ();
929 ALL_LWPS (lp)
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. */
940 return false;
943 printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
945 if (*libthread_db_search_path || libthread_db_debug)
947 struct ui_file *file;
948 const char *library;
950 library = dladdr_to_soname ((const void *) *info->td_ta_new_p);
951 if (library == NULL)
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
957 settings. */
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
965 for this process. */
966 current_inferior ()->push_target (&the_thread_db_target);
967 return true;
970 /* Attempt to use LIBRARY as libthread_db. LIBRARY could be absolute,
971 relative, or just LIBTHREAD_DB. */
973 static bool
974 try_thread_db_load (const char *library, bool check_auto_load_safe)
976 void *handle;
977 struct thread_db_info *info;
979 if (libthread_db_debug)
980 fprintf_unfiltered (gdb_stdlog,
981 _("Trying host libthread_db library: %s.\n"),
982 library);
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));
993 return false;
996 auto_load_debug_printf
997 ("Loading libthread-db library \"%s\" from explicit directory.",
998 library);
1000 if (!file_is_auto_load_safe (library))
1001 return false;
1004 handle = dlopen (library, RTLD_NOW);
1005 if (handle == NULL)
1007 if (libthread_db_debug)
1008 fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
1009 return false;
1012 if (libthread_db_debug && strchr (library, '/') == NULL)
1014 void *td_init;
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"),
1023 library, libpath);
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))
1036 return true;
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 ());
1048 return false;
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. */
1056 static bool
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));
1066 return false;
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);
1074 if (subdir != NULL)
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. */
1086 static bool
1087 try_thread_db_load_from_pdir (const char *subdir)
1089 if (!auto_load_thread_db)
1090 return false;
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))
1096 return true;
1098 /* We may have found the separate-debug-info version of
1099 libpthread, and it may live in a directory without a matching
1100 libthread_db. */
1101 if (obj->separate_debug_objfile_backlink != NULL)
1102 return try_thread_db_load_from_pdir_1 (obj->separate_debug_objfile_backlink,
1103 subdir);
1105 return false;
1108 return false;
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. */
1116 static bool
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. */
1125 static bool
1126 try_thread_db_load_from_dir (const char *dir, size_t dir_len)
1128 if (!auto_load_thread_db)
1129 return false;
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. */
1140 static bool
1141 thread_db_load_search (void)
1143 bool rc = false;
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);
1169 if (rc)
1170 break;
1172 else if (strcmp (this_dir, "$sdir") == 0)
1174 if (try_thread_db_load_from_sdir ())
1176 rc = 1;
1177 break;
1180 else
1182 if (try_thread_db_load_from_dir (this_dir, this_dir_len))
1184 rc = 1;
1185 break;
1190 if (libthread_db_debug)
1191 fprintf_unfiltered (gdb_stdlog,
1192 _("thread_db_load_search returning %d\n"), rc);
1193 return rc;
1196 /* Return true if the inferior has a libpthread. */
1198 static bool
1199 has_libpthread (void)
1201 for (objfile *obj : current_program_space->objfiles ())
1202 if (libpthread_objfile_p (obj))
1203 return true;
1205 return false;
1208 /* Attempt to load and initialize libthread_db.
1209 Return 1 on success. */
1211 static bool
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)
1219 return false;
1221 thread_db_info *info = get_thread_db_info (inf->process_target (),
1222 inferior_ptid.pid ());
1224 if (info != NULL)
1225 return true;
1227 /* Don't attempt to use thread_db on executables not running
1228 yet. */
1229 if (!target_has_registers ())
1230 return false;
1232 /* Don't attempt to use thread_db for remote targets. */
1233 if (!(target_can_run () || core_bfd))
1234 return false;
1236 if (thread_db_load_search ())
1237 return true;
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."));
1245 return false;
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. */
1251 return false;
1254 static void
1255 check_thread_signals (void)
1257 if (!thread_signals)
1259 int i;
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);
1266 thread_signals = 1;
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. */
1275 void
1276 check_for_thread_db (void)
1278 /* Do nothing if we couldn't load libthread_db.so.1. */
1279 if (!thread_db_load ())
1280 return;
1283 /* This function is called via the new_objfile observer. */
1285 static void
1286 thread_db_new_objfile (struct objfile *objfile)
1288 /* This observer must always be called with inferior_ptid set
1289 correctly. */
1291 if (objfile != NULL
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 ();
1311 static void
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
1321 libthread_db. */
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. */
1335 static void
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. */
1345 static void
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
1365 has initialized. */
1366 if (ti_p->ti_tid == 0)
1367 return tp;
1369 /* Construct the thread's private data. */
1370 thread_db_thread_info *priv = new thread_db_thread_info;
1372 priv->th = *th_p;
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);
1381 else
1382 tp->priv.reset (priv);
1384 if (target_has_execution ())
1385 check_thread_signals ();
1387 return tp;
1390 void
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);
1403 ptid_t
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:
1421 return ptid;
1424 info = get_thread_db_info (beneath, ptid.pid ());
1426 /* If this process isn't using thread_db, we're done. */
1427 if (info == NULL)
1428 return ptid;
1430 /* Fill in the thread's user-level thread id and status. */
1431 thread_from_lwp (find_thread_ptid (beneath, ptid), ptid);
1433 return ptid;
1436 void
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);
1450 void
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;
1466 int new_threads;
1469 static int
1470 find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
1472 td_thrinfo_t ti;
1473 td_err_e err;
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);
1479 if (err != TD_OK)
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
1490 glibc PR17707. */
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);
1496 return 0;
1499 if (ti.ti_tid == 0)
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
1504 be yet. */
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;
1510 return 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)
1521 return 0;
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);
1529 return 0;
1532 /* Helper for thread_db_find_new_threads_2.
1533 Returns number of new threads found. */
1535 static int
1536 find_new_threads_once (struct thread_db_info *info, int iteration,
1537 td_err_e *errp)
1539 struct callback_data data;
1540 td_err_e err = TD_ERR;
1542 data.info = info;
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,
1553 &data,
1554 TD_THR_ANY_STATE,
1555 TD_THR_LOWEST_PRIORITY,
1556 TD_SIGNO_MASK,
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);
1575 if (errp != NULL)
1576 *errp = err;
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. */
1585 static void
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;
1590 int i, loop;
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;
1598 if (until_no_new)
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. */
1608 loop = -1;
1611 else
1612 find_new_threads_once (info, 0, &err);
1614 if (err != TD_OK)
1615 error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1618 static void
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
1625 target. */
1627 void
1628 thread_db_target::update_thread_list ()
1630 struct thread_db_info *info;
1632 prune_threads ();
1634 for (inferior *inf : all_inferiors ())
1636 if (inf->pid == 0)
1637 continue;
1639 info = get_thread_db_info (inf->process_target (), inf->pid);
1640 if (info == NULL)
1641 continue;
1643 thread_info *thread = any_live_thread_of_inferior (inf);
1644 if (thread == NULL || thread->executing)
1645 continue;
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
1657 efficient. */
1658 if (thread->inf->has_execution ())
1659 continue;
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 ();
1668 std::string
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
1685 INFO. */
1687 const char *
1688 thread_db_target::extra_thread_info (thread_info *info)
1690 if (info->priv == NULL)
1691 return NULL;
1693 thread_db_thread_info *priv = get_thread_db_thread_info (info);
1695 if (priv->dying)
1696 return "Exiting";
1698 return NULL;
1701 /* Return pointer to the thread_info struct which corresponds to
1702 THREAD_HANDLE (having length HANDLE_LEN). */
1704 thread_info *
1705 thread_db_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
1706 int handle_len,
1707 inferior *inf)
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;
1722 else
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)
1731 return tp;
1734 return NULL;
1737 /* Return the thread handle associated the thread_info pointer TP. */
1739 gdb::byte_vector
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);
1744 if (priv == NULL)
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);
1752 return rv;
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. */
1758 CORE_ADDR
1759 thread_db_target::get_thread_local_address (ptid_t ptid,
1760 CORE_ADDR lm,
1761 CORE_ADDR offset)
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)
1775 td_err_e err;
1776 psaddr_t address;
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. */
1781 if (lm != 0)
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,
1793 offset, &address);
1795 else
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"));
1821 #endif
1823 /* Something else went wrong. */
1824 if (err != TD_OK)
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. */
1841 ptid_t
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);
1848 void
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 ()
1857 : 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. */
1862 if (info)
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. */
1872 static bool
1873 info_auto_load_libthread_db_compare (const struct thread_db_info *a,
1874 const struct thread_db_info *b)
1876 int retval;
1878 retval = strcmp (a->filename, b->filename);
1879 if (retval)
1880 return retval < 0;
1882 return a->pid < b->pid;
1885 /* Implement 'info auto-load libthread-db'. */
1887 static void
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;
1895 int i;
1897 cs = skip_spaces (cs);
1898 if (*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;
1915 pids_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)
1922 this_pid_len++;
1924 if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
1926 unique_filenames++;
1927 max_filename_len = std::max (max_filename_len,
1928 strlen (array[i]->filename));
1930 if (i > 0)
1931 pids_len -= strlen (", ");
1932 pids_len = 0;
1934 pids_len += this_pid_len + strlen (", ");
1936 if (i)
1937 pids_len -= strlen (", ");
1939 /* Table header shifted right by preceding "libthread-db: " would not match
1940 its columns. */
1941 if (array.size () > 0 && args == auto_load_info_scripts_pattern_nl)
1942 uiout->text ("\n");
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);
1957 info = array[i];
1958 uiout->field_string ("filename", info->filename);
1960 std::string pids;
1961 while (i < array.size () && strcmp (info->filename,
1962 array[i]->filename) == 0)
1964 if (!pids.empty ())
1965 pids += ", ";
1966 string_appendf (pids, "%u", array[i]->pid);
1967 i++;
1970 uiout->field_string ("pids", pids);
1972 uiout->text ("\n");
1976 if (array.empty ())
1977 uiout->message (_("No auto-loaded libthread-db.\n"));
1980 /* Implement 'maintenance check libthread-db'. */
1982 static void
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 (),
1992 inferior_pid);
1993 if (info == NULL)
1994 error (_("No libthread_db loaded"));
1996 check_thread_db (info, true);
1999 void _initialize_thread_db ();
2000 void
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",
2012 class_support,
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 \
2017 gdb itself.\n\
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,
2021 NULL,
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."),
2029 NULL,
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",
2056 class_maintenance,
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."),
2062 NULL,
2063 NULL,
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,
2074 "linux-thread-db");