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