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