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