]> Git Repo - binutils.git/blob - gdb/linux-thread-db.c
testsuite, mi: avoid a clang bug in 'user-selected-context-sync.exp'
[binutils.git] / gdb / linux-thread-db.c
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:
89   const target_info &info () const override
90   { return thread_db_target_info; }
91
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 update_thread_list () override;
99   std::string pid_to_str (ptid_t) override;
100   CORE_ADDR get_thread_local_address (ptid_t ptid,
101                                       CORE_ADDR load_module_addr,
102                                       CORE_ADDR offset) override;
103   const char *extra_thread_info (struct thread_info *) override;
104   ptid_t get_ada_task_ptid (long lwp, long thread) override;
105
106   thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
107                                              int handle_len,
108                                              inferior *inf) override;
109   gdb::byte_vector thread_info_to_thread_handle (struct thread_info *) override;
110 };
111
112 static char *libthread_db_search_path;
113
114 /* Set to true if thread_db auto-loading is enabled
115    by the "set auto-load libthread-db" command.  */
116 static bool auto_load_thread_db = true;
117
118 /* Set to true if load-time libthread_db tests have been enabled
119    by the "maintenance set check-libthread-db" command.  */
120 static bool check_thread_db_on_load = false;
121
122 /* "show" command for the auto_load_thread_db configuration variable.  */
123
124 static void
125 show_auto_load_thread_db (struct ui_file *file, int from_tty,
126                           struct cmd_list_element *c, const char *value)
127 {
128   fprintf_filtered (file, _("Auto-loading of inferior specific libthread_db "
129                             "is %s.\n"),
130                     value);
131 }
132
133 static void
134 set_libthread_db_search_path (const char *ignored, int from_tty,
135                               struct cmd_list_element *c)
136 {
137   if (*libthread_db_search_path == '\0')
138     {
139       xfree (libthread_db_search_path);
140       libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
141     }
142 }
143
144 /* If non-zero, print details of libthread_db processing.  */
145
146 static unsigned int libthread_db_debug;
147
148 static void
149 show_libthread_db_debug (struct ui_file *file, int from_tty,
150                          struct cmd_list_element *c, const char *value)
151 {
152   fprintf_filtered (file, _("libthread-db debugging is %s.\n"), value);
153 }
154
155 /* If we're running on GNU/Linux, we must explicitly attach to any new
156    threads.  */
157
158 /* This module's target vector.  */
159 static thread_db_target the_thread_db_target;
160
161 /* Non-zero if we have determined the signals used by the threads
162    library.  */
163 static int thread_signals;
164
165 struct thread_db_info
166 {
167   struct thread_db_info *next;
168
169   /* The target this thread_db_info is bound to.  */
170   process_stratum_target *process_target;
171
172   /* Process id this object refers to.  */
173   int pid;
174
175   /* Handle from dlopen for libthread_db.so.  */
176   void *handle;
177
178   /* Absolute pathname from gdb_realpath to disk file used for dlopen-ing
179      HANDLE.  It may be NULL for system library.  */
180   char *filename;
181
182   /* Structure that identifies the child process for the
183      <proc_service.h> interface.  */
184   struct ps_prochandle proc_handle;
185
186   /* Connection to the libthread_db library.  */
187   td_thragent_t *thread_agent;
188
189   /* True if we need to apply the workaround for glibc/BZ5983.  When
190      we catch a PTRACE_O_TRACEFORK, and go query the child's thread
191      list, nptl_db returns the parent's threads in addition to the new
192      (single) child thread.  If this flag is set, we do extra work to
193      be able to ignore such stale entries.  */
194   int need_stale_parent_threads_check;
195
196   /* Pointers to the libthread_db functions.  */
197
198   td_init_ftype *td_init_p;
199   td_ta_new_ftype *td_ta_new_p;
200   td_ta_delete_ftype *td_ta_delete_p;
201   td_ta_map_lwp2thr_ftype *td_ta_map_lwp2thr_p;
202   td_ta_thr_iter_ftype *td_ta_thr_iter_p;
203   td_thr_get_info_ftype *td_thr_get_info_p;
204   td_thr_tls_get_addr_ftype *td_thr_tls_get_addr_p;
205   td_thr_tlsbase_ftype *td_thr_tlsbase_p;
206 };
207
208 /* List of known processes using thread_db, and the required
209    bookkeeping.  */
210 static thread_db_info *thread_db_list;
211
212 static void thread_db_find_new_threads_1 (thread_info *stopped);
213 static void thread_db_find_new_threads_2 (thread_info *stopped,
214                                           bool until_no_new);
215
216 static void check_thread_signals (void);
217
218 static struct thread_info *record_thread
219   (struct thread_db_info *info, struct thread_info *tp,
220    ptid_t ptid, const td_thrhandle_t *th_p, const td_thrinfo_t *ti_p);
221
222 /* Add the current inferior to the list of processes using libpthread.
223    Return a pointer to the newly allocated object that was added to
224    THREAD_DB_LIST.  HANDLE is the handle returned by dlopen'ing
225    LIBTHREAD_DB_SO.  */
226
227 static struct thread_db_info *
228 add_thread_db_info (void *handle)
229 {
230   struct thread_db_info *info = XCNEW (struct thread_db_info);
231
232   info->process_target = current_inferior ()->process_target ();
233   info->pid = inferior_ptid.pid ();
234   info->handle = handle;
235
236   /* The workaround works by reading from /proc/pid/status, so it is
237      disabled for core files.  */
238   if (target_has_execution ())
239     info->need_stale_parent_threads_check = 1;
240
241   info->next = thread_db_list;
242   thread_db_list = info;
243
244   return info;
245 }
246
247 /* Return the thread_db_info object representing the bookkeeping
248    related to process PID, if any; NULL otherwise.  */
249
250 static struct thread_db_info *
251 get_thread_db_info (process_stratum_target *targ, int pid)
252 {
253   struct thread_db_info *info;
254
255   for (info = thread_db_list; info; info = info->next)
256     if (targ == info->process_target && pid == info->pid)
257       return info;
258
259   return NULL;
260 }
261
262 static const char *thread_db_err_str (td_err_e err);
263
264 /* When PID has exited or has been detached, we no longer want to keep
265    track of it as using libpthread.  Call this function to discard
266    thread_db related info related to PID.  Note that this closes
267    LIBTHREAD_DB_SO's dlopen'ed handle.  */
268
269 static void
270 delete_thread_db_info (process_stratum_target *targ, int pid)
271 {
272   struct thread_db_info *info, *info_prev;
273
274   info_prev = NULL;
275
276   for (info = thread_db_list; info; info_prev = info, info = info->next)
277     if (targ == info->process_target && pid == info->pid)
278       break;
279
280   if (info == NULL)
281     return;
282
283   if (info->thread_agent != NULL && info->td_ta_delete_p != NULL)
284     {
285       td_err_e err = info->td_ta_delete_p (info->thread_agent);
286
287       if (err != TD_OK)
288         warning (_("Cannot deregister process %d from libthread_db: %s"),
289                  pid, thread_db_err_str (err));
290       info->thread_agent = NULL;
291     }
292
293   if (info->handle != NULL)
294     dlclose (info->handle);
295
296   xfree (info->filename);
297
298   if (info_prev)
299     info_prev->next = info->next;
300   else
301     thread_db_list = info->next;
302
303   xfree (info);
304 }
305
306 /* Use "struct private_thread_info" to cache thread state.  This is
307    a substantial optimization.  */
308
309 struct thread_db_thread_info : public private_thread_info
310 {
311   /* Flag set when we see a TD_DEATH event for this thread.  */
312   bool dying = false;
313
314   /* Cached thread state.  */
315   td_thrhandle_t th {};
316   thread_t tid {};
317 };
318
319 static thread_db_thread_info *
320 get_thread_db_thread_info (thread_info *thread)
321 {
322   return static_cast<thread_db_thread_info *> (thread->priv.get ());
323 }
324
325 static const char *
326 thread_db_err_str (td_err_e err)
327 {
328   static char buf[64];
329
330   switch (err)
331     {
332     case TD_OK:
333       return "generic 'call succeeded'";
334     case TD_ERR:
335       return "generic error";
336     case TD_NOTHR:
337       return "no thread to satisfy query";
338     case TD_NOSV:
339       return "no sync handle to satisfy query";
340     case TD_NOLWP:
341       return "no LWP to satisfy query";
342     case TD_BADPH:
343       return "invalid process handle";
344     case TD_BADTH:
345       return "invalid thread handle";
346     case TD_BADSH:
347       return "invalid synchronization handle";
348     case TD_BADTA:
349       return "invalid thread agent";
350     case TD_BADKEY:
351       return "invalid key";
352     case TD_NOMSG:
353       return "no event message for getmsg";
354     case TD_NOFPREGS:
355       return "FPU register set not available";
356     case TD_NOLIBTHREAD:
357       return "application not linked with libthread";
358     case TD_NOEVENT:
359       return "requested event is not supported";
360     case TD_NOCAPAB:
361       return "capability not available";
362     case TD_DBERR:
363       return "debugger service failed";
364     case TD_NOAPLIC:
365       return "operation not applicable to";
366     case TD_NOTSD:
367       return "no thread-specific data for this thread";
368     case TD_MALLOC:
369       return "malloc failed";
370     case TD_PARTIALREG:
371       return "only part of register set was written/read";
372     case TD_NOXREGS:
373       return "X register set not available for this thread";
374 #ifdef THREAD_DB_HAS_TD_NOTALLOC
375     case TD_NOTALLOC:
376       return "thread has not yet allocated TLS for given module";
377 #endif
378 #ifdef THREAD_DB_HAS_TD_VERSION
379     case TD_VERSION:
380       return "versions of libpthread and libthread_db do not match";
381 #endif
382 #ifdef THREAD_DB_HAS_TD_NOTLS
383     case TD_NOTLS:
384       return "there is no TLS segment in the given module";
385 #endif
386     default:
387       snprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err);
388       return buf;
389     }
390 }
391
392 /* Fetch the user-level thread id of PTID.  STOPPED is a stopped
393    thread that we can use to access memory.  */
394
395 static struct thread_info *
396 thread_from_lwp (thread_info *stopped, ptid_t ptid)
397 {
398   td_thrhandle_t th;
399   td_thrinfo_t ti;
400   td_err_e err;
401   struct thread_db_info *info;
402   struct thread_info *tp;
403
404   /* Just in case td_ta_map_lwp2thr doesn't initialize it completely.  */
405   th.th_unique = 0;
406
407   /* This ptid comes from linux-nat.c, which should always fill in the
408      LWP.  */
409   gdb_assert (ptid.lwp () != 0);
410
411   info = get_thread_db_info (stopped->inf->process_target (), ptid.pid ());
412
413   /* Access an lwp we know is stopped.  */
414   info->proc_handle.thread = stopped;
415   err = info->td_ta_map_lwp2thr_p (info->thread_agent, ptid.lwp (),
416                                    &th);
417   if (err != TD_OK)
418     error (_("Cannot find user-level thread for LWP %ld: %s"),
419            ptid.lwp (), thread_db_err_str (err));
420
421   err = info->td_thr_get_info_p (&th, &ti);
422   if (err != TD_OK)
423     error (_("thread_get_info_callback: cannot get thread info: %s"),
424            thread_db_err_str (err));
425
426   /* Fill the cache.  */
427   tp = find_thread_ptid (stopped->inf->process_target (), ptid);
428   return record_thread (info, tp, ptid, &th, &ti);
429 }
430 \f
431
432 /* See linux-nat.h.  */
433
434 int
435 thread_db_notice_clone (ptid_t parent, ptid_t child)
436 {
437   struct thread_db_info *info;
438
439   info = get_thread_db_info (linux_target, child.pid ());
440
441   if (info == NULL)
442     return 0;
443
444   thread_info *stopped = find_thread_ptid (linux_target, parent);
445
446   thread_from_lwp (stopped, child);
447
448   /* If we do not know about the main thread's pthread info yet, this
449      would be a good time to find it.  */
450   thread_from_lwp (stopped, parent);
451   return 1;
452 }
453
454 static void *
455 verbose_dlsym (void *handle, const char *name)
456 {
457   void *sym = dlsym (handle, name);
458   if (sym == NULL)
459     warning (_("Symbol \"%s\" not found in libthread_db: %s"),
460              name, dlerror ());
461   return sym;
462 }
463
464 /* Verify inferior's '\0'-terminated symbol VER_SYMBOL starts with "%d.%d" and
465    return 1 if this version is lower (and not equal) to
466    VER_MAJOR_MIN.VER_MINOR_MIN.  Return 0 in all other cases.  */
467
468 static int
469 inferior_has_bug (const char *ver_symbol, int ver_major_min, int ver_minor_min)
470 {
471   struct bound_minimal_symbol version_msym;
472   CORE_ADDR version_addr;
473   int got, retval = 0;
474
475   version_msym = lookup_minimal_symbol (ver_symbol, NULL, NULL);
476   if (version_msym.minsym == NULL)
477     return 0;
478
479   version_addr = BMSYMBOL_VALUE_ADDRESS (version_msym);
480   gdb::unique_xmalloc_ptr<char> version
481     = target_read_string (version_addr, 32, &got);
482   if (version != nullptr
483       && memchr (version.get (), 0, got) == version.get () + got - 1)
484     {
485       int major, minor;
486
487       retval = (sscanf (version.get (), "%d.%d", &major, &minor) == 2
488                 && (major < ver_major_min
489                     || (major == ver_major_min && minor < ver_minor_min)));
490     }
491
492   return retval;
493 }
494
495 /* Similar as thread_db_find_new_threads_1, but try to silently ignore errors
496    if appropriate.
497
498    Return 1 if the caller should abort libthread_db initialization.  Return 0
499    otherwise.  */
500
501 static int
502 thread_db_find_new_threads_silently (thread_info *stopped)
503 {
504
505   try
506     {
507       thread_db_find_new_threads_2 (stopped, true);
508     }
509
510   catch (const gdb_exception_error &except)
511     {
512       if (libthread_db_debug)
513         exception_fprintf (gdb_stdlog, except,
514                            "Warning: thread_db_find_new_threads_silently: ");
515
516       /* There is a bug fixed between nptl 2.6.1 and 2.7 by
517            commit 7d9d8bd18906fdd17364f372b160d7ab896ce909
518          where calls to td_thr_get_info fail with TD_ERR for statically linked
519          executables if td_thr_get_info is called before glibc has initialized
520          itself.
521          
522          If the nptl bug is NOT present in the inferior and still thread_db
523          reports an error return 1.  It means the inferior has corrupted thread
524          list and GDB should fall back only to LWPs.
525
526          If the nptl bug is present in the inferior return 0 to silently ignore
527          such errors, and let gdb enumerate threads again later.  In such case
528          GDB cannot properly display LWPs if the inferior thread list is
529          corrupted.  For core files it does not apply, no 'later enumeration'
530          is possible.  */
531
532       if (!target_has_execution () || !inferior_has_bug ("nptl_version", 2, 7))
533         {
534           exception_fprintf (gdb_stderr, except,
535                              _("Warning: couldn't activate thread debugging "
536                                "using libthread_db: "));
537           return 1;
538         }
539     }
540
541   return 0;
542 }
543
544 /* Lookup a library in which given symbol resides.
545    Note: this is looking in GDB process, not in the inferior.
546    Returns library name, or NULL.  */
547
548 static const char *
549 dladdr_to_soname (const void *addr)
550 {
551   Dl_info info;
552
553   if (dladdr (addr, &info) != 0)
554     return info.dli_fname;
555   return NULL;
556 }
557
558 /* State for check_thread_db_callback.  */
559
560 struct check_thread_db_info
561 {
562   /* The libthread_db under test.  */
563   struct thread_db_info *info;
564
565   /* True if progress should be logged.  */
566   bool log_progress;
567
568   /* True if the callback was called.  */
569   bool threads_seen;
570
571   /* Name of last libthread_db function called.  */
572   const char *last_call;
573
574   /* Value returned by last libthread_db call.  */
575   td_err_e last_result;
576 };
577
578 static struct check_thread_db_info *tdb_testinfo;
579
580 /* Callback for check_thread_db.  */
581
582 static int
583 check_thread_db_callback (const td_thrhandle_t *th, void *arg)
584 {
585   gdb_assert (tdb_testinfo != NULL);
586   tdb_testinfo->threads_seen = true;
587
588 #define LOG(fmt, args...)                                               \
589   do                                                                    \
590     {                                                                   \
591       if (tdb_testinfo->log_progress)                                   \
592         {                                                               \
593           debug_printf (fmt, ## args);                                  \
594           gdb_flush (gdb_stdlog);                                       \
595         }                                                               \
596     }                                                                   \
597   while (0)
598
599 #define CHECK_1(expr, args...)                                          \
600   do                                                                    \
601     {                                                                   \
602       if (!(expr))                                                      \
603         {                                                               \
604           LOG (" ... FAIL!\n");                                         \
605           error (args);                                                 \
606         }                                                               \
607     }                                                                   \
608   while (0)
609
610 #define CHECK(expr)                                                     \
611   CHECK_1 (expr, "(%s) == false", #expr)
612
613 #define CALL_UNCHECKED(func, args...)                                   \
614   do                                                                    \
615     {                                                                   \
616       tdb_testinfo->last_call = #func;                                  \
617       tdb_testinfo->last_result                                         \
618         = tdb_testinfo->info->func ## _p (args);                        \
619     }                                                                   \
620   while (0)
621
622 #define CHECK_CALL()                                                    \
623   CHECK_1 (tdb_testinfo->last_result == TD_OK,                          \
624            _("%s failed: %s"),                                          \
625            tdb_testinfo->last_call,                                     \
626            thread_db_err_str (tdb_testinfo->last_result))               \
627
628 #define CALL(func, args...)                                             \
629   do                                                                    \
630     {                                                                   \
631       CALL_UNCHECKED (func, args);                                      \
632       CHECK_CALL ();                                                    \
633     }                                                                   \
634   while (0)
635
636   LOG ("  Got thread");
637
638   /* Check td_ta_thr_iter passed consistent arguments.  */
639   CHECK (th != NULL);
640   CHECK (arg == (void *) tdb_testinfo);
641   CHECK (th->th_ta_p == tdb_testinfo->info->thread_agent);
642
643   LOG (" %s", core_addr_to_string_nz ((CORE_ADDR) th->th_unique));
644
645   /* Check td_thr_get_info.  */
646   td_thrinfo_t ti;
647   CALL (td_thr_get_info, th, &ti);
648
649   LOG (" => %d", ti.ti_lid);
650
651   CHECK (ti.ti_ta_p == th->th_ta_p);
652   CHECK (ti.ti_tid == (thread_t) th->th_unique);
653
654   /* Check td_ta_map_lwp2thr.  */
655   td_thrhandle_t th2;
656   memset (&th2, 23, sizeof (td_thrhandle_t));
657   CALL_UNCHECKED (td_ta_map_lwp2thr, th->th_ta_p, ti.ti_lid, &th2);
658
659   if (tdb_testinfo->last_result == TD_ERR && !target_has_execution ())
660     {
661       /* Some platforms require execution for td_ta_map_lwp2thr.  */
662       LOG (_("; can't map_lwp2thr"));
663     }
664   else
665     {
666       CHECK_CALL ();
667
668       LOG (" => %s", core_addr_to_string_nz ((CORE_ADDR) th2.th_unique));
669
670       CHECK (memcmp (th, &th2, sizeof (td_thrhandle_t)) == 0);
671     }
672
673   /* Attempt TLS access.  Assuming errno is TLS, this calls
674      thread_db_get_thread_local_address, which in turn calls
675      td_thr_tls_get_addr for live inferiors or td_thr_tlsbase
676      for core files.  This test is skipped if the thread has
677      not been recorded; proceeding in that case would result
678      in the test having the side-effect of noticing threads
679      which seems wrong.
680
681      Note that in glibc's libthread_db td_thr_tls_get_addr is
682      a thin wrapper around td_thr_tlsbase; this check always
683      hits the bulk of the code.
684
685      Note also that we don't actually check any libthread_db
686      calls are made, we just assume they were; future changes
687      to how GDB accesses TLS could result in this passing
688      without exercising the calls it's supposed to.  */
689   ptid_t ptid = ptid_t (tdb_testinfo->info->pid, ti.ti_lid, 0);
690   thread_info *thread_info = find_thread_ptid (linux_target, ptid);
691   if (thread_info != NULL && thread_info->priv != NULL)
692     {
693       LOG ("; errno");
694
695       scoped_restore_current_thread restore_current_thread;
696       switch_to_thread (thread_info);
697
698       expression_up expr = parse_expression ("(int) errno");
699       struct value *val = evaluate_expression (expr.get ());
700
701       if (tdb_testinfo->log_progress)
702         {
703           struct value_print_options opts;
704
705           get_user_print_options (&opts);
706           LOG (" = ");
707           value_print (val, gdb_stdlog, &opts);
708         }
709     }
710
711   LOG (" ... OK\n");
712
713 #undef LOG
714 #undef CHECK_1
715 #undef CHECK
716 #undef CALL_UNCHECKED
717 #undef CHECK_CALL
718 #undef CALL
719
720   return 0;
721 }
722
723 /* Run integrity checks on the dlopen()ed libthread_db described by
724    INFO.  Returns true on success, displays a warning and returns
725    false on failure.  Logs progress messages to gdb_stdlog during
726    the test if LOG_PROGRESS is true.  */
727
728 static bool
729 check_thread_db (struct thread_db_info *info, bool log_progress)
730 {
731   bool test_passed = true;
732
733   if (log_progress)
734     debug_printf (_("Running libthread_db integrity checks:\n"));
735
736   /* GDB avoids using td_ta_thr_iter wherever possible (see comment
737      in try_thread_db_load_1 below) so in order to test it we may
738      have to locate it ourselves.  */
739   td_ta_thr_iter_ftype *td_ta_thr_iter_p = info->td_ta_thr_iter_p;
740   if (td_ta_thr_iter_p == NULL)
741     {
742       void *thr_iter = verbose_dlsym (info->handle, "td_ta_thr_iter");
743       if (thr_iter == NULL)
744         return 0;
745
746       td_ta_thr_iter_p = (td_ta_thr_iter_ftype *) thr_iter;
747     }
748
749   /* Set up the test state we share with the callback.  */
750   gdb_assert (tdb_testinfo == NULL);
751   struct check_thread_db_info tdb_testinfo_buf;
752   tdb_testinfo = &tdb_testinfo_buf;
753
754   memset (tdb_testinfo, 0, sizeof (struct check_thread_db_info));
755   tdb_testinfo->info = info;
756   tdb_testinfo->log_progress = log_progress;
757
758   /* td_ta_thr_iter shouldn't be used on running processes.  Note that
759      it's possible the inferior will stop midway through modifying one
760      of its thread lists, in which case the check will spuriously
761      fail.  */
762   linux_stop_and_wait_all_lwps ();
763
764   try
765     {
766       td_err_e err = td_ta_thr_iter_p (info->thread_agent,
767                                        check_thread_db_callback,
768                                        tdb_testinfo,
769                                        TD_THR_ANY_STATE,
770                                        TD_THR_LOWEST_PRIORITY,
771                                        TD_SIGNO_MASK,
772                                        TD_THR_ANY_USER_FLAGS);
773
774       if (err != TD_OK)
775         error (_("td_ta_thr_iter failed: %s"), thread_db_err_str (err));
776
777       if (!tdb_testinfo->threads_seen)
778         error (_("no threads seen"));
779     }
780   catch (const gdb_exception_error &except)
781     {
782       if (warning_pre_print)
783         fputs_unfiltered (warning_pre_print, gdb_stderr);
784
785       exception_fprintf (gdb_stderr, except,
786                          _("libthread_db integrity checks failed: "));
787
788       test_passed = false;
789     }
790
791   if (test_passed && log_progress)
792     debug_printf (_("libthread_db integrity checks passed.\n"));
793
794   tdb_testinfo = NULL;
795
796   linux_unstop_all_lwps ();
797
798   return test_passed;
799 }
800
801 /* Attempt to initialize dlopen()ed libthread_db, described by INFO.
802    Return true on success.
803    Failure could happen if libthread_db does not have symbols we expect,
804    or when it refuses to work with the current inferior (e.g. due to
805    version mismatch between libthread_db and libpthread).  */
806
807 static bool
808 try_thread_db_load_1 (struct thread_db_info *info)
809 {
810   td_err_e err;
811
812   /* Initialize pointers to the dynamic library functions we will use.
813      Essential functions first.  */
814
815 #define TDB_VERBOSE_DLSYM(info, func)                   \
816   info->func ## _p = (func ## _ftype *) verbose_dlsym (info->handle, #func)
817
818 #define TDB_DLSYM(info, func)                   \
819   info->func ## _p = (func ## _ftype *) dlsym (info->handle, #func)
820
821 #define CHK(a)                                                          \
822   do                                                                    \
823     {                                                                   \
824       if ((a) == NULL)                                                  \
825         return false;                                                   \
826   } while (0)
827
828   CHK (TDB_VERBOSE_DLSYM (info, td_init));
829
830   err = info->td_init_p ();
831   if (err != TD_OK)
832     {
833       warning (_("Cannot initialize libthread_db: %s"),
834                thread_db_err_str (err));
835       return false;
836     }
837
838   CHK (TDB_VERBOSE_DLSYM (info, td_ta_new));
839
840   /* Initialize the structure that identifies the child process.  */
841   info->proc_handle.thread = inferior_thread ();
842
843   /* Now attempt to open a connection to the thread library.  */
844   err = info->td_ta_new_p (&info->proc_handle, &info->thread_agent);
845   if (err != TD_OK)
846     {
847       if (libthread_db_debug)
848         fprintf_unfiltered (gdb_stdlog, _("td_ta_new failed: %s\n"),
849                             thread_db_err_str (err));
850       else
851         switch (err)
852           {
853             case TD_NOLIBTHREAD:
854 #ifdef THREAD_DB_HAS_TD_VERSION
855             case TD_VERSION:
856 #endif
857               /* The errors above are not unexpected and silently ignored:
858                  they just mean we haven't found correct version of
859                  libthread_db yet.  */
860               break;
861             default:
862               warning (_("td_ta_new failed: %s"), thread_db_err_str (err));
863           }
864       return false;
865     }
866
867   /* These are essential.  */
868   CHK (TDB_VERBOSE_DLSYM (info, td_ta_map_lwp2thr));
869   CHK (TDB_VERBOSE_DLSYM (info, td_thr_get_info));
870
871   /* These are not essential.  */
872   TDB_DLSYM (info, td_thr_tls_get_addr);
873   TDB_DLSYM (info, td_thr_tlsbase);
874   TDB_DLSYM (info, td_ta_delete);
875
876   /* It's best to avoid td_ta_thr_iter if possible.  That walks data
877      structures in the inferior's address space that may be corrupted,
878      or, if the target is running, may change while we walk them.  If
879      there's execution (and /proc is mounted), then we're already
880      attached to all LWPs.  Use thread_from_lwp, which uses
881      td_ta_map_lwp2thr instead, which does not walk the thread list.
882
883      td_ta_map_lwp2thr uses ps_get_thread_area, but we can't use that
884      currently on core targets, as it uses ptrace directly.  */
885   if (target_has_execution ()
886       && linux_proc_task_list_dir_exists (inferior_ptid.pid ()))
887     info->td_ta_thr_iter_p = NULL;
888   else
889     CHK (TDB_VERBOSE_DLSYM (info, td_ta_thr_iter));
890
891 #undef TDB_VERBOSE_DLSYM
892 #undef TDB_DLSYM
893 #undef CHK
894
895   /* Run integrity checks if requested.  */
896   if (check_thread_db_on_load)
897     {
898       if (!check_thread_db (info, libthread_db_debug))
899         return false;
900     }
901
902   if (info->td_ta_thr_iter_p == NULL)
903     {
904       struct lwp_info *lp;
905       int pid = inferior_ptid.pid ();
906       thread_info *curr_thread = inferior_thread ();
907
908       linux_stop_and_wait_all_lwps ();
909
910       ALL_LWPS (lp)
911         if (lp->ptid.pid () == pid)
912           thread_from_lwp (curr_thread, lp->ptid);
913
914       linux_unstop_all_lwps ();
915     }
916   else if (thread_db_find_new_threads_silently (inferior_thread ()) != 0)
917     {
918       /* Even if libthread_db initializes, if the thread list is
919          corrupted, we'd not manage to list any threads.  Better reject this
920          thread_db, and fall back to at least listing LWPs.  */
921       return false;
922     }
923
924   printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
925
926   if (*libthread_db_search_path || libthread_db_debug)
927     {
928       struct ui_file *file;
929       const char *library;
930
931       library = dladdr_to_soname ((const void *) *info->td_ta_new_p);
932       if (library == NULL)
933         library = LIBTHREAD_DB_SO;
934
935       /* If we'd print this to gdb_stdout when debug output is
936          disabled, still print it to gdb_stdout if debug output is
937          enabled.  User visible output should not depend on debug
938          settings.  */
939       file = *libthread_db_search_path != '\0' ? gdb_stdout : gdb_stdlog;
940       fprintf_unfiltered (file,
941                           _("Using host libthread_db library \"%ps\".\n"),
942                           styled_string (file_name_style.style (), library));
943     }
944
945   /* The thread library was detected.  Activate the thread_db target
946      for this process.  */
947   current_inferior ()->push_target (&the_thread_db_target);
948   return true;
949 }
950
951 /* Attempt to use LIBRARY as libthread_db.  LIBRARY could be absolute,
952    relative, or just LIBTHREAD_DB.  */
953
954 static bool
955 try_thread_db_load (const char *library, bool check_auto_load_safe)
956 {
957   void *handle;
958   struct thread_db_info *info;
959
960   if (libthread_db_debug)
961     fprintf_unfiltered (gdb_stdlog,
962                         _("Trying host libthread_db library: %s.\n"),
963                         library);
964
965   if (check_auto_load_safe)
966     {
967       if (access (library, R_OK) != 0)
968         {
969           /* Do not print warnings by file_is_auto_load_safe if the library does
970              not exist at this place.  */
971           if (libthread_db_debug)
972             fprintf_unfiltered (gdb_stdlog, _("open failed: %s.\n"),
973                                 safe_strerror (errno));
974           return false;
975         }
976
977       auto_load_debug_printf
978         ("Loading libthread-db library \"%s\" from explicit directory.",
979          library);
980
981       if (!file_is_auto_load_safe (library))
982         return false;
983     }
984
985   handle = dlopen (library, RTLD_NOW);
986   if (handle == NULL)
987     {
988       if (libthread_db_debug)
989         fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
990       return false;
991     }
992
993   if (libthread_db_debug && strchr (library, '/') == NULL)
994     {
995       void *td_init;
996
997       td_init = dlsym (handle, "td_init");
998       if (td_init != NULL)
999         {
1000           const char *const libpath = dladdr_to_soname (td_init);
1001
1002           if (libpath != NULL)
1003             fprintf_unfiltered (gdb_stdlog, _("Host %s resolved to: %s.\n"),
1004                                library, libpath);
1005         }
1006     }
1007
1008   info = add_thread_db_info (handle);
1009
1010   /* Do not save system library name, that one is always trusted.  */
1011   if (strchr (library, '/') != NULL)
1012     info->filename = gdb_realpath (library).release ();
1013
1014   if (try_thread_db_load_1 (info))
1015     return true;
1016
1017   /* This library "refused" to work on current inferior.  */
1018   delete_thread_db_info (current_inferior ()->process_target (),
1019                          inferior_ptid.pid ());
1020   return false;
1021 }
1022
1023 /* Subroutine of try_thread_db_load_from_pdir to simplify it.
1024    Try loading libthread_db in directory(OBJ)/SUBDIR.
1025    SUBDIR may be NULL.  It may also be something like "../lib64".
1026    The result is true for success.  */
1027
1028 static bool
1029 try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
1030 {
1031   const char *obj_name = objfile_name (obj);
1032
1033   if (obj_name[0] != '/')
1034     {
1035       warning (_("Expected absolute pathname for libpthread in the"
1036                  " inferior, but got %ps."),
1037                styled_string (file_name_style.style (), obj_name));
1038       return false;
1039     }
1040
1041   std::string path = obj_name;
1042   size_t cp = path.rfind ('/');
1043   /* This should at minimum hit the first character.  */
1044   gdb_assert (cp != std::string::npos);
1045   path.resize (cp + 1);
1046   if (subdir != NULL)
1047     path = path + subdir + "/";
1048   path += LIBTHREAD_DB_SO;
1049
1050   return try_thread_db_load (path.c_str (), true);
1051 }
1052
1053 /* Handle $pdir in libthread-db-search-path.
1054    Look for libthread_db in directory(libpthread)/SUBDIR.
1055    SUBDIR may be NULL.  It may also be something like "../lib64".
1056    The result is true for success.  */
1057
1058 static bool
1059 try_thread_db_load_from_pdir (const char *subdir)
1060 {
1061   if (!auto_load_thread_db)
1062     return false;
1063
1064   for (objfile *obj : current_program_space->objfiles ())
1065     if (libpthread_name_p (objfile_name (obj)))
1066       {
1067         if (try_thread_db_load_from_pdir_1 (obj, subdir))
1068           return true;
1069
1070         /* We may have found the separate-debug-info version of
1071            libpthread, and it may live in a directory without a matching
1072            libthread_db.  */
1073         if (obj->separate_debug_objfile_backlink != NULL)
1074           return try_thread_db_load_from_pdir_1 (obj->separate_debug_objfile_backlink,
1075                                                  subdir);
1076
1077         return false;
1078       }
1079
1080   return false;
1081 }
1082
1083 /* Handle $sdir in libthread-db-search-path.
1084    Look for libthread_db in the system dirs, or wherever a plain
1085    dlopen(file_without_path) will look.
1086    The result is true for success.  */
1087
1088 static bool
1089 try_thread_db_load_from_sdir (void)
1090 {
1091   return try_thread_db_load (LIBTHREAD_DB_SO, false);
1092 }
1093
1094 /* Try to load libthread_db from directory DIR of length DIR_LEN.
1095    The result is true for success.  */
1096
1097 static bool
1098 try_thread_db_load_from_dir (const char *dir, size_t dir_len)
1099 {
1100   if (!auto_load_thread_db)
1101     return false;
1102
1103   std::string path = std::string (dir, dir_len) + "/" + LIBTHREAD_DB_SO;
1104
1105   return try_thread_db_load (path.c_str (), true);
1106 }
1107
1108 /* Search libthread_db_search_path for libthread_db which "agrees"
1109    to work on current inferior.
1110    The result is true for success.  */
1111
1112 static bool
1113 thread_db_load_search (void)
1114 {
1115   bool rc = false;
1116
1117   std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
1118     = dirnames_to_char_ptr_vec (libthread_db_search_path);
1119
1120   for (const gdb::unique_xmalloc_ptr<char> &this_dir_up : dir_vec)
1121     {
1122       const char *this_dir = this_dir_up.get ();
1123       const int pdir_len = sizeof ("$pdir") - 1;
1124       size_t this_dir_len;
1125
1126       this_dir_len = strlen (this_dir);
1127
1128       if (strncmp (this_dir, "$pdir", pdir_len) == 0
1129           && (this_dir[pdir_len] == '\0'
1130               || this_dir[pdir_len] == '/'))
1131         {
1132           const char *subdir = NULL;
1133
1134           std::string subdir_holder;
1135           if (this_dir[pdir_len] == '/')
1136             {
1137               subdir_holder = std::string (this_dir + pdir_len + 1);
1138               subdir = subdir_holder.c_str ();
1139             }
1140           rc = try_thread_db_load_from_pdir (subdir);
1141           if (rc)
1142             break;
1143         }
1144       else if (strcmp (this_dir, "$sdir") == 0)
1145         {
1146           if (try_thread_db_load_from_sdir ())
1147             {
1148               rc = 1;
1149               break;
1150             }
1151         }
1152       else
1153         {
1154           if (try_thread_db_load_from_dir (this_dir, this_dir_len))
1155             {
1156               rc = 1;
1157               break;
1158             }
1159         }
1160     }
1161
1162   if (libthread_db_debug)
1163     fprintf_unfiltered (gdb_stdlog,
1164                         _("thread_db_load_search returning %d\n"), rc);
1165   return rc;
1166 }
1167
1168 /* Return true if the inferior has a libpthread.  */
1169
1170 static bool
1171 has_libpthread (void)
1172 {
1173   for (objfile *obj : current_program_space->objfiles ())
1174     if (libpthread_name_p (objfile_name (obj)))
1175       return true;
1176
1177   return false;
1178 }
1179
1180 /* Attempt to load and initialize libthread_db.
1181    Return 1 on success.  */
1182
1183 static bool
1184 thread_db_load (void)
1185 {
1186   struct thread_db_info *info;
1187
1188   info = get_thread_db_info (current_inferior ()->process_target (),
1189                              inferior_ptid.pid ());
1190
1191   if (info != NULL)
1192     return true;
1193
1194   /* Don't attempt to use thread_db on executables not running
1195      yet.  */
1196   if (!target_has_registers ())
1197     return false;
1198
1199   /* Don't attempt to use thread_db for remote targets.  */
1200   if (!(target_can_run () || core_bfd))
1201     return false;
1202
1203   if (thread_db_load_search ())
1204     return true;
1205
1206   /* We couldn't find a libthread_db.
1207      If the inferior has a libpthread warn the user.  */
1208   if (has_libpthread ())
1209     {
1210       warning (_("Unable to find libthread_db matching inferior's thread"
1211                  " library, thread debugging will not be available."));
1212       return false;
1213     }
1214
1215   /* Either this executable isn't using libpthread at all, or it is
1216      statically linked.  Since we can't easily distinguish these two cases,
1217      no warning is issued.  */
1218   return false;
1219 }
1220
1221 static void
1222 check_thread_signals (void)
1223 {
1224   if (!thread_signals)
1225     {
1226       int i;
1227
1228       for (i = 0; i < lin_thread_get_thread_signal_num (); i++)
1229         {
1230           int sig = lin_thread_get_thread_signal (i);
1231           signal_stop_update (gdb_signal_from_host (sig), 0);
1232           signal_print_update (gdb_signal_from_host (sig), 0);
1233           thread_signals = 1;
1234         }
1235     }
1236 }
1237
1238 /* Check whether thread_db is usable.  This function is called when
1239    an inferior is created (or otherwise acquired, e.g. attached to)
1240    and when new shared libraries are loaded into a running process.  */
1241
1242 void
1243 check_for_thread_db (void)
1244 {
1245   /* Do nothing if we couldn't load libthread_db.so.1.  */
1246   if (!thread_db_load ())
1247     return;
1248 }
1249
1250 /* This function is called via the new_objfile observer.  */
1251
1252 static void
1253 thread_db_new_objfile (struct objfile *objfile)
1254 {
1255   /* This observer must always be called with inferior_ptid set
1256      correctly.  */
1257
1258   if (objfile != NULL
1259       /* libpthread with separate debug info has its debug info file already
1260          loaded (and notified without successful thread_db initialization)
1261          the time gdb::observers::new_objfile.notify is called for the library itself.
1262          Static executables have their separate debug info loaded already
1263          before the inferior has started.  */
1264       && objfile->separate_debug_objfile_backlink == NULL
1265       /* Only check for thread_db if we loaded libpthread,
1266          or if this is the main symbol file.
1267          We need to check OBJF_MAINLINE to handle the case of debugging
1268          a statically linked executable AND the symbol file is specified AFTER
1269          the exec file is loaded (e.g., gdb -c core ; file foo).
1270          For dynamically linked executables, libpthread can be near the end
1271          of the list of shared libraries to load, and in an app of several
1272          thousand shared libraries, this can otherwise be painful.  */
1273       && ((objfile->flags & OBJF_MAINLINE) != 0
1274           || libpthread_name_p (objfile_name (objfile))))
1275     check_for_thread_db ();
1276 }
1277
1278 static void
1279 check_pid_namespace_match (inferior *inf)
1280 {
1281   /* Check is only relevant for local targets targets.  */
1282   if (target_can_run ())
1283     {
1284       /* If the child is in a different PID namespace, its idea of its
1285          PID will differ from our idea of its PID.  When we scan the
1286          child's thread list, we'll mistakenly think it has no threads
1287          since the thread PID fields won't match the PID we give to
1288          libthread_db.  */
1289       if (!linux_ns_same (inf->pid, LINUX_NS_PID))
1290         {
1291           warning (_ ("Target and debugger are in different PID "
1292                       "namespaces; thread lists and other data are "
1293                       "likely unreliable.  "
1294                       "Connect to gdbserver inside the container."));
1295         }
1296     }
1297 }
1298
1299 /* This function is called via the inferior_created observer.
1300    This handles the case of debugging statically linked executables.  */
1301
1302 static void
1303 thread_db_inferior_created (inferior *inf)
1304 {
1305   check_pid_namespace_match (inf);
1306   check_for_thread_db ();
1307 }
1308
1309 /* Update the thread's state (what's displayed in "info threads"),
1310    from libthread_db thread state information.  */
1311
1312 static void
1313 update_thread_state (thread_db_thread_info *priv,
1314                      const td_thrinfo_t *ti_p)
1315 {
1316   priv->dying = (ti_p->ti_state == TD_THR_UNKNOWN
1317                  || ti_p->ti_state == TD_THR_ZOMBIE);
1318 }
1319
1320 /* Record a new thread in GDB's thread list.  Creates the thread's
1321    private info.  If TP is NULL or TP is marked as having exited,
1322    creates a new thread.  Otherwise, uses TP.  */
1323
1324 static struct thread_info *
1325 record_thread (struct thread_db_info *info,
1326                struct thread_info *tp,
1327                ptid_t ptid, const td_thrhandle_t *th_p,
1328                const td_thrinfo_t *ti_p)
1329 {
1330   /* A thread ID of zero may mean the thread library has not
1331      initialized yet.  Leave private == NULL until the thread library
1332      has initialized.  */
1333   if (ti_p->ti_tid == 0)
1334     return tp;
1335
1336   /* Construct the thread's private data.  */
1337   thread_db_thread_info *priv = new thread_db_thread_info;
1338
1339   priv->th = *th_p;
1340   priv->tid = ti_p->ti_tid;
1341   update_thread_state (priv, ti_p);
1342
1343   /* Add the thread to GDB's thread list.  If we already know about a
1344      thread with this PTID, but it's marked exited, then the kernel
1345      reused the tid of an old thread.  */
1346   if (tp == NULL || tp->state == THREAD_EXITED)
1347     tp = add_thread_with_info (info->process_target, ptid, priv);
1348   else
1349     tp->priv.reset (priv);
1350
1351   if (target_has_execution ())
1352     check_thread_signals ();
1353
1354   return tp;
1355 }
1356
1357 void
1358 thread_db_target::detach (inferior *inf, int from_tty)
1359 {
1360   delete_thread_db_info (inf->process_target (), inf->pid);
1361
1362   beneath ()->detach (inf, from_tty);
1363
1364   /* NOTE: From this point on, inferior_ptid is null_ptid.  */
1365
1366   /* Detach the thread_db target from this inferior.  */
1367   inf->unpush_target (this);
1368 }
1369
1370 ptid_t
1371 thread_db_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
1372                         target_wait_flags options)
1373 {
1374   struct thread_db_info *info;
1375
1376   process_stratum_target *beneath
1377     = as_process_stratum_target (this->beneath ());
1378
1379   ptid = beneath->wait (ptid, ourstatus, options);
1380
1381   switch (ourstatus->kind)
1382     {
1383     case TARGET_WAITKIND_IGNORE:
1384     case TARGET_WAITKIND_EXITED:
1385     case TARGET_WAITKIND_THREAD_EXITED:
1386     case TARGET_WAITKIND_SIGNALLED:
1387       return ptid;
1388     }
1389
1390   info = get_thread_db_info (beneath, ptid.pid ());
1391
1392   /* If this process isn't using thread_db, we're done.  */
1393   if (info == NULL)
1394     return ptid;
1395
1396   if (ourstatus->kind == TARGET_WAITKIND_EXECD)
1397     {
1398       /* New image, it may or may not end up using thread_db.  Assume
1399          not unless we find otherwise.  */
1400       delete_thread_db_info (beneath, ptid.pid ());
1401       current_inferior ()->unpush_target (this);
1402
1403       return ptid;
1404     }
1405
1406   /* Fill in the thread's user-level thread id and status.  */
1407   thread_from_lwp (find_thread_ptid (beneath, ptid), ptid);
1408
1409   return ptid;
1410 }
1411
1412 void
1413 thread_db_target::mourn_inferior ()
1414 {
1415   process_stratum_target *target_beneath
1416     = as_process_stratum_target (this->beneath ());
1417
1418   delete_thread_db_info (target_beneath, inferior_ptid.pid ());
1419
1420   target_beneath->mourn_inferior ();
1421
1422   /* Detach the thread_db target from this inferior.  */
1423   current_inferior ()->unpush_target (this);
1424 }
1425
1426 struct callback_data
1427 {
1428   struct thread_db_info *info;
1429   int new_threads;
1430 };
1431
1432 static int
1433 find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
1434 {
1435   td_thrinfo_t ti;
1436   td_err_e err;
1437   struct thread_info *tp;
1438   struct callback_data *cb_data = (struct callback_data *) data;
1439   struct thread_db_info *info = cb_data->info;
1440
1441   err = info->td_thr_get_info_p (th_p, &ti);
1442   if (err != TD_OK)
1443     error (_("find_new_threads_callback: cannot get thread info: %s"),
1444            thread_db_err_str (err));
1445
1446   if (ti.ti_lid == -1)
1447     {
1448       /* A thread with kernel thread ID -1 is either a thread that
1449          exited and was joined, or a thread that is being created but
1450          hasn't started yet, and that is reusing the tcb/stack of a
1451          thread that previously exited and was joined.  (glibc marks
1452          terminated and joined threads with kernel thread ID -1.  See
1453          glibc PR17707.  */
1454       if (libthread_db_debug)
1455         fprintf_unfiltered (gdb_stdlog,
1456                             "thread_db: skipping exited and "
1457                             "joined thread (0x%lx)\n",
1458                             (unsigned long) ti.ti_tid);
1459       return 0;
1460     }
1461
1462   if (ti.ti_tid == 0)
1463     {
1464       /* A thread ID of zero means that this is the main thread, but
1465          glibc has not yet initialized thread-local storage and the
1466          pthread library.  We do not know what the thread's TID will
1467          be yet.  */
1468
1469       /* In that case, we're not stopped in a fork syscall and don't
1470          need this glibc bug workaround.  */
1471       info->need_stale_parent_threads_check = 0;
1472
1473       return 0;
1474     }
1475
1476   /* Ignore stale parent threads, caused by glibc/BZ5983.  This is a
1477      bit expensive, as it needs to open /proc/pid/status, so try to
1478      avoid doing the work if we know we don't have to.  */
1479   if (info->need_stale_parent_threads_check)
1480     {
1481       int tgid = linux_proc_get_tgid (ti.ti_lid);
1482
1483       if (tgid != -1 && tgid != info->pid)
1484         return 0;
1485     }
1486
1487   ptid_t ptid (info->pid, ti.ti_lid);
1488   tp = find_thread_ptid (info->process_target, ptid);
1489   if (tp == NULL || tp->priv == NULL)
1490     record_thread (info, tp, ptid, th_p, &ti);
1491
1492   return 0;
1493 }
1494
1495 /* Helper for thread_db_find_new_threads_2.
1496    Returns number of new threads found.  */
1497
1498 static int
1499 find_new_threads_once (struct thread_db_info *info, int iteration,
1500                        td_err_e *errp)
1501 {
1502   struct callback_data data;
1503   td_err_e err = TD_ERR;
1504
1505   data.info = info;
1506   data.new_threads = 0;
1507
1508   /* See comment in thread_db_update_thread_list.  */
1509   gdb_assert (info->td_ta_thr_iter_p != NULL);
1510
1511   try
1512     {
1513       /* Iterate over all user-space threads to discover new threads.  */
1514       err = info->td_ta_thr_iter_p (info->thread_agent,
1515                                     find_new_threads_callback,
1516                                     &data,
1517                                     TD_THR_ANY_STATE,
1518                                     TD_THR_LOWEST_PRIORITY,
1519                                     TD_SIGNO_MASK,
1520                                     TD_THR_ANY_USER_FLAGS);
1521     }
1522   catch (const gdb_exception_error &except)
1523     {
1524       if (libthread_db_debug)
1525         {
1526           exception_fprintf (gdb_stdlog, except,
1527                              "Warning: find_new_threads_once: ");
1528         }
1529     }
1530
1531   if (libthread_db_debug)
1532     {
1533       fprintf_unfiltered (gdb_stdlog,
1534                           _("Found %d new threads in iteration %d.\n"),
1535                           data.new_threads, iteration);
1536     }
1537
1538   if (errp != NULL)
1539     *errp = err;
1540
1541   return data.new_threads;
1542 }
1543
1544 /* Search for new threads, accessing memory through stopped thread
1545    PTID.  If UNTIL_NO_NEW is true, repeat searching until several
1546    searches in a row do not discover any new threads.  */
1547
1548 static void
1549 thread_db_find_new_threads_2 (thread_info *stopped, bool until_no_new)
1550 {
1551   td_err_e err = TD_OK;
1552   struct thread_db_info *info;
1553   int i, loop;
1554
1555   info = get_thread_db_info (stopped->inf->process_target (),
1556                              stopped->ptid.pid ());
1557
1558   /* Access an lwp we know is stopped.  */
1559   info->proc_handle.thread = stopped;
1560
1561   if (until_no_new)
1562     {
1563       /* Require 4 successive iterations which do not find any new threads.
1564          The 4 is a heuristic: there is an inherent race here, and I have
1565          seen that 2 iterations in a row are not always sufficient to
1566          "capture" all threads.  */
1567       for (i = 0, loop = 0; loop < 4 && err == TD_OK; ++i, ++loop)
1568         if (find_new_threads_once (info, i, &err) != 0)
1569           {
1570             /* Found some new threads.  Restart the loop from beginning.  */
1571             loop = -1;
1572           }
1573     }
1574   else
1575     find_new_threads_once (info, 0, &err);
1576
1577   if (err != TD_OK)
1578     error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1579 }
1580
1581 static void
1582 thread_db_find_new_threads_1 (thread_info *stopped)
1583 {
1584   thread_db_find_new_threads_2 (stopped, 0);
1585 }
1586
1587 /* Implement the to_update_thread_list target method for this
1588    target.  */
1589
1590 void
1591 thread_db_target::update_thread_list ()
1592 {
1593   struct thread_db_info *info;
1594
1595   prune_threads ();
1596
1597   for (inferior *inf : all_inferiors ())
1598     {
1599       if (inf->pid == 0)
1600         continue;
1601
1602       info = get_thread_db_info (inf->process_target (), inf->pid);
1603       if (info == NULL)
1604         continue;
1605
1606       thread_info *thread = any_live_thread_of_inferior (inf);
1607       if (thread == NULL || thread->executing)
1608         continue;
1609
1610       /* It's best to avoid td_ta_thr_iter if possible.  That walks
1611          data structures in the inferior's address space that may be
1612          corrupted, or, if the target is running, the list may change
1613          while we walk it.  In the latter case, it's possible that a
1614          thread exits just at the exact time that causes GDB to get
1615          stuck in an infinite loop.  To avoid pausing all threads
1616          whenever the core wants to refresh the thread list, we
1617          instead use thread_from_lwp immediately when we see an LWP
1618          stop.  That uses thread_db entry points that do not walk
1619          libpthread's thread list, so should be safe, as well as more
1620          efficient.  */
1621       if (thread->inf->has_execution ())
1622         continue;
1623
1624       thread_db_find_new_threads_1 (thread);
1625     }
1626
1627   /* Give the beneath target a chance to do extra processing.  */
1628   this->beneath ()->update_thread_list ();
1629 }
1630
1631 std::string
1632 thread_db_target::pid_to_str (ptid_t ptid)
1633 {
1634   thread_info *thread_info = find_thread_ptid (current_inferior (), ptid);
1635
1636   if (thread_info != NULL && thread_info->priv != NULL)
1637     {
1638       thread_db_thread_info *priv = get_thread_db_thread_info (thread_info);
1639
1640       return string_printf ("Thread 0x%lx (LWP %ld)",
1641                             (unsigned long) priv->tid, ptid.lwp ());
1642     }
1643
1644   return beneath ()->pid_to_str (ptid);
1645 }
1646
1647 /* Return a string describing the state of the thread specified by
1648    INFO.  */
1649
1650 const char *
1651 thread_db_target::extra_thread_info (thread_info *info)
1652 {
1653   if (info->priv == NULL)
1654     return NULL;
1655
1656   thread_db_thread_info *priv = get_thread_db_thread_info (info);
1657
1658   if (priv->dying)
1659     return "Exiting";
1660
1661   return NULL;
1662 }
1663
1664 /* Return pointer to the thread_info struct which corresponds to
1665    THREAD_HANDLE (having length HANDLE_LEN).  */
1666
1667 thread_info *
1668 thread_db_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
1669                                                 int handle_len,
1670                                                 inferior *inf)
1671 {
1672   thread_t handle_tid;
1673
1674   /* When debugging a 32-bit target from a 64-bit host, handle_len
1675      will be 4 and sizeof (handle_tid) will be 8.  This requires
1676      a different cast than the more straightforward case where
1677      the sizes are the same.
1678
1679      Use "--target_board unix/-m32" from a native x86_64 linux build
1680      to test the 32/64-bit case.  */
1681   if (handle_len == 4 && sizeof (handle_tid) == 8)
1682     handle_tid = (thread_t) * (const uint32_t *) thread_handle;
1683   else if (handle_len == sizeof (handle_tid))
1684     handle_tid = * (const thread_t *) thread_handle;
1685   else
1686     error (_("Thread handle size mismatch: %d vs %zu (from libthread_db)"),
1687            handle_len, sizeof (handle_tid));
1688
1689   for (thread_info *tp : inf->non_exited_threads ())
1690     {
1691       thread_db_thread_info *priv = get_thread_db_thread_info (tp);
1692
1693       if (priv != NULL && handle_tid == priv->tid)
1694         return tp;
1695     }
1696
1697   return NULL;
1698 }
1699
1700 /* Return the thread handle associated the thread_info pointer TP.  */
1701
1702 gdb::byte_vector
1703 thread_db_target::thread_info_to_thread_handle (struct thread_info *tp)
1704 {
1705   thread_db_thread_info *priv = get_thread_db_thread_info (tp);
1706
1707   if (priv == NULL)
1708     return gdb::byte_vector ();
1709
1710   int handle_size = sizeof (priv->tid);
1711   gdb::byte_vector rv (handle_size);
1712
1713   memcpy (rv.data (), &priv->tid, handle_size);
1714
1715   return rv;
1716 }
1717
1718 /* Get the address of the thread local variable in load module LM which
1719    is stored at OFFSET within the thread local storage for thread PTID.  */
1720
1721 CORE_ADDR
1722 thread_db_target::get_thread_local_address (ptid_t ptid,
1723                                             CORE_ADDR lm,
1724                                             CORE_ADDR offset)
1725 {
1726   struct thread_info *thread_info;
1727   process_stratum_target *beneath
1728     = as_process_stratum_target (this->beneath ());
1729   /* Find the matching thread.  */
1730   thread_info = find_thread_ptid (beneath, ptid);
1731
1732   /* We may not have discovered the thread yet.  */
1733   if (thread_info != NULL && thread_info->priv == NULL)
1734     thread_info = thread_from_lwp (thread_info, ptid);
1735
1736   if (thread_info != NULL && thread_info->priv != NULL)
1737     {
1738       td_err_e err;
1739       psaddr_t address;
1740       thread_db_info *info = get_thread_db_info (beneath, ptid.pid ());
1741       thread_db_thread_info *priv = get_thread_db_thread_info (thread_info);
1742
1743       /* Finally, get the address of the variable.  */
1744       if (lm != 0)
1745         {
1746           /* glibc doesn't provide the needed interface.  */
1747           if (!info->td_thr_tls_get_addr_p)
1748             throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR,
1749                          _("No TLS library support"));
1750
1751           /* Note the cast through uintptr_t: this interface only works if
1752              a target address fits in a psaddr_t, which is a host pointer.
1753              So a 32-bit debugger can not access 64-bit TLS through this.  */
1754           err = info->td_thr_tls_get_addr_p (&priv->th,
1755                                              (psaddr_t)(uintptr_t) lm,
1756                                              offset, &address);
1757         }
1758       else
1759         {
1760           /* If glibc doesn't provide the needed interface throw an error
1761              that LM is zero - normally cases it should not be.  */
1762           if (!info->td_thr_tlsbase_p)
1763             throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
1764                          _("TLS load module not found"));
1765
1766           /* This code path handles the case of -static -pthread executables:
1767              https://sourceware.org/ml/libc-help/2014-03/msg00024.html
1768              For older GNU libc r_debug.r_map is NULL.  For GNU libc after
1769              PR libc/16831 due to GDB PR threads/16954 LOAD_MODULE is also NULL.
1770              The constant number 1 depends on GNU __libc_setup_tls
1771              initialization of l_tls_modid to 1.  */
1772           err = info->td_thr_tlsbase_p (&priv->th, 1, &address);
1773           address = (char *) address + offset;
1774         }
1775
1776 #ifdef THREAD_DB_HAS_TD_NOTALLOC
1777       /* The memory hasn't been allocated, yet.  */
1778       if (err == TD_NOTALLOC)
1779           /* Now, if libthread_db provided the initialization image's
1780              address, we *could* try to build a non-lvalue value from
1781              the initialization image.  */
1782         throw_error (TLS_NOT_ALLOCATED_YET_ERROR,
1783                      _("TLS not allocated yet"));
1784 #endif
1785
1786       /* Something else went wrong.  */
1787       if (err != TD_OK)
1788         throw_error (TLS_GENERIC_ERROR,
1789                      (("%s")), thread_db_err_str (err));
1790
1791       /* Cast assuming host == target.  Joy.  */
1792       /* Do proper sign extension for the target.  */
1793       gdb_assert (current_program_space->exec_bfd ());
1794       return (bfd_get_sign_extend_vma (current_program_space->exec_bfd ()) > 0
1795               ? (CORE_ADDR) (intptr_t) address
1796               : (CORE_ADDR) (uintptr_t) address);
1797     }
1798
1799   return beneath->get_thread_local_address (ptid, lm, offset);
1800 }
1801
1802 /* Implement the to_get_ada_task_ptid target method for this target.  */
1803
1804 ptid_t
1805 thread_db_target::get_ada_task_ptid (long lwp, long thread)
1806 {
1807   /* NPTL uses a 1:1 model, so the LWP id suffices.  */
1808   return ptid_t (inferior_ptid.pid (), lwp, 0);
1809 }
1810
1811 void
1812 thread_db_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
1813 {
1814   process_stratum_target *beneath
1815     = as_process_stratum_target (this->beneath ());
1816
1817   thread_db_info *info
1818     = get_thread_db_info (beneath, (ptid == minus_one_ptid
1819                                     ? inferior_ptid.pid ()
1820                                     : ptid.pid ()));
1821
1822   /* This workaround is only needed for child fork lwps stopped in a
1823      PTRACE_O_TRACEFORK event.  When the inferior is resumed, the
1824      workaround can be disabled.  */
1825   if (info)
1826     info->need_stale_parent_threads_check = 0;
1827
1828   beneath->resume (ptid, step, signo);
1829 }
1830
1831 /* std::sort helper function for info_auto_load_libthread_db, sort the
1832    thread_db_info pointers primarily by their FILENAME and secondarily by their
1833    PID, both in ascending order.  */
1834
1835 static bool
1836 info_auto_load_libthread_db_compare (const struct thread_db_info *a,
1837                                      const struct thread_db_info *b)
1838 {
1839   int retval;
1840
1841   retval = strcmp (a->filename, b->filename);
1842   if (retval)
1843     return retval < 0;
1844
1845   return a->pid < b->pid;
1846 }
1847
1848 /* Implement 'info auto-load libthread-db'.  */
1849
1850 static void
1851 info_auto_load_libthread_db (const char *args, int from_tty)
1852 {
1853   struct ui_out *uiout = current_uiout;
1854   const char *cs = args ? args : "";
1855   struct thread_db_info *info;
1856   unsigned unique_filenames;
1857   size_t max_filename_len, pids_len;
1858   int i;
1859
1860   cs = skip_spaces (cs);
1861   if (*cs)
1862     error (_("'info auto-load libthread-db' does not accept any parameters"));
1863
1864   std::vector<struct thread_db_info *> array;
1865   for (info = thread_db_list; info; info = info->next)
1866     if (info->filename != NULL)
1867       array.push_back (info);
1868
1869   /* Sort ARRAY by filenames and PIDs.  */
1870   std::sort (array.begin (), array.end (),
1871              info_auto_load_libthread_db_compare);
1872
1873   /* Calculate the number of unique filenames (rows) and the maximum string
1874      length of PIDs list for the unique filenames (columns).  */
1875
1876   unique_filenames = 0;
1877   max_filename_len = 0;
1878   pids_len = 0;
1879   for (i = 0; i < array.size (); i++)
1880     {
1881       int pid = array[i]->pid;
1882       size_t this_pid_len;
1883
1884       for (this_pid_len = 0; pid != 0; pid /= 10)
1885         this_pid_len++;
1886
1887       if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
1888         {
1889           unique_filenames++;
1890           max_filename_len = std::max (max_filename_len,
1891                                        strlen (array[i]->filename));
1892
1893           if (i > 0)
1894             pids_len -= strlen (", ");
1895           pids_len = 0;
1896         }
1897       pids_len += this_pid_len + strlen (", ");
1898     }
1899   if (i)
1900     pids_len -= strlen (", ");
1901
1902   /* Table header shifted right by preceding "libthread-db:  " would not match
1903      its columns.  */
1904   if (array.size () > 0 && args == auto_load_info_scripts_pattern_nl)
1905     uiout->text ("\n");
1906
1907   {
1908     ui_out_emit_table table_emitter (uiout, 2, unique_filenames,
1909                                      "LinuxThreadDbTable");
1910
1911     uiout->table_header (max_filename_len, ui_left, "filename", "Filename");
1912     uiout->table_header (pids_len, ui_left, "PIDs", "Pids");
1913     uiout->table_body ();
1914
1915     /* Note I is incremented inside the cycle, not at its end.  */
1916     for (i = 0; i < array.size ();)
1917       {
1918         ui_out_emit_tuple tuple_emitter (uiout, NULL);
1919
1920         info = array[i];
1921         uiout->field_string ("filename", info->filename);
1922
1923         std::string pids;
1924         while (i < array.size () && strcmp (info->filename,
1925                                             array[i]->filename) == 0)
1926           {
1927             if (!pids.empty ())
1928               pids += ", ";
1929             string_appendf (pids, "%u", array[i]->pid);
1930             i++;
1931           }
1932
1933         uiout->field_string ("pids", pids.c_str ());
1934
1935         uiout->text ("\n");
1936       }
1937   }
1938
1939   if (array.empty ())
1940     uiout->message (_("No auto-loaded libthread-db.\n"));
1941 }
1942
1943 /* Implement 'maintenance check libthread-db'.  */
1944
1945 static void
1946 maintenance_check_libthread_db (const char *args, int from_tty)
1947 {
1948   int inferior_pid = inferior_ptid.pid ();
1949   struct thread_db_info *info;
1950
1951   if (inferior_pid == 0)
1952     error (_("No inferior running"));
1953
1954   info = get_thread_db_info (current_inferior ()->process_target (),
1955                              inferior_pid);
1956   if (info == NULL)
1957     error (_("No libthread_db loaded"));
1958
1959   check_thread_db (info, true);
1960 }
1961
1962 void _initialize_thread_db ();
1963 void
1964 _initialize_thread_db ()
1965 {
1966   /* Defer loading of libthread_db.so until inferior is running.
1967      This allows gdb to load correct libthread_db for a given
1968      executable -- there could be multiple versions of glibc,
1969      and until there is a running inferior, we can't tell which
1970      libthread_db is the correct one to load.  */
1971
1972   libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
1973
1974   add_setshow_optional_filename_cmd ("libthread-db-search-path",
1975                                      class_support,
1976                                      &libthread_db_search_path, _("\
1977 Set search path for libthread_db."), _("\
1978 Show the current search path or libthread_db."), _("\
1979 This path is used to search for libthread_db to be loaded into \
1980 gdb itself.\n\
1981 Its value is a colon (':') separate list of directories to search.\n\
1982 Setting the search path to an empty list resets it to its default value."),
1983                             set_libthread_db_search_path,
1984                             NULL,
1985                             &setlist, &showlist);
1986
1987   add_setshow_zuinteger_cmd ("libthread-db", class_maintenance,
1988                              &libthread_db_debug, _("\
1989 Set libthread-db debugging."), _("\
1990 Show libthread-db debugging."), _("\
1991 When non-zero, libthread-db debugging is enabled."),
1992                              NULL,
1993                              show_libthread_db_debug,
1994                              &setdebuglist, &showdebuglist);
1995
1996   add_setshow_boolean_cmd ("libthread-db", class_support,
1997                            &auto_load_thread_db, _("\
1998 Enable or disable auto-loading of inferior specific libthread_db."), _("\
1999 Show whether auto-loading inferior specific libthread_db is enabled."), _("\
2000 If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n\
2001 locations to load libthread_db compatible with the inferior.\n\
2002 Standard system libthread_db still gets loaded even with this option off.\n\
2003 This option has security implications for untrusted inferiors."),
2004                            NULL, show_auto_load_thread_db,
2005                            auto_load_set_cmdlist_get (),
2006                            auto_load_show_cmdlist_get ());
2007
2008   add_cmd ("libthread-db", class_info, info_auto_load_libthread_db,
2009            _("Print the list of loaded inferior specific libthread_db.\n\
2010 Usage: info auto-load libthread-db"),
2011            auto_load_info_cmdlist_get ());
2012
2013   add_cmd ("libthread-db", class_maintenance,
2014            maintenance_check_libthread_db, _("\
2015 Run integrity checks on the current inferior's libthread_db."),
2016            &maintenancechecklist);
2017
2018   add_setshow_boolean_cmd ("check-libthread-db",
2019                            class_maintenance,
2020                            &check_thread_db_on_load, _("\
2021 Set whether to check libthread_db at load time."), _("\
2022 Show whether to check libthread_db at load time."), _("\
2023 If enabled GDB will run integrity checks on inferior specific libthread_db\n\
2024 as they are loaded."),
2025                            NULL,
2026                            NULL,
2027                            &maintenance_set_cmdlist,
2028                            &maintenance_show_cmdlist);
2029
2030   /* Add ourselves to objfile event chain.  */
2031   gdb::observers::new_objfile.attach (thread_db_new_objfile);
2032
2033   /* Add ourselves to inferior_created event chain.
2034      This is needed to handle debugging statically linked programs where
2035      the new_objfile observer won't get called for libpthread.  */
2036   gdb::observers::inferior_created.attach (thread_db_inferior_created);
2037 }
This page took 0.140081 seconds and 4 git commands to generate.