1 /* libthread_db assisted debugging support, generic parts.
2 
3    Copyright (C) 1999-2021 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
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.
11 
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.
16 
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/>.  */
19 
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"
52 
53 /* GNU/Linux libthread_db support.
54 
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.
60 
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.
67 
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).
73 
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.  */
79 
80 static const target_info thread_db_target_info = {
81   "multi-thread",
82   N_("multi-threaded child process."),
83   N_("Threads and pthreads support.")
84 };
85 
86 class thread_db_target final : public target_ops
87 {
88 public:
info()89   const target_info &info () const override
90   { return thread_db_target_info; }
91 
stratum()92   strata stratum () const override { return thread_stratum; }
93 
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;
106 
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;
111 };
112 
113 static char *libthread_db_search_path;
114 
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;
118 
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;
122 
123 /* "show" command for the auto_load_thread_db configuration variable.  */
124 
125 static void
show_auto_load_thread_db(struct ui_file * file,int from_tty,struct cmd_list_element * c,const char * value)126 show_auto_load_thread_db (struct ui_file *file, int from_tty,
127 			  struct cmd_list_element *c, const char *value)
128 {
129   fprintf_filtered (file, _("Auto-loading of inferior specific libthread_db "
130 			    "is %s.\n"),
131 		    value);
132 }
133 
134 static void
set_libthread_db_search_path(const char * ignored,int from_tty,struct cmd_list_element * c)135 set_libthread_db_search_path (const char *ignored, int from_tty,
136 			      struct cmd_list_element *c)
137 {
138   if (*libthread_db_search_path == '\0')
139     {
140       xfree (libthread_db_search_path);
141       libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
142     }
143 }
144 
145 /* If non-zero, print details of libthread_db processing.  */
146 
147 static unsigned int libthread_db_debug;
148 
149 static void
show_libthread_db_debug(struct ui_file * file,int from_tty,struct cmd_list_element * c,const char * value)150 show_libthread_db_debug (struct ui_file *file, int from_tty,
151 			 struct cmd_list_element *c, const char *value)
152 {
153   fprintf_filtered (file, _("libthread-db debugging is %s.\n"), value);
154 }
155 
156 /* If we're running on GNU/Linux, we must explicitly attach to any new
157    threads.  */
158 
159 /* This module's target vector.  */
160 static thread_db_target the_thread_db_target;
161 
162 /* Non-zero if we have determined the signals used by the threads
163    library.  */
164 static int thread_signals;
165 
166 struct thread_db_info
167 {
168   struct thread_db_info *next;
169 
170   /* The target this thread_db_info is bound to.  */
171   process_stratum_target *process_target;
172 
173   /* Process id this object refers to.  */
174   int pid;
175 
176   /* Handle from dlopen for libthread_db.so.  */
177   void *handle;
178 
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;
182 
183   /* Structure that identifies the child process for the
184      <proc_service.h> interface.  */
185   struct ps_prochandle proc_handle;
186 
187   /* Connection to the libthread_db library.  */
188   td_thragent_t *thread_agent;
189 
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;
196 
197   /* Pointers to the libthread_db functions.  */
198 
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;
207 };
208 
209 /* List of known processes using thread_db, and the required
210    bookkeeping.  */
211 static thread_db_info *thread_db_list;
212 
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);
216 
217 static void check_thread_signals (void);
218 
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);
222 
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.  */
227 
228 static struct thread_db_info *
add_thread_db_info(void * handle)229 add_thread_db_info (void *handle)
230 {
231   struct thread_db_info *info = XCNEW (struct thread_db_info);
232 
233   info->process_target = current_inferior ()->process_target ();
234   info->pid = inferior_ptid.pid ();
235   info->handle = handle;
236 
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;
241 
242   info->next = thread_db_list;
243   thread_db_list = info;
244 
245   return info;
246 }
247 
248 /* Return the thread_db_info object representing the bookkeeping
249    related to process PID, if any; NULL otherwise.  */
250 
251 static struct thread_db_info *
get_thread_db_info(process_stratum_target * targ,int pid)252 get_thread_db_info (process_stratum_target *targ, int pid)
253 {
254   struct thread_db_info *info;
255 
256   for (info = thread_db_list; info; info = info->next)
257     if (targ == info->process_target && pid == info->pid)
258       return info;
259 
260   return NULL;
261 }
262 
263 static const char *thread_db_err_str (td_err_e err);
264 
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.  */
269 
270 static void
delete_thread_db_info(process_stratum_target * targ,int pid)271 delete_thread_db_info (process_stratum_target *targ, int pid)
272 {
273   struct thread_db_info *info, *info_prev;
274 
275   info_prev = NULL;
276 
277   for (info = thread_db_list; info; info_prev = info, info = info->next)
278     if (targ == info->process_target && pid == info->pid)
279       break;
280 
281   if (info == NULL)
282     return;
283 
284   if (info->thread_agent != NULL && info->td_ta_delete_p != NULL)
285     {
286       td_err_e err = info->td_ta_delete_p (info->thread_agent);
287 
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;
292     }
293 
294   if (info->handle != NULL)
295     dlclose (info->handle);
296 
297   xfree (info->filename);
298 
299   if (info_prev)
300     info_prev->next = info->next;
301   else
302     thread_db_list = info->next;
303 
304   xfree (info);
305 }
306 
307 /* Use "struct private_thread_info" to cache thread state.  This is
308    a substantial optimization.  */
309 
310 struct thread_db_thread_info : public private_thread_info
311 {
312   /* Flag set when we see a TD_DEATH event for this thread.  */
313   bool dying = false;
314 
315   /* Cached thread state.  */
316   td_thrhandle_t th {};
317   thread_t tid {};
318 };
319 
320 static thread_db_thread_info *
get_thread_db_thread_info(thread_info * thread)321 get_thread_db_thread_info (thread_info *thread)
322 {
323   return static_cast<thread_db_thread_info *> (thread->priv.get ());
324 }
325 
326 static const char *
thread_db_err_str(td_err_e err)327 thread_db_err_str (td_err_e err)
328 {
329   static char buf[64];
330 
331   switch (err)
332     {
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;
390     }
391 }
392 
393 /* Fetch the user-level thread id of PTID.  STOPPED is a stopped
394    thread that we can use to access memory.  */
395 
396 static struct thread_info *
thread_from_lwp(thread_info * stopped,ptid_t ptid)397 thread_from_lwp (thread_info *stopped, ptid_t ptid)
398 {
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;
404 
405   /* Just in case td_ta_map_lwp2thr doesn't initialize it completely.  */
406   th.th_unique = 0;
407 
408   /* This ptid comes from linux-nat.c, which should always fill in the
409      LWP.  */
410   gdb_assert (ptid.lwp () != 0);
411 
412   info = get_thread_db_info (stopped->inf->process_target (), ptid.pid ());
413 
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));
421 
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));
426 
427   /* Fill the cache.  */
428   tp = find_thread_ptid (stopped->inf->process_target (), ptid);
429   return record_thread (info, tp, ptid, &th, &ti);
430 }
431 
432 
433 /* See linux-nat.h.  */
434 
435 int
thread_db_notice_clone(ptid_t parent,ptid_t child)436 thread_db_notice_clone (ptid_t parent, ptid_t child)
437 {
438   struct thread_db_info *info;
439 
440   info = get_thread_db_info (linux_target, child.pid ());
441 
442   if (info == NULL)
443     return 0;
444 
445   thread_info *stopped = find_thread_ptid (linux_target, parent);
446 
447   thread_from_lwp (stopped, child);
448 
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;
453 }
454 
455 static void *
verbose_dlsym(void * handle,const char * name)456 verbose_dlsym (void *handle, const char *name)
457 {
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;
463 }
464 
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.  */
468 
469 static int
inferior_has_bug(const char * ver_symbol,int ver_major_min,int ver_minor_min)470 inferior_has_bug (const char *ver_symbol, int ver_major_min, int ver_minor_min)
471 {
472   struct bound_minimal_symbol version_msym;
473   CORE_ADDR version_addr;
474   int got, retval = 0;
475 
476   version_msym = lookup_minimal_symbol (ver_symbol, NULL, NULL);
477   if (version_msym.minsym == NULL)
478     return 0;
479 
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)
485     {
486       int major, minor;
487 
488       retval = (sscanf (version.get (), "%d.%d", &major, &minor) == 2
489 		&& (major < ver_major_min
490 		    || (major == ver_major_min && minor < ver_minor_min)));
491     }
492 
493   return retval;
494 }
495 
496 /* Similar as thread_db_find_new_threads_1, but try to silently ignore errors
497    if appropriate.
498 
499    Return 1 if the caller should abort libthread_db initialization.  Return 0
500    otherwise.  */
501 
502 static int
thread_db_find_new_threads_silently(thread_info * stopped)503 thread_db_find_new_threads_silently (thread_info *stopped)
504 {
505 
506   try
507     {
508       thread_db_find_new_threads_2 (stopped, true);
509     }
510 
511   catch (const gdb_exception_error &except)
512     {
513       if (libthread_db_debug)
514 	exception_fprintf (gdb_stdlog, except,
515 			   "Warning: thread_db_find_new_threads_silently: ");
516 
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.
522 
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.
526 
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.  */
532 
533       if (!target_has_execution () || !inferior_has_bug ("nptl_version", 2, 7))
534 	{
535 	  exception_fprintf (gdb_stderr, except,
536 			     _("Warning: couldn't activate thread debugging "
537 			       "using libthread_db: "));
538 	  return 1;
539 	}
540     }
541 
542   return 0;
543 }
544 
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.  */
548 
549 static const char *
dladdr_to_soname(const void * addr)550 dladdr_to_soname (const void *addr)
551 {
552   Dl_info info;
553 
554   if (dladdr (addr, &info) != 0)
555     return info.dli_fname;
556   return NULL;
557 }
558 
559 /* State for check_thread_db_callback.  */
560 
561 struct check_thread_db_info
562 {
563   /* The libthread_db under test.  */
564   struct thread_db_info *info;
565 
566   /* True if progress should be logged.  */
567   bool log_progress;
568 
569   /* True if the callback was called.  */
570   bool threads_seen;
571 
572   /* Name of last libthread_db function called.  */
573   const char *last_call;
574 
575   /* Value returned by last libthread_db call.  */
576   td_err_e last_result;
577 };
578 
579 static struct check_thread_db_info *tdb_testinfo;
580 
581 /* Callback for check_thread_db.  */
582 
583 static int
check_thread_db_callback(const td_thrhandle_t * th,void * arg)584 check_thread_db_callback (const td_thrhandle_t *th, void *arg)
585 {
586   gdb_assert (tdb_testinfo != NULL);
587   tdb_testinfo->threads_seen = true;
588 
589 #define LOG(fmt, args...)						\
590   do									\
591     {									\
592       if (tdb_testinfo->log_progress)					\
593 	{								\
594 	  debug_printf (fmt, ## args);					\
595 	  gdb_flush (gdb_stdlog);					\
596 	}								\
597     }									\
598   while (0)
599 
600 #define CHECK_1(expr, args...)						\
601   do									\
602     {									\
603       if (!(expr))							\
604 	{								\
605 	  LOG (" ... FAIL!\n");						\
606 	  error (args);							\
607 	}								\
608     }									\
609   while (0)
610 
611 #define CHECK(expr)							\
612   CHECK_1 (expr, "(%s) == false", #expr)
613 
614 #define CALL_UNCHECKED(func, args...)					\
615   do									\
616     {									\
617       tdb_testinfo->last_call = #func;					\
618       tdb_testinfo->last_result						\
619 	= tdb_testinfo->info->func ## _p (args);			\
620     }									\
621   while (0)
622 
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))		\
628 
629 #define CALL(func, args...)						\
630   do									\
631     {									\
632       CALL_UNCHECKED (func, args);					\
633       CHECK_CALL ();							\
634     }									\
635   while (0)
636 
637   LOG ("  Got thread");
638 
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);
643 
644   LOG (" %s", core_addr_to_string_nz ((CORE_ADDR) th->th_unique));
645 
646   /* Check td_thr_get_info.  */
647   td_thrinfo_t ti;
648   CALL (td_thr_get_info, th, &ti);
649 
650   LOG (" => %d", ti.ti_lid);
651 
652   CHECK (ti.ti_ta_p == th->th_ta_p);
653   CHECK (ti.ti_tid == (thread_t) th->th_unique);
654 
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);
659 
660   if (tdb_testinfo->last_result == TD_ERR && !target_has_execution ())
661     {
662       /* Some platforms require execution for td_ta_map_lwp2thr.  */
663       LOG (_("; can't map_lwp2thr"));
664     }
665   else
666     {
667       CHECK_CALL ();
668 
669       LOG (" => %s", core_addr_to_string_nz ((CORE_ADDR) th2.th_unique));
670 
671       CHECK (memcmp (th, &th2, sizeof (td_thrhandle_t)) == 0);
672     }
673 
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.
681 
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.
685 
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)
693     {
694       LOG ("; errno");
695 
696       scoped_restore_current_thread restore_current_thread;
697       switch_to_thread (thread_info);
698 
699       expression_up expr = parse_expression ("(int) errno");
700       struct value *val = evaluate_expression (expr.get ());
701 
702       if (tdb_testinfo->log_progress)
703 	{
704 	  struct value_print_options opts;
705 
706 	  get_user_print_options (&opts);
707 	  LOG (" = ");
708 	  value_print (val, gdb_stdlog, &opts);
709 	}
710     }
711 
712   LOG (" ... OK\n");
713 
714 #undef LOG
715 #undef CHECK_1
716 #undef CHECK
717 #undef CALL_UNCHECKED
718 #undef CHECK_CALL
719 #undef CALL
720 
721   return 0;
722 }
723 
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.  */
728 
729 static bool
check_thread_db(struct thread_db_info * info,bool log_progress)730 check_thread_db (struct thread_db_info *info, bool log_progress)
731 {
732   bool test_passed = true;
733 
734   if (log_progress)
735     debug_printf (_("Running libthread_db integrity checks:\n"));
736 
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)
742     {
743       void *thr_iter = verbose_dlsym (info->handle, "td_ta_thr_iter");
744       if (thr_iter == NULL)
745 	return 0;
746 
747       td_ta_thr_iter_p = (td_ta_thr_iter_ftype *) thr_iter;
748     }
749 
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;
754 
755   memset (tdb_testinfo, 0, sizeof (struct check_thread_db_info));
756   tdb_testinfo->info = info;
757   tdb_testinfo->log_progress = log_progress;
758 
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 ();
764 
765   try
766     {
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);
774 
775       if (err != TD_OK)
776 	error (_("td_ta_thr_iter failed: %s"), thread_db_err_str (err));
777 
778       if (!tdb_testinfo->threads_seen)
779 	error (_("no threads seen"));
780     }
781   catch (const gdb_exception_error &except)
782     {
783       if (warning_pre_print)
784 	fputs_unfiltered (warning_pre_print, gdb_stderr);
785 
786       exception_fprintf (gdb_stderr, except,
787 			 _("libthread_db integrity checks failed: "));
788 
789       test_passed = false;
790     }
791 
792   if (test_passed && log_progress)
793     debug_printf (_("libthread_db integrity checks passed.\n"));
794 
795   tdb_testinfo = NULL;
796 
797   linux_unstop_all_lwps ();
798 
799   return test_passed;
800 }
801 
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.  */
810 
811 static bool
libpthread_objfile_p(objfile * obj)812 libpthread_objfile_p (objfile *obj)
813 {
814   return (libpthread_name_p (objfile_name (obj))
815           && lookup_minimal_symbol ("pthread_create",
816 	                            NULL,
817 				    obj).minsym != NULL);
818 }
819 
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).  */
825 
826 static bool
try_thread_db_load_1(struct thread_db_info * info)827 try_thread_db_load_1 (struct thread_db_info *info)
828 {
829   td_err_e err;
830 
831   /* Initialize pointers to the dynamic library functions we will use.
832      Essential functions first.  */
833 
834 #define TDB_VERBOSE_DLSYM(info, func)			\
835   info->func ## _p = (func ## _ftype *) verbose_dlsym (info->handle, #func)
836 
837 #define TDB_DLSYM(info, func)			\
838   info->func ## _p = (func ## _ftype *) dlsym (info->handle, #func)
839 
840 #define CHK(a)								\
841   do									\
842     {									\
843       if ((a) == NULL)							\
844 	return false;							\
845   } while (0)
846 
847   CHK (TDB_VERBOSE_DLSYM (info, td_init));
848 
849   err = info->td_init_p ();
850   if (err != TD_OK)
851     {
852       warning (_("Cannot initialize libthread_db: %s"),
853 	       thread_db_err_str (err));
854       return false;
855     }
856 
857   CHK (TDB_VERBOSE_DLSYM (info, td_ta_new));
858 
859   /* Initialize the structure that identifies the child process.  */
860   info->proc_handle.thread = inferior_thread ();
861 
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)
865     {
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)
871 	  {
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));
882 	  }
883       return false;
884     }
885 
886   /* These are essential.  */
887   CHK (TDB_VERBOSE_DLSYM (info, td_ta_map_lwp2thr));
888   CHK (TDB_VERBOSE_DLSYM (info, td_thr_get_info));
889 
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);
894 
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.
901 
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));
909 
910 #undef TDB_VERBOSE_DLSYM
911 #undef TDB_DLSYM
912 #undef CHK
913 
914   /* Run integrity checks if requested.  */
915   if (check_thread_db_on_load)
916     {
917       if (!check_thread_db (info, libthread_db_debug))
918 	return false;
919     }
920 
921   if (info->td_ta_thr_iter_p == NULL)
922     {
923       struct lwp_info *lp;
924       int pid = inferior_ptid.pid ();
925       thread_info *curr_thread = inferior_thread ();
926 
927       linux_stop_and_wait_all_lwps ();
928 
929       ALL_LWPS (lp)
930 	if (lp->ptid.pid () == pid)
931 	  thread_from_lwp (curr_thread, lp->ptid);
932 
933       linux_unstop_all_lwps ();
934     }
935   else if (thread_db_find_new_threads_silently (inferior_thread ()) != 0)
936     {
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;
941     }
942 
943   printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
944 
945   if (*libthread_db_search_path || libthread_db_debug)
946     {
947       struct ui_file *file;
948       const char *library;
949 
950       library = dladdr_to_soname ((const void *) *info->td_ta_new_p);
951       if (library == NULL)
952 	library = LIBTHREAD_DB_SO;
953 
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));
962     }
963 
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;
968 }
969 
970 /* Attempt to use LIBRARY as libthread_db.  LIBRARY could be absolute,
971    relative, or just LIBTHREAD_DB.  */
972 
973 static bool
try_thread_db_load(const char * library,bool check_auto_load_safe)974 try_thread_db_load (const char *library, bool check_auto_load_safe)
975 {
976   void *handle;
977   struct thread_db_info *info;
978 
979   if (libthread_db_debug)
980     fprintf_unfiltered (gdb_stdlog,
981 			_("Trying host libthread_db library: %s.\n"),
982 			library);
983 
984   if (check_auto_load_safe)
985     {
986       if (access (library, R_OK) != 0)
987 	{
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;
994 	}
995 
996       auto_load_debug_printf
997 	("Loading libthread-db library \"%s\" from explicit directory.",
998 	 library);
999 
1000       if (!file_is_auto_load_safe (library))
1001 	return false;
1002     }
1003 
1004   handle = dlopen (library, RTLD_NOW);
1005   if (handle == NULL)
1006     {
1007       if (libthread_db_debug)
1008 	fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
1009       return false;
1010     }
1011 
1012   if (libthread_db_debug && strchr (library, '/') == NULL)
1013     {
1014       void *td_init;
1015 
1016       td_init = dlsym (handle, "td_init");
1017       if (td_init != NULL)
1018 	{
1019 	  const char *const libpath = dladdr_to_soname (td_init);
1020 
1021 	  if (libpath != NULL)
1022 	    fprintf_unfiltered (gdb_stdlog, _("Host %s resolved to: %s.\n"),
1023 			       library, libpath);
1024 	}
1025     }
1026 
1027   info = add_thread_db_info (handle);
1028 
1029   /* Do not save system library name, that one is always trusted.  */
1030   if (strchr (library, '/') != NULL)
1031     info->filename = gdb_realpath (library).release ();
1032 
1033   try
1034     {
1035       if (try_thread_db_load_1 (info))
1036 	return true;
1037     }
1038   catch (const gdb_exception_error &except)
1039     {
1040       if (libthread_db_debug)
1041 	exception_fprintf (gdb_stdlog, except,
1042 			   "Warning: While trying to load libthread_db: ");
1043     }
1044 
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;
1049 }
1050 
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.  */
1055 
1056 static bool
try_thread_db_load_from_pdir_1(struct objfile * obj,const char * subdir)1057 try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
1058 {
1059   const char *obj_name = objfile_name (obj);
1060 
1061   if (obj_name[0] != '/')
1062     {
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;
1067     }
1068 
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;
1077 
1078   return try_thread_db_load (path.c_str (), true);
1079 }
1080 
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.  */
1085 
1086 static bool
try_thread_db_load_from_pdir(const char * subdir)1087 try_thread_db_load_from_pdir (const char *subdir)
1088 {
1089   if (!auto_load_thread_db)
1090     return false;
1091 
1092   for (objfile *obj : current_program_space->objfiles ())
1093     if (libpthread_objfile_p (obj))
1094       {
1095 	if (try_thread_db_load_from_pdir_1 (obj, subdir))
1096 	  return true;
1097 
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);
1104 
1105 	return false;
1106       }
1107 
1108   return false;
1109 }
1110 
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.  */
1115 
1116 static bool
try_thread_db_load_from_sdir(void)1117 try_thread_db_load_from_sdir (void)
1118 {
1119   return try_thread_db_load (LIBTHREAD_DB_SO, false);
1120 }
1121 
1122 /* Try to load libthread_db from directory DIR of length DIR_LEN.
1123    The result is true for success.  */
1124 
1125 static bool
try_thread_db_load_from_dir(const char * dir,size_t dir_len)1126 try_thread_db_load_from_dir (const char *dir, size_t dir_len)
1127 {
1128   if (!auto_load_thread_db)
1129     return false;
1130 
1131   std::string path = std::string (dir, dir_len) + "/" + LIBTHREAD_DB_SO;
1132 
1133   return try_thread_db_load (path.c_str (), true);
1134 }
1135 
1136 /* Search libthread_db_search_path for libthread_db which "agrees"
1137    to work on current inferior.
1138    The result is true for success.  */
1139 
1140 static bool
thread_db_load_search(void)1141 thread_db_load_search (void)
1142 {
1143   bool rc = false;
1144 
1145   std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
1146     = dirnames_to_char_ptr_vec (libthread_db_search_path);
1147 
1148   for (const gdb::unique_xmalloc_ptr<char> &this_dir_up : dir_vec)
1149     {
1150       const char *this_dir = this_dir_up.get ();
1151       const int pdir_len = sizeof ("$pdir") - 1;
1152       size_t this_dir_len;
1153 
1154       this_dir_len = strlen (this_dir);
1155 
1156       if (strncmp (this_dir, "$pdir", pdir_len) == 0
1157 	  && (this_dir[pdir_len] == '\0'
1158 	      || this_dir[pdir_len] == '/'))
1159 	{
1160 	  const char *subdir = NULL;
1161 
1162 	  std::string subdir_holder;
1163 	  if (this_dir[pdir_len] == '/')
1164 	    {
1165 	      subdir_holder = std::string (this_dir + pdir_len + 1);
1166 	      subdir = subdir_holder.c_str ();
1167 	    }
1168 	  rc = try_thread_db_load_from_pdir (subdir);
1169 	  if (rc)
1170 	    break;
1171 	}
1172       else if (strcmp (this_dir, "$sdir") == 0)
1173 	{
1174 	  if (try_thread_db_load_from_sdir ())
1175 	    {
1176 	      rc = 1;
1177 	      break;
1178 	    }
1179 	}
1180       else
1181 	{
1182 	  if (try_thread_db_load_from_dir (this_dir, this_dir_len))
1183 	    {
1184 	      rc = 1;
1185 	      break;
1186 	    }
1187 	}
1188     }
1189 
1190   if (libthread_db_debug)
1191     fprintf_unfiltered (gdb_stdlog,
1192 			_("thread_db_load_search returning %d\n"), rc);
1193   return rc;
1194 }
1195 
1196 /* Return true if the inferior has a libpthread.  */
1197 
1198 static bool
has_libpthread(void)1199 has_libpthread (void)
1200 {
1201   for (objfile *obj : current_program_space->objfiles ())
1202     if (libpthread_objfile_p (obj))
1203       return true;
1204 
1205   return false;
1206 }
1207 
1208 /* Attempt to load and initialize libthread_db.
1209    Return 1 on success.  */
1210 
1211 static bool
thread_db_load(void)1212 thread_db_load (void)
1213 {
1214   inferior *inf = current_inferior ();
1215 
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;
1220 
1221   thread_db_info *info = get_thread_db_info (inf->process_target (),
1222 					     inferior_ptid.pid ());
1223 
1224   if (info != NULL)
1225     return true;
1226 
1227   /* Don't attempt to use thread_db on executables not running
1228      yet.  */
1229   if (!target_has_registers ())
1230     return false;
1231 
1232   /* Don't attempt to use thread_db for remote targets.  */
1233   if (!(target_can_run () || core_bfd))
1234     return false;
1235 
1236   if (thread_db_load_search ())
1237     return true;
1238 
1239   /* We couldn't find a libthread_db.
1240      If the inferior has a libpthread warn the user.  */
1241   if (has_libpthread ())
1242     {
1243       warning (_("Unable to find libthread_db matching inferior's thread"
1244 		 " library, thread debugging will not be available."));
1245       return false;
1246     }
1247 
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;
1252 }
1253 
1254 static void
check_thread_signals(void)1255 check_thread_signals (void)
1256 {
1257   if (!thread_signals)
1258     {
1259       int i;
1260 
1261       for (i = 0; i < lin_thread_get_thread_signal_num (); i++)
1262 	{
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;
1267 	}
1268     }
1269 }
1270 
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.  */
1274 
1275 void
check_for_thread_db(void)1276 check_for_thread_db (void)
1277 {
1278   /* Do nothing if we couldn't load libthread_db.so.1.  */
1279   if (!thread_db_load ())
1280     return;
1281 }
1282 
1283 /* This function is called via the new_objfile observer.  */
1284 
1285 static void
thread_db_new_objfile(struct objfile * objfile)1286 thread_db_new_objfile (struct objfile *objfile)
1287 {
1288   /* This observer must always be called with inferior_ptid set
1289      correctly.  */
1290 
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 ();
1309 }
1310 
1311 static void
check_pid_namespace_match(inferior * inf)1312 check_pid_namespace_match (inferior *inf)
1313 {
1314   /* Check is only relevant for local targets targets.  */
1315   if (target_can_run ())
1316     {
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))
1323 	{
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."));
1328 	}
1329     }
1330 }
1331 
1332 /* This function is called via the inferior_created observer.
1333    This handles the case of debugging statically linked executables.  */
1334 
1335 static void
thread_db_inferior_created(inferior * inf)1336 thread_db_inferior_created (inferior *inf)
1337 {
1338   check_pid_namespace_match (inf);
1339   check_for_thread_db ();
1340 }
1341 
1342 /* Update the thread's state (what's displayed in "info threads"),
1343    from libthread_db thread state information.  */
1344 
1345 static void
update_thread_state(thread_db_thread_info * priv,const td_thrinfo_t * ti_p)1346 update_thread_state (thread_db_thread_info *priv,
1347 		     const td_thrinfo_t *ti_p)
1348 {
1349   priv->dying = (ti_p->ti_state == TD_THR_UNKNOWN
1350 		 || ti_p->ti_state == TD_THR_ZOMBIE);
1351 }
1352 
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.  */
1356 
1357 static struct thread_info *
record_thread(struct thread_db_info * info,struct thread_info * tp,ptid_t ptid,const td_thrhandle_t * th_p,const td_thrinfo_t * ti_p)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)
1362 {
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;
1368 
1369   /* Construct the thread's private data.  */
1370   thread_db_thread_info *priv = new thread_db_thread_info;
1371 
1372   priv->th = *th_p;
1373   priv->tid = ti_p->ti_tid;
1374   update_thread_state (priv, ti_p);
1375 
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);
1383 
1384   if (target_has_execution ())
1385     check_thread_signals ();
1386 
1387   return tp;
1388 }
1389 
1390 void
detach(inferior * inf,int from_tty)1391 thread_db_target::detach (inferior *inf, int from_tty)
1392 {
1393   delete_thread_db_info (inf->process_target (), inf->pid);
1394 
1395   beneath ()->detach (inf, from_tty);
1396 
1397   /* NOTE: From this point on, inferior_ptid is null_ptid.  */
1398 
1399   /* Detach the thread_db target from this inferior.  */
1400   inf->unpush_target (this);
1401 }
1402 
1403 ptid_t
wait(ptid_t ptid,struct target_waitstatus * ourstatus,target_wait_flags options)1404 thread_db_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
1405 			target_wait_flags options)
1406 {
1407   struct thread_db_info *info;
1408 
1409   process_stratum_target *beneath
1410     = as_process_stratum_target (this->beneath ());
1411 
1412   ptid = beneath->wait (ptid, ourstatus, options);
1413 
1414   switch (ourstatus->kind)
1415     {
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;
1422     }
1423 
1424   info = get_thread_db_info (beneath, ptid.pid ());
1425 
1426   /* If this process isn't using thread_db, we're done.  */
1427   if (info == NULL)
1428     return ptid;
1429 
1430   /* Fill in the thread's user-level thread id and status.  */
1431   thread_from_lwp (find_thread_ptid (beneath, ptid), ptid);
1432 
1433   return ptid;
1434 }
1435 
1436 void
mourn_inferior()1437 thread_db_target::mourn_inferior ()
1438 {
1439   process_stratum_target *target_beneath
1440     = as_process_stratum_target (this->beneath ());
1441 
1442   delete_thread_db_info (target_beneath, inferior_ptid.pid ());
1443 
1444   target_beneath->mourn_inferior ();
1445 
1446   /* Detach the thread_db target from this inferior.  */
1447   current_inferior ()->unpush_target (this);
1448 }
1449 
1450 void
follow_exec(inferior * follow_inf,ptid_t ptid,const char * execd_pathname)1451 thread_db_target::follow_exec (inferior *follow_inf, ptid_t ptid,
1452 			       const char *execd_pathname)
1453 {
1454   process_stratum_target *beneath
1455     = as_process_stratum_target (this->beneath ());
1456 
1457   delete_thread_db_info (beneath, ptid.pid ());
1458 
1459   current_inferior ()->unpush_target (this);
1460   beneath->follow_exec (follow_inf, ptid, execd_pathname);
1461 }
1462 
1463 struct callback_data
1464 {
1465   struct thread_db_info *info;
1466   int new_threads;
1467 };
1468 
1469 static int
find_new_threads_callback(const td_thrhandle_t * th_p,void * data)1470 find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
1471 {
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;
1477 
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));
1482 
1483   if (ti.ti_lid == -1)
1484     {
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;
1497     }
1498 
1499   if (ti.ti_tid == 0)
1500     {
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.  */
1505 
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;
1509 
1510       return 0;
1511     }
1512 
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)
1517     {
1518       int tgid = linux_proc_get_tgid (ti.ti_lid);
1519 
1520       if (tgid != -1 && tgid != info->pid)
1521 	return 0;
1522     }
1523 
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);
1528 
1529   return 0;
1530 }
1531 
1532 /* Helper for thread_db_find_new_threads_2.
1533    Returns number of new threads found.  */
1534 
1535 static int
find_new_threads_once(struct thread_db_info * info,int iteration,td_err_e * errp)1536 find_new_threads_once (struct thread_db_info *info, int iteration,
1537 		       td_err_e *errp)
1538 {
1539   struct callback_data data;
1540   td_err_e err = TD_ERR;
1541 
1542   data.info = info;
1543   data.new_threads = 0;
1544 
1545   /* See comment in thread_db_update_thread_list.  */
1546   gdb_assert (info->td_ta_thr_iter_p != NULL);
1547 
1548   try
1549     {
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);
1558     }
1559   catch (const gdb_exception_error &except)
1560     {
1561       if (libthread_db_debug)
1562 	{
1563 	  exception_fprintf (gdb_stdlog, except,
1564 			     "Warning: find_new_threads_once: ");
1565 	}
1566     }
1567 
1568   if (libthread_db_debug)
1569     {
1570       fprintf_unfiltered (gdb_stdlog,
1571 			  _("Found %d new threads in iteration %d.\n"),
1572 			  data.new_threads, iteration);
1573     }
1574 
1575   if (errp != NULL)
1576     *errp = err;
1577 
1578   return data.new_threads;
1579 }
1580 
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.  */
1584 
1585 static void
thread_db_find_new_threads_2(thread_info * stopped,bool until_no_new)1586 thread_db_find_new_threads_2 (thread_info *stopped, bool until_no_new)
1587 {
1588   td_err_e err = TD_OK;
1589   struct thread_db_info *info;
1590   int i, loop;
1591 
1592   info = get_thread_db_info (stopped->inf->process_target (),
1593 			     stopped->ptid.pid ());
1594 
1595   /* Access an lwp we know is stopped.  */
1596   info->proc_handle.thread = stopped;
1597 
1598   if (until_no_new)
1599     {
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)
1606 	  {
1607 	    /* Found some new threads.  Restart the loop from beginning.  */
1608 	    loop = -1;
1609 	  }
1610     }
1611   else
1612     find_new_threads_once (info, 0, &err);
1613 
1614   if (err != TD_OK)
1615     error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1616 }
1617 
1618 static void
thread_db_find_new_threads_1(thread_info * stopped)1619 thread_db_find_new_threads_1 (thread_info *stopped)
1620 {
1621   thread_db_find_new_threads_2 (stopped, 0);
1622 }
1623 
1624 /* Implement the to_update_thread_list target method for this
1625    target.  */
1626 
1627 void
update_thread_list()1628 thread_db_target::update_thread_list ()
1629 {
1630   struct thread_db_info *info;
1631 
1632   prune_threads ();
1633 
1634   for (inferior *inf : all_inferiors ())
1635     {
1636       if (inf->pid == 0)
1637 	continue;
1638 
1639       info = get_thread_db_info (inf->process_target (), inf->pid);
1640       if (info == NULL)
1641 	continue;
1642 
1643       thread_info *thread = any_live_thread_of_inferior (inf);
1644       if (thread == NULL || thread->executing)
1645 	continue;
1646 
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;
1660 
1661       thread_db_find_new_threads_1 (thread);
1662     }
1663 
1664   /* Give the beneath target a chance to do extra processing.  */
1665   this->beneath ()->update_thread_list ();
1666 }
1667 
1668 std::string
pid_to_str(ptid_t ptid)1669 thread_db_target::pid_to_str (ptid_t ptid)
1670 {
1671   thread_info *thread_info = find_thread_ptid (current_inferior (), ptid);
1672 
1673   if (thread_info != NULL && thread_info->priv != NULL)
1674     {
1675       thread_db_thread_info *priv = get_thread_db_thread_info (thread_info);
1676 
1677       return string_printf ("Thread 0x%lx (LWP %ld)",
1678 			    (unsigned long) priv->tid, ptid.lwp ());
1679     }
1680 
1681   return beneath ()->pid_to_str (ptid);
1682 }
1683 
1684 /* Return a string describing the state of the thread specified by
1685    INFO.  */
1686 
1687 const char *
extra_thread_info(thread_info * info)1688 thread_db_target::extra_thread_info (thread_info *info)
1689 {
1690   if (info->priv == NULL)
1691     return NULL;
1692 
1693   thread_db_thread_info *priv = get_thread_db_thread_info (info);
1694 
1695   if (priv->dying)
1696     return "Exiting";
1697 
1698   return NULL;
1699 }
1700 
1701 /* Return pointer to the thread_info struct which corresponds to
1702    THREAD_HANDLE (having length HANDLE_LEN).  */
1703 
1704 thread_info *
thread_handle_to_thread_info(const gdb_byte * thread_handle,int handle_len,inferior * inf)1705 thread_db_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
1706 						int handle_len,
1707 						inferior *inf)
1708 {
1709   thread_t handle_tid;
1710 
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.
1715 
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));
1725 
1726   for (thread_info *tp : inf->non_exited_threads ())
1727     {
1728       thread_db_thread_info *priv = get_thread_db_thread_info (tp);
1729 
1730       if (priv != NULL && handle_tid == priv->tid)
1731 	return tp;
1732     }
1733 
1734   return NULL;
1735 }
1736 
1737 /* Return the thread handle associated the thread_info pointer TP.  */
1738 
1739 gdb::byte_vector
thread_info_to_thread_handle(struct thread_info * tp)1740 thread_db_target::thread_info_to_thread_handle (struct thread_info *tp)
1741 {
1742   thread_db_thread_info *priv = get_thread_db_thread_info (tp);
1743 
1744   if (priv == NULL)
1745     return gdb::byte_vector ();
1746 
1747   int handle_size = sizeof (priv->tid);
1748   gdb::byte_vector rv (handle_size);
1749 
1750   memcpy (rv.data (), &priv->tid, handle_size);
1751 
1752   return rv;
1753 }
1754 
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.  */
1757 
1758 CORE_ADDR
get_thread_local_address(ptid_t ptid,CORE_ADDR lm,CORE_ADDR offset)1759 thread_db_target::get_thread_local_address (ptid_t ptid,
1760 					    CORE_ADDR lm,
1761 					    CORE_ADDR offset)
1762 {
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);
1768 
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);
1772 
1773   if (thread_info != NULL && thread_info->priv != NULL)
1774     {
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);
1779 
1780       /* Finally, get the address of the variable.  */
1781       if (lm != 0)
1782 	{
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"));
1787 
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);
1794 	}
1795       else
1796 	{
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"));
1802 
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;
1811 	}
1812 
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
1822 
1823       /* Something else went wrong.  */
1824       if (err != TD_OK)
1825 	throw_error (TLS_GENERIC_ERROR,
1826 		     (("%s")), thread_db_err_str (err));
1827 
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);
1834     }
1835 
1836   return beneath->get_thread_local_address (ptid, lm, offset);
1837 }
1838 
1839 /* Implement the to_get_ada_task_ptid target method for this target.  */
1840 
1841 ptid_t
get_ada_task_ptid(long lwp,long thread)1842 thread_db_target::get_ada_task_ptid (long lwp, long thread)
1843 {
1844   /* NPTL uses a 1:1 model, so the LWP id suffices.  */
1845   return ptid_t (inferior_ptid.pid (), lwp, 0);
1846 }
1847 
1848 void
resume(ptid_t ptid,int step,enum gdb_signal signo)1849 thread_db_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
1850 {
1851   process_stratum_target *beneath
1852     = as_process_stratum_target (this->beneath ());
1853 
1854   thread_db_info *info
1855     = get_thread_db_info (beneath, (ptid == minus_one_ptid
1856 				    ? inferior_ptid.pid ()
1857 				    : ptid.pid ()));
1858 
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;
1864 
1865   beneath->resume (ptid, step, signo);
1866 }
1867 
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.  */
1871 
1872 static bool
info_auto_load_libthread_db_compare(const struct thread_db_info * a,const struct thread_db_info * b)1873 info_auto_load_libthread_db_compare (const struct thread_db_info *a,
1874 				     const struct thread_db_info *b)
1875 {
1876   int retval;
1877 
1878   retval = strcmp (a->filename, b->filename);
1879   if (retval)
1880     return retval < 0;
1881 
1882   return a->pid < b->pid;
1883 }
1884 
1885 /* Implement 'info auto-load libthread-db'.  */
1886 
1887 static void
info_auto_load_libthread_db(const char * args,int from_tty)1888 info_auto_load_libthread_db (const char *args, int from_tty)
1889 {
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;
1896 
1897   cs = skip_spaces (cs);
1898   if (*cs)
1899     error (_("'info auto-load libthread-db' does not accept any parameters"));
1900 
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);
1905 
1906   /* Sort ARRAY by filenames and PIDs.  */
1907   std::sort (array.begin (), array.end (),
1908 	     info_auto_load_libthread_db_compare);
1909 
1910   /* Calculate the number of unique filenames (rows) and the maximum string
1911      length of PIDs list for the unique filenames (columns).  */
1912 
1913   unique_filenames = 0;
1914   max_filename_len = 0;
1915   pids_len = 0;
1916   for (i = 0; i < array.size (); i++)
1917     {
1918       int pid = array[i]->pid;
1919       size_t this_pid_len;
1920 
1921       for (this_pid_len = 0; pid != 0; pid /= 10)
1922 	this_pid_len++;
1923 
1924       if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
1925 	{
1926 	  unique_filenames++;
1927 	  max_filename_len = std::max (max_filename_len,
1928 				       strlen (array[i]->filename));
1929 
1930 	  if (i > 0)
1931 	    pids_len -= strlen (", ");
1932 	  pids_len = 0;
1933 	}
1934       pids_len += this_pid_len + strlen (", ");
1935     }
1936   if (i)
1937     pids_len -= strlen (", ");
1938 
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");
1943 
1944   {
1945     ui_out_emit_table table_emitter (uiout, 2, unique_filenames,
1946 				     "LinuxThreadDbTable");
1947 
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 ();
1951 
1952     /* Note I is incremented inside the cycle, not at its end.  */
1953     for (i = 0; i < array.size ();)
1954       {
1955 	ui_out_emit_tuple tuple_emitter (uiout, NULL);
1956 
1957 	info = array[i];
1958 	uiout->field_string ("filename", info->filename);
1959 
1960 	std::string pids;
1961 	while (i < array.size () && strcmp (info->filename,
1962 					    array[i]->filename) == 0)
1963 	  {
1964 	    if (!pids.empty ())
1965 	      pids += ", ";
1966 	    string_appendf (pids, "%u", array[i]->pid);
1967 	    i++;
1968 	  }
1969 
1970 	uiout->field_string ("pids", pids);
1971 
1972 	uiout->text ("\n");
1973       }
1974   }
1975 
1976   if (array.empty ())
1977     uiout->message (_("No auto-loaded libthread-db.\n"));
1978 }
1979 
1980 /* Implement 'maintenance check libthread-db'.  */
1981 
1982 static void
maintenance_check_libthread_db(const char * args,int from_tty)1983 maintenance_check_libthread_db (const char *args, int from_tty)
1984 {
1985   int inferior_pid = inferior_ptid.pid ();
1986   struct thread_db_info *info;
1987 
1988   if (inferior_pid == 0)
1989     error (_("No inferior running"));
1990 
1991   info = get_thread_db_info (current_inferior ()->process_target (),
1992 			     inferior_pid);
1993   if (info == NULL)
1994     error (_("No libthread_db loaded"));
1995 
1996   check_thread_db (info, true);
1997 }
1998 
1999 void _initialize_thread_db ();
2000 void
_initialize_thread_db()2001 _initialize_thread_db ()
2002 {
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.  */
2008 
2009   libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
2010 
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);
2023 
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);
2032 
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 ());
2044 
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 ());
2049 
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);
2054 
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);
2066 
2067   /* Add ourselves to objfile event chain.  */
2068   gdb::observers::new_objfile.attach (thread_db_new_objfile, "linux-thread-db");
2069 
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");
2075 }
2076