]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/linux-thread-db.c
gdb: Pass std::strings to ui_out::field_string () where convenient
[thirdparty/binutils-gdb.git] / gdb / linux-thread-db.c
CommitLineData
fb0e1ba7 1/* libthread_db assisted debugging support, generic parts.
1bac305b 2
3666a048 3 Copyright (C) 1999-2021 Free Software Foundation, Inc.
fb0e1ba7
MK
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
fb0e1ba7
MK
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
fb0e1ba7
MK
19
20#include "defs.h"
fb0e1ba7
MK
21#include <dlfcn.h>
22#include "gdb_proc_service.h"
125f8a3d 23#include "nat/gdb_thread_db.h"
268a13a5 24#include "gdbsupport/gdb_vecs.h"
bda9cb72 25#include "bfd.h"
17a37d48 26#include "command.h"
17a37d48 27#include "gdbcmd.h"
fb0e1ba7
MK
28#include "gdbthread.h"
29#include "inferior.h"
45741a9c 30#include "infrun.h"
bda9cb72
MK
31#include "symfile.h"
32#include "objfiles.h"
fb0e1ba7 33#include "target.h"
4e052eda 34#include "regcache.h"
17a37d48 35#include "solib.h"
3f47be5c 36#include "solib-svr4.h"
16451949 37#include "gdbcore.h"
76727919 38#include "observable.h"
0ec9a092 39#include "linux-nat.h"
125f8a3d 40#include "nat/linux-procfs.h"
c1a747c1 41#include "nat/linux-ptrace.h"
125f8a3d 42#include "nat/linux-osdata.h"
bf88dd68 43#include "auto-load.h"
529480d0 44#include "cli/cli-utils.h"
979894f2 45#include <signal.h>
bf88dd68 46#include <ctype.h>
9bc3a976 47#include "nat/linux-namespaces.h"
325fac50 48#include <algorithm>
268a13a5 49#include "gdbsupport/pathstuff.h"
5045b3d7 50#include "valprint.h"
9d636d67 51#include "cli/cli-style.h"
979894f2 52
17faa917
DJ
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
4a6ed09b
PA
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.
17faa917
DJ
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
d9f719f1
PA
80static const target_info thread_db_target_info = {
81 "multi-thread",
82 N_("multi-threaded child process."),
83 N_("Threads and pthreads support.")
84};
85
f6ac5f3d
PA
86class thread_db_target final : public target_ops
87{
88public:
d9f719f1
PA
89 const target_info &info () const override
90 { return thread_db_target_info; }
f6ac5f3d 91
66b4deae
PA
92 strata stratum () const override { return thread_stratum; }
93
f6ac5f3d 94 void detach (inferior *, int) override;
b60cea74 95 ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
f6ac5f3d
PA
96 void resume (ptid_t, int, enum gdb_signal) override;
97 void mourn_inferior () override;
294c36eb 98 void follow_exec (inferior *, ptid_t, const char *) override;
f6ac5f3d 99 void update_thread_list () override;
a068643d 100 std::string pid_to_str (ptid_t) override;
f6ac5f3d
PA
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;
3d6c6204 110 gdb::byte_vector thread_info_to_thread_handle (struct thread_info *) override;
f6ac5f3d
PA
111};
112
17a37d48
PP
113static char *libthread_db_search_path;
114
491144b5 115/* Set to true if thread_db auto-loading is enabled
bf88dd68 116 by the "set auto-load libthread-db" command. */
491144b5 117static bool auto_load_thread_db = true;
bf88dd68 118
491144b5 119/* Set to true if load-time libthread_db tests have been enabled
85102364 120 by the "maintenance set check-libthread-db" command. */
491144b5 121static bool check_thread_db_on_load = false;
5045b3d7 122
bf88dd68
JK
123/* "show" command for the auto_load_thread_db configuration variable. */
124
125static void
126show_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
84e578fb 134static void
eb4c3f4a 135set_libthread_db_search_path (const char *ignored, int from_tty,
84e578fb
DE
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
02d868e8
PP
145/* If non-zero, print details of libthread_db processing. */
146
ccce17b0 147static unsigned int libthread_db_debug;
02d868e8
PP
148
149static void
150show_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
8605d56e
AC
156/* If we're running on GNU/Linux, we must explicitly attach to any new
157 threads. */
fb0e1ba7 158
fb0e1ba7 159/* This module's target vector. */
f6ac5f3d 160static thread_db_target the_thread_db_target;
fb0e1ba7 161
fb0e1ba7
MK
162/* Non-zero if we have determined the signals used by the threads
163 library. */
164static int thread_signals;
fb0e1ba7 165
d90e17a7
PA
166struct thread_db_info
167{
168 struct thread_db_info *next;
169
5b6d1e4f
PA
170 /* The target this thread_db_info is bound to. */
171 process_stratum_target *process_target;
172
d90e17a7
PA
173 /* Process id this object refers to. */
174 int pid;
175
176 /* Handle from dlopen for libthread_db.so. */
177 void *handle;
178
bf88dd68
JK
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
d90e17a7
PA
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
4d062f1a
PA
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
d90e17a7 197 /* Pointers to the libthread_db functions. */
fb0e1ba7 198
96e9210f
PA
199 td_init_ftype *td_init_p;
200 td_ta_new_ftype *td_ta_new_p;
a2419b98 201 td_ta_delete_ftype *td_ta_delete_p;
96e9210f
PA
202 td_ta_map_lwp2thr_ftype *td_ta_map_lwp2thr_p;
203 td_ta_thr_iter_ftype *td_ta_thr_iter_p;
96e9210f 204 td_thr_get_info_ftype *td_thr_get_info_p;
96e9210f
PA
205 td_thr_tls_get_addr_ftype *td_thr_tls_get_addr_p;
206 td_thr_tlsbase_ftype *td_thr_tlsbase_p;
d90e17a7
PA
207};
208
209/* List of known processes using thread_db, and the required
210 bookkeeping. */
6bd434d6 211static thread_db_info *thread_db_list;
d90e17a7 212
00431a78
PA
213static void thread_db_find_new_threads_1 (thread_info *stopped);
214static void thread_db_find_new_threads_2 (thread_info *stopped,
215 bool until_no_new);
d90e17a7 216
2db9a427
PA
217static void check_thread_signals (void);
218
be550b6e
DE
219static 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);
2db9a427 222
d90e17a7
PA
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
228static struct thread_db_info *
229add_thread_db_info (void *handle)
230{
8d749320 231 struct thread_db_info *info = XCNEW (struct thread_db_info);
d90e17a7 232
5b6d1e4f 233 info->process_target = current_inferior ()->process_target ();
e99b03dc 234 info->pid = inferior_ptid.pid ();
d90e17a7 235 info->handle = handle;
856d6f99
PA
236
237 /* The workaround works by reading from /proc/pid/status, so it is
238 disabled for core files. */
55f6301a 239 if (target_has_execution ())
856d6f99 240 info->need_stale_parent_threads_check = 1;
d90e17a7
PA
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
251static struct thread_db_info *
5b6d1e4f 252get_thread_db_info (process_stratum_target *targ, int pid)
d90e17a7
PA
253{
254 struct thread_db_info *info;
255
256 for (info = thread_db_list; info; info = info->next)
5b6d1e4f 257 if (targ == info->process_target && pid == info->pid)
d90e17a7
PA
258 return info;
259
260 return NULL;
261}
262
a2419b98
PW
263static const char *thread_db_err_str (td_err_e err);
264
d90e17a7
PA
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
270static void
5b6d1e4f 271delete_thread_db_info (process_stratum_target *targ, int pid)
d90e17a7
PA
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)
5b6d1e4f 278 if (targ == info->process_target && pid == info->pid)
d90e17a7
PA
279 break;
280
281 if (info == NULL)
282 return;
283
a2419b98
PW
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
d90e17a7
PA
294 if (info->handle != NULL)
295 dlclose (info->handle);
296
bf88dd68
JK
297 xfree (info->filename);
298
d90e17a7
PA
299 if (info_prev)
300 info_prev->next = info->next;
301 else
302 thread_db_list = info->next;
303
304 xfree (info);
305}
fb0e1ba7 306
5365276c
DJ
307/* Use "struct private_thread_info" to cache thread state. This is
308 a substantial optimization. */
309
7aabaf9d 310struct thread_db_thread_info : public private_thread_info
fb0e1ba7 311{
a2f23071 312 /* Flag set when we see a TD_DEATH event for this thread. */
7aabaf9d 313 bool dying = false;
a2f23071 314
5365276c 315 /* Cached thread state. */
7aabaf9d
SM
316 td_thrhandle_t th {};
317 thread_t tid {};
fb0e1ba7 318};
7aabaf9d
SM
319
320static thread_db_thread_info *
321get_thread_db_thread_info (thread_info *thread)
322{
323 return static_cast<thread_db_thread_info *> (thread->priv.get ());
324}
21bf60fe 325
a121b7c1 326static const char *
fb0e1ba7
MK
327thread_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";
59f80f10
DJ
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
fb0e1ba7
MK
387 default:
388 snprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err);
389 return buf;
390 }
391}
4105de34 392
00431a78
PA
393/* Fetch the user-level thread id of PTID. STOPPED is a stopped
394 thread that we can use to access memory. */
fb0e1ba7 395
be550b6e 396static struct thread_info *
00431a78 397thread_from_lwp (thread_info *stopped, ptid_t ptid)
fb0e1ba7 398{
fb0e1ba7 399 td_thrhandle_t th;
2db9a427 400 td_thrinfo_t ti;
fb0e1ba7 401 td_err_e err;
d90e17a7 402 struct thread_db_info *info;
2db9a427 403 struct thread_info *tp;
fb0e1ba7 404
6cb9b55b
PP
405 /* Just in case td_ta_map_lwp2thr doesn't initialize it completely. */
406 th.th_unique = 0;
407
17faa917
DJ
408 /* This ptid comes from linux-nat.c, which should always fill in the
409 LWP. */
e38504b3 410 gdb_assert (ptid.lwp () != 0);
fb0e1ba7 411
5b6d1e4f 412 info = get_thread_db_info (stopped->inf->process_target (), ptid.pid ());
d90e17a7 413
4c28f408 414 /* Access an lwp we know is stopped. */
00431a78 415 info->proc_handle.thread = stopped;
e38504b3 416 err = info->td_ta_map_lwp2thr_p (info->thread_agent, ptid.lwp (),
dfd4cc63 417 &th);
fb0e1ba7 418 if (err != TD_OK)
8a3fe4f8 419 error (_("Cannot find user-level thread for LWP %ld: %s"),
e38504b3 420 ptid.lwp (), thread_db_err_str (err));
fb0e1ba7 421
2db9a427
PA
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. */
5b6d1e4f 428 tp = find_thread_ptid (stopped->inf->process_target (), ptid);
be550b6e 429 return record_thread (info, tp, ptid, &th, &ti);
fb0e1ba7
MK
430}
431\f
432
2db9a427
PA
433/* See linux-nat.h. */
434
4c28f408 435int
2db9a427 436thread_db_notice_clone (ptid_t parent, ptid_t child)
4c28f408 437{
d90e17a7 438 struct thread_db_info *info;
4c28f408 439
5b6d1e4f 440 info = get_thread_db_info (linux_target, child.pid ());
d90e17a7
PA
441
442 if (info == NULL)
4c28f408
PA
443 return 0;
444
5b6d1e4f 445 thread_info *stopped = find_thread_ptid (linux_target, parent);
4c28f408 446
00431a78
PA
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);
4c28f408
PA
452 return 1;
453}
454
5220ea4c
AC
455static void *
456verbose_dlsym (void *handle, const char *name)
457{
458 void *sym = dlsym (handle, name);
459 if (sym == NULL)
3e43a32a
MS
460 warning (_("Symbol \"%s\" not found in libthread_db: %s"),
461 name, dlerror ());
5220ea4c
AC
462 return sym;
463}
464
fcb44371
JK
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
469static int
470inferior_has_bug (const char *ver_symbol, int ver_major_min, int ver_minor_min)
471{
3b7344d5 472 struct bound_minimal_symbol version_msym;
fcb44371 473 CORE_ADDR version_addr;
66920317 474 int got, retval = 0;
fcb44371
JK
475
476 version_msym = lookup_minimal_symbol (ver_symbol, NULL, NULL);
3b7344d5 477 if (version_msym.minsym == NULL)
fcb44371
JK
478 return 0;
479
77e371c0 480 version_addr = BMSYMBOL_VALUE_ADDRESS (version_msym);
66920317
TT
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)
fcb44371
JK
485 {
486 int major, minor;
487
e83e4e24 488 retval = (sscanf (version.get (), "%d.%d", &major, &minor) == 2
fcb44371
JK
489 && (major < ver_major_min
490 || (major == ver_major_min && minor < ver_minor_min)));
491 }
fcb44371
JK
492
493 return retval;
494}
495
fcb44371
JK
496/* Similar as thread_db_find_new_threads_1, but try to silently ignore errors
497 if appropriate.
456b0e24 498
fcb44371
JK
499 Return 1 if the caller should abort libthread_db initialization. Return 0
500 otherwise. */
501
502static int
00431a78 503thread_db_find_new_threads_silently (thread_info *stopped)
456b0e24 504{
456b0e24 505
a70b8144 506 try
456b0e24 507 {
00431a78 508 thread_db_find_new_threads_2 (stopped, true);
456b0e24
PP
509 }
510
230d2906 511 catch (const gdb_exception_error &except)
e0881a8e 512 {
fcb44371 513 if (libthread_db_debug)
883ed13e 514 exception_fprintf (gdb_stdlog, except,
fcb44371
JK
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
889003ed
JK
530 corrupted. For core files it does not apply, no 'later enumeration'
531 is possible. */
fcb44371 532
55f6301a 533 if (!target_has_execution () || !inferior_has_bug ("nptl_version", 2, 7))
fcb44371
JK
534 {
535 exception_fprintf (gdb_stderr, except,
536 _("Warning: couldn't activate thread debugging "
537 "using libthread_db: "));
538 return 1;
539 }
e0881a8e 540 }
492d29ea 541
fcb44371 542 return 0;
456b0e24
PP
543}
544
d90e17a7
PA
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
549static const char *
550dladdr_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
5045b3d7
GB
559/* State for check_thread_db_callback. */
560
561struct 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
579static struct check_thread_db_info *tdb_testinfo;
580
581/* Callback for check_thread_db. */
582
583static int
584check_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
55f6301a 660 if (tdb_testinfo->last_result == TD_ERR && !target_has_execution ())
5045b3d7
GB
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. */
fd79271b 690 ptid_t ptid = ptid_t (tdb_testinfo->info->pid, ti.ti_lid, 0);
5b6d1e4f 691 thread_info *thread_info = find_thread_ptid (linux_target, ptid);
5045b3d7
GB
692 if (thread_info != NULL && thread_info->priv != NULL)
693 {
694 LOG ("; errno");
695
696 scoped_restore_current_thread restore_current_thread;
5b6d1e4f 697 switch_to_thread (thread_info);
5045b3d7
GB
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
729static bool
730check_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
a70b8144 765 try
5045b3d7
GB
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 }
230d2906 781 catch (const gdb_exception_error &except)
5045b3d7
GB
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 }
5045b3d7
GB
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
2471d008 802/* Attempt to initialize dlopen()ed libthread_db, described by INFO.
9ddc1af1 803 Return true on success.
17a37d48
PP
804 Failure could happen if libthread_db does not have symbols we expect,
805 or when it refuses to work with the current inferior (e.g. due to
806 version mismatch between libthread_db and libpthread). */
807
9ddc1af1 808static bool
d90e17a7 809try_thread_db_load_1 (struct thread_db_info *info)
17a37d48
PP
810{
811 td_err_e err;
812
813 /* Initialize pointers to the dynamic library functions we will use.
814 Essential functions first. */
815
96e9210f
PA
816#define TDB_VERBOSE_DLSYM(info, func) \
817 info->func ## _p = (func ## _ftype *) verbose_dlsym (info->handle, #func)
818
819#define TDB_DLSYM(info, func) \
820 info->func ## _p = (func ## _ftype *) dlsym (info->handle, #func)
821
822#define CHK(a) \
823 do \
824 { \
825 if ((a) == NULL) \
9ddc1af1 826 return false; \
96e9210f
PA
827 } while (0)
828
829 CHK (TDB_VERBOSE_DLSYM (info, td_init));
17a37d48 830
d90e17a7 831 err = info->td_init_p ();
17a37d48
PP
832 if (err != TD_OK)
833 {
3e43a32a
MS
834 warning (_("Cannot initialize libthread_db: %s"),
835 thread_db_err_str (err));
9ddc1af1 836 return false;
17a37d48
PP
837 }
838
96e9210f 839 CHK (TDB_VERBOSE_DLSYM (info, td_ta_new));
17a37d48
PP
840
841 /* Initialize the structure that identifies the child process. */
00431a78 842 info->proc_handle.thread = inferior_thread ();
17a37d48
PP
843
844 /* Now attempt to open a connection to the thread library. */
d90e17a7 845 err = info->td_ta_new_p (&info->proc_handle, &info->thread_agent);
17a37d48
PP
846 if (err != TD_OK)
847 {
02d868e8 848 if (libthread_db_debug)
883ed13e
PA
849 fprintf_unfiltered (gdb_stdlog, _("td_ta_new failed: %s\n"),
850 thread_db_err_str (err));
17a37d48 851 else
dda83cd7
SM
852 switch (err)
853 {
854 case TD_NOLIBTHREAD:
17a37d48 855#ifdef THREAD_DB_HAS_TD_VERSION
dda83cd7 856 case TD_VERSION:
17a37d48 857#endif
dda83cd7
SM
858 /* The errors above are not unexpected and silently ignored:
859 they just mean we haven't found correct version of
860 libthread_db yet. */
861 break;
862 default:
863 warning (_("td_ta_new failed: %s"), thread_db_err_str (err));
864 }
9ddc1af1 865 return false;
17a37d48
PP
866 }
867
96e9210f
PA
868 /* These are essential. */
869 CHK (TDB_VERBOSE_DLSYM (info, td_ta_map_lwp2thr));
96e9210f 870 CHK (TDB_VERBOSE_DLSYM (info, td_thr_get_info));
17a37d48
PP
871
872 /* These are not essential. */
96e9210f
PA
873 TDB_DLSYM (info, td_thr_tls_get_addr);
874 TDB_DLSYM (info, td_thr_tlsbase);
a2419b98 875 TDB_DLSYM (info, td_ta_delete);
96e9210f 876
2db9a427
PA
877 /* It's best to avoid td_ta_thr_iter if possible. That walks data
878 structures in the inferior's address space that may be corrupted,
879 or, if the target is running, may change while we walk them. If
880 there's execution (and /proc is mounted), then we're already
881 attached to all LWPs. Use thread_from_lwp, which uses
882 td_ta_map_lwp2thr instead, which does not walk the thread list.
883
884 td_ta_map_lwp2thr uses ps_get_thread_area, but we can't use that
885 currently on core targets, as it uses ptrace directly. */
55f6301a 886 if (target_has_execution ()
e99b03dc 887 && linux_proc_task_list_dir_exists (inferior_ptid.pid ()))
1eb2dbb8
PA
888 info->td_ta_thr_iter_p = NULL;
889 else
890 CHK (TDB_VERBOSE_DLSYM (info, td_ta_thr_iter));
891
892#undef TDB_VERBOSE_DLSYM
893#undef TDB_DLSYM
894#undef CHK
895
5045b3d7
GB
896 /* Run integrity checks if requested. */
897 if (check_thread_db_on_load)
898 {
899 if (!check_thread_db (info, libthread_db_debug))
9ddc1af1 900 return false;
5045b3d7
GB
901 }
902
1eb2dbb8 903 if (info->td_ta_thr_iter_p == NULL)
2db9a427
PA
904 {
905 struct lwp_info *lp;
e99b03dc 906 int pid = inferior_ptid.pid ();
00431a78 907 thread_info *curr_thread = inferior_thread ();
2db9a427
PA
908
909 linux_stop_and_wait_all_lwps ();
910
911 ALL_LWPS (lp)
e99b03dc 912 if (lp->ptid.pid () == pid)
00431a78 913 thread_from_lwp (curr_thread, lp->ptid);
2db9a427
PA
914
915 linux_unstop_all_lwps ();
916 }
00431a78 917 else if (thread_db_find_new_threads_silently (inferior_thread ()) != 0)
fcb44371
JK
918 {
919 /* Even if libthread_db initializes, if the thread list is
dda83cd7
SM
920 corrupted, we'd not manage to list any threads. Better reject this
921 thread_db, and fall back to at least listing LWPs. */
9ddc1af1 922 return false;
fcb44371
JK
923 }
924
17a37d48
PP
925 printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
926
883ed13e 927 if (*libthread_db_search_path || libthread_db_debug)
d90e17a7 928 {
883ed13e 929 struct ui_file *file;
d90e17a7 930 const char *library;
17a37d48 931
f8708a14 932 library = dladdr_to_soname ((const void *) *info->td_ta_new_p);
d90e17a7
PA
933 if (library == NULL)
934 library = LIBTHREAD_DB_SO;
17a37d48 935
883ed13e
PA
936 /* If we'd print this to gdb_stdout when debug output is
937 disabled, still print it to gdb_stdout if debug output is
938 enabled. User visible output should not depend on debug
939 settings. */
940 file = *libthread_db_search_path != '\0' ? gdb_stdout : gdb_stdlog;
9d636d67
TT
941 fprintf_unfiltered (file,
942 _("Using host libthread_db library \"%ps\".\n"),
943 styled_string (file_name_style.style (), library));
d90e17a7 944 }
17a37d48 945
d90e17a7 946 /* The thread library was detected. Activate the thread_db target
5b6d1e4f 947 for this process. */
02980c56 948 current_inferior ()->push_target (&the_thread_db_target);
9ddc1af1 949 return true;
17a37d48
PP
950}
951
952/* Attempt to use LIBRARY as libthread_db. LIBRARY could be absolute,
953 relative, or just LIBTHREAD_DB. */
954
9ddc1af1
SM
955static bool
956try_thread_db_load (const char *library, bool check_auto_load_safe)
17a37d48
PP
957{
958 void *handle;
d90e17a7 959 struct thread_db_info *info;
17a37d48 960
02d868e8 961 if (libthread_db_debug)
883ed13e
PA
962 fprintf_unfiltered (gdb_stdlog,
963 _("Trying host libthread_db library: %s.\n"),
964 library);
fde4f8ed
JK
965
966 if (check_auto_load_safe)
967 {
968 if (access (library, R_OK) != 0)
969 {
970 /* Do not print warnings by file_is_auto_load_safe if the library does
971 not exist at this place. */
972 if (libthread_db_debug)
883ed13e
PA
973 fprintf_unfiltered (gdb_stdlog, _("open failed: %s.\n"),
974 safe_strerror (errno));
9ddc1af1 975 return false;
fde4f8ed
JK
976 }
977
a59902a7
SM
978 auto_load_debug_printf
979 ("Loading libthread-db library \"%s\" from explicit directory.",
980 library);
981
982 if (!file_is_auto_load_safe (library))
9ddc1af1 983 return false;
fde4f8ed
JK
984 }
985
17a37d48
PP
986 handle = dlopen (library, RTLD_NOW);
987 if (handle == NULL)
988 {
02d868e8 989 if (libthread_db_debug)
883ed13e 990 fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
9ddc1af1 991 return false;
17a37d48
PP
992 }
993
02d868e8 994 if (libthread_db_debug && strchr (library, '/') == NULL)
17a37d48
PP
995 {
996 void *td_init;
997
998 td_init = dlsym (handle, "td_init");
999 if (td_init != NULL)
dda83cd7
SM
1000 {
1001 const char *const libpath = dladdr_to_soname (td_init);
17a37d48 1002
dda83cd7
SM
1003 if (libpath != NULL)
1004 fprintf_unfiltered (gdb_stdlog, _("Host %s resolved to: %s.\n"),
1005 library, libpath);
1006 }
17a37d48
PP
1007 }
1008
d90e17a7
PA
1009 info = add_thread_db_info (handle);
1010
bf88dd68
JK
1011 /* Do not save system library name, that one is always trusted. */
1012 if (strchr (library, '/') != NULL)
14278e1f 1013 info->filename = gdb_realpath (library).release ();
bf88dd68 1014
d90e17a7 1015 if (try_thread_db_load_1 (info))
9ddc1af1 1016 return true;
17a37d48
PP
1017
1018 /* This library "refused" to work on current inferior. */
5b6d1e4f
PA
1019 delete_thread_db_info (current_inferior ()->process_target (),
1020 inferior_ptid.pid ());
9ddc1af1 1021 return false;
17a37d48
PP
1022}
1023
290351b8 1024/* Subroutine of try_thread_db_load_from_pdir to simplify it.
e6712ff1
DE
1025 Try loading libthread_db in directory(OBJ)/SUBDIR.
1026 SUBDIR may be NULL. It may also be something like "../lib64".
290351b8
DE
1027 The result is true for success. */
1028
9ddc1af1 1029static bool
e6712ff1 1030try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
290351b8 1031{
4262abfb 1032 const char *obj_name = objfile_name (obj);
290351b8 1033
4262abfb 1034 if (obj_name[0] != '/')
290351b8
DE
1035 {
1036 warning (_("Expected absolute pathname for libpthread in the"
9d636d67
TT
1037 " inferior, but got %ps."),
1038 styled_string (file_name_style.style (), obj_name));
9ddc1af1 1039 return false;
290351b8 1040 }
05386e9e 1041
9b292f68
TT
1042 std::string path = obj_name;
1043 size_t cp = path.rfind ('/');
05386e9e 1044 /* This should at minimum hit the first character. */
9b292f68
TT
1045 gdb_assert (cp != std::string::npos);
1046 path.resize (cp + 1);
e6712ff1 1047 if (subdir != NULL)
9b292f68
TT
1048 path = path + subdir + "/";
1049 path += LIBTHREAD_DB_SO;
bccbefd2 1050
9ddc1af1 1051 return try_thread_db_load (path.c_str (), true);
290351b8
DE
1052}
1053
98a5dd13 1054/* Handle $pdir in libthread-db-search-path.
e6712ff1
DE
1055 Look for libthread_db in directory(libpthread)/SUBDIR.
1056 SUBDIR may be NULL. It may also be something like "../lib64".
98a5dd13
DE
1057 The result is true for success. */
1058
9ddc1af1 1059static bool
e6712ff1 1060try_thread_db_load_from_pdir (const char *subdir)
98a5dd13 1061{
bf88dd68 1062 if (!auto_load_thread_db)
9ddc1af1 1063 return false;
bf88dd68 1064
2030c079 1065 for (objfile *obj : current_program_space->objfiles ())
4262abfb 1066 if (libpthread_name_p (objfile_name (obj)))
98a5dd13 1067 {
e6712ff1 1068 if (try_thread_db_load_from_pdir_1 (obj, subdir))
9ddc1af1 1069 return true;
290351b8
DE
1070
1071 /* We may have found the separate-debug-info version of
1072 libpthread, and it may live in a directory without a matching
1073 libthread_db. */
1074 if (obj->separate_debug_objfile_backlink != NULL)
e6712ff1
DE
1075 return try_thread_db_load_from_pdir_1 (obj->separate_debug_objfile_backlink,
1076 subdir);
290351b8 1077
9ddc1af1 1078 return false;
98a5dd13
DE
1079 }
1080
9ddc1af1 1081 return false;
98a5dd13
DE
1082}
1083
1084/* Handle $sdir in libthread-db-search-path.
1085 Look for libthread_db in the system dirs, or wherever a plain
1086 dlopen(file_without_path) will look.
1087 The result is true for success. */
1088
9ddc1af1 1089static bool
98a5dd13
DE
1090try_thread_db_load_from_sdir (void)
1091{
9ddc1af1 1092 return try_thread_db_load (LIBTHREAD_DB_SO, false);
98a5dd13
DE
1093}
1094
1095/* Try to load libthread_db from directory DIR of length DIR_LEN.
1096 The result is true for success. */
1097
9ddc1af1 1098static bool
98a5dd13
DE
1099try_thread_db_load_from_dir (const char *dir, size_t dir_len)
1100{
bf88dd68 1101 if (!auto_load_thread_db)
9ddc1af1 1102 return false;
bf88dd68 1103
9b292f68 1104 std::string path = std::string (dir, dir_len) + "/" + LIBTHREAD_DB_SO;
bccbefd2 1105
9ddc1af1 1106 return try_thread_db_load (path.c_str (), true);
98a5dd13
DE
1107}
1108
17a37d48 1109/* Search libthread_db_search_path for libthread_db which "agrees"
98a5dd13
DE
1110 to work on current inferior.
1111 The result is true for success. */
17a37d48 1112
9ddc1af1 1113static bool
17a37d48
PP
1114thread_db_load_search (void)
1115{
9ddc1af1 1116 bool rc = false;
17a37d48 1117
e80aaf61
SM
1118 std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
1119 = dirnames_to_char_ptr_vec (libthread_db_search_path);
e6712ff1 1120
e80aaf61 1121 for (const gdb::unique_xmalloc_ptr<char> &this_dir_up : dir_vec)
17a37d48 1122 {
e80aaf61 1123 const char *this_dir = this_dir_up.get ();
e6712ff1 1124 const int pdir_len = sizeof ("$pdir") - 1;
98a5dd13 1125 size_t this_dir_len;
e0881a8e 1126
e6712ff1 1127 this_dir_len = strlen (this_dir);
17a37d48 1128
e6712ff1
DE
1129 if (strncmp (this_dir, "$pdir", pdir_len) == 0
1130 && (this_dir[pdir_len] == '\0'
1131 || this_dir[pdir_len] == '/'))
98a5dd13 1132 {
9b292f68 1133 const char *subdir = NULL;
e6712ff1 1134
9b292f68 1135 std::string subdir_holder;
e6712ff1 1136 if (this_dir[pdir_len] == '/')
98a5dd13 1137 {
9b292f68
TT
1138 subdir_holder = std::string (this_dir + pdir_len + 1);
1139 subdir = subdir_holder.c_str ();
98a5dd13 1140 }
e6712ff1 1141 rc = try_thread_db_load_from_pdir (subdir);
e6712ff1
DE
1142 if (rc)
1143 break;
17a37d48 1144 }
e6712ff1 1145 else if (strcmp (this_dir, "$sdir") == 0)
98a5dd13
DE
1146 {
1147 if (try_thread_db_load_from_sdir ())
1148 {
1149 rc = 1;
1150 break;
1151 }
1152 }
1153 else
17a37d48 1154 {
98a5dd13
DE
1155 if (try_thread_db_load_from_dir (this_dir, this_dir_len))
1156 {
1157 rc = 1;
1158 break;
1159 }
17a37d48
PP
1160 }
1161 }
98a5dd13
DE
1162
1163 if (libthread_db_debug)
883ed13e
PA
1164 fprintf_unfiltered (gdb_stdlog,
1165 _("thread_db_load_search returning %d\n"), rc);
17a37d48
PP
1166 return rc;
1167}
1168
9ddc1af1 1169/* Return true if the inferior has a libpthread. */
98a5dd13 1170
9ddc1af1 1171static bool
98a5dd13
DE
1172has_libpthread (void)
1173{
2030c079 1174 for (objfile *obj : current_program_space->objfiles ())
4262abfb 1175 if (libpthread_name_p (objfile_name (obj)))
9ddc1af1 1176 return true;
98a5dd13 1177
9ddc1af1 1178 return false;
98a5dd13
DE
1179}
1180
17a37d48 1181/* Attempt to load and initialize libthread_db.
1777feb0 1182 Return 1 on success. */
17a37d48 1183
9ddc1af1 1184static bool
17a37d48
PP
1185thread_db_load (void)
1186{
d90e17a7 1187 struct thread_db_info *info;
17a37d48 1188
5b6d1e4f
PA
1189 info = get_thread_db_info (current_inferior ()->process_target (),
1190 inferior_ptid.pid ());
d90e17a7
PA
1191
1192 if (info != NULL)
9ddc1af1 1193 return true;
17a37d48 1194
856d6f99
PA
1195 /* Don't attempt to use thread_db on executables not running
1196 yet. */
9dccd06e 1197 if (!target_has_registers ())
9ddc1af1 1198 return false;
17a37d48
PP
1199
1200 /* Don't attempt to use thread_db for remote targets. */
f6ac5f3d 1201 if (!(target_can_run () || core_bfd))
9ddc1af1 1202 return false;
17a37d48
PP
1203
1204 if (thread_db_load_search ())
9ddc1af1 1205 return true;
17a37d48 1206
98a5dd13
DE
1207 /* We couldn't find a libthread_db.
1208 If the inferior has a libpthread warn the user. */
1209 if (has_libpthread ())
1210 {
1211 warning (_("Unable to find libthread_db matching inferior's thread"
1212 " library, thread debugging will not be available."));
9ddc1af1 1213 return false;
17a37d48 1214 }
98a5dd13 1215
17a37d48
PP
1216 /* Either this executable isn't using libpthread at all, or it is
1217 statically linked. Since we can't easily distinguish these two cases,
1218 no warning is issued. */
9ddc1af1 1219 return false;
17a37d48
PP
1220}
1221
fb0e1ba7
MK
1222static void
1223check_thread_signals (void)
1224{
21bf60fe 1225 if (!thread_signals)
fb0e1ba7 1226 {
fb0e1ba7
MK
1227 int i;
1228
089436f7 1229 for (i = 0; i < lin_thread_get_thread_signal_num (); i++)
fb0e1ba7 1230 {
089436f7
TV
1231 int sig = lin_thread_get_thread_signal (i);
1232 signal_stop_update (gdb_signal_from_host (sig), 0);
1233 signal_print_update (gdb_signal_from_host (sig), 0);
1234 thread_signals = 1;
fb0e1ba7
MK
1235 }
1236 }
fb0e1ba7
MK
1237}
1238
0ec9a092
DJ
1239/* Check whether thread_db is usable. This function is called when
1240 an inferior is created (or otherwise acquired, e.g. attached to)
1241 and when new shared libraries are loaded into a running process. */
1242
1243void
1244check_for_thread_db (void)
fb0e1ba7 1245{
b5057acd 1246 /* Do nothing if we couldn't load libthread_db.so.1. */
17a37d48 1247 if (!thread_db_load ())
b5057acd 1248 return;
0ec9a092
DJ
1249}
1250
0838fb57
DE
1251/* This function is called via the new_objfile observer. */
1252
0ec9a092
DJ
1253static void
1254thread_db_new_objfile (struct objfile *objfile)
1255{
d90e17a7
PA
1256 /* This observer must always be called with inferior_ptid set
1257 correctly. */
1258
0838fb57 1259 if (objfile != NULL
fcb44371 1260 /* libpthread with separate debug info has its debug info file already
7d0e21ad 1261 loaded (and notified without successful thread_db initialization)
76727919 1262 the time gdb::observers::new_objfile.notify is called for the library itself.
fcb44371
JK
1263 Static executables have their separate debug info loaded already
1264 before the inferior has started. */
1265 && objfile->separate_debug_objfile_backlink == NULL
0838fb57
DE
1266 /* Only check for thread_db if we loaded libpthread,
1267 or if this is the main symbol file.
1268 We need to check OBJF_MAINLINE to handle the case of debugging
1269 a statically linked executable AND the symbol file is specified AFTER
1270 the exec file is loaded (e.g., gdb -c core ; file foo).
1271 For dynamically linked executables, libpthread can be near the end
1272 of the list of shared libraries to load, and in an app of several
1273 thousand shared libraries, this can otherwise be painful. */
1274 && ((objfile->flags & OBJF_MAINLINE) != 0
4262abfb 1275 || libpthread_name_p (objfile_name (objfile))))
0ec9a092 1276 check_for_thread_db ();
fb0e1ba7
MK
1277}
1278
015de688 1279static void
3f66685e 1280check_pid_namespace_match (inferior *inf)
015de688
DC
1281{
1282 /* Check is only relevant for local targets targets. */
f6ac5f3d 1283 if (target_can_run ())
015de688
DC
1284 {
1285 /* If the child is in a different PID namespace, its idea of its
1286 PID will differ from our idea of its PID. When we scan the
1287 child's thread list, we'll mistakenly think it has no threads
1288 since the thread PID fields won't match the PID we give to
1289 libthread_db. */
3f66685e 1290 if (!linux_ns_same (inf->pid, LINUX_NS_PID))
015de688
DC
1291 {
1292 warning (_ ("Target and debugger are in different PID "
1293 "namespaces; thread lists and other data are "
708bf0a1
JK
1294 "likely unreliable. "
1295 "Connect to gdbserver inside the container."));
015de688 1296 }
015de688
DC
1297 }
1298}
1299
0838fb57
DE
1300/* This function is called via the inferior_created observer.
1301 This handles the case of debugging statically linked executables. */
1302
1303static void
a0ff652f 1304thread_db_inferior_created (inferior *inf)
0838fb57 1305{
3f66685e 1306 check_pid_namespace_match (inf);
0838fb57
DE
1307 check_for_thread_db ();
1308}
1309
c1a747c1
PA
1310/* Update the thread's state (what's displayed in "info threads"),
1311 from libthread_db thread state information. */
1312
1313static void
7aabaf9d 1314update_thread_state (thread_db_thread_info *priv,
c1a747c1
PA
1315 const td_thrinfo_t *ti_p)
1316{
fe978cb0
PA
1317 priv->dying = (ti_p->ti_state == TD_THR_UNKNOWN
1318 || ti_p->ti_state == TD_THR_ZOMBIE);
c1a747c1
PA
1319}
1320
2db9a427 1321/* Record a new thread in GDB's thread list. Creates the thread's
be550b6e
DE
1322 private info. If TP is NULL or TP is marked as having exited,
1323 creates a new thread. Otherwise, uses TP. */
2db9a427 1324
be550b6e 1325static struct thread_info *
2db9a427
PA
1326record_thread (struct thread_db_info *info,
1327 struct thread_info *tp,
1328 ptid_t ptid, const td_thrhandle_t *th_p,
1329 const td_thrinfo_t *ti_p)
1330{
2db9a427
PA
1331 /* A thread ID of zero may mean the thread library has not
1332 initialized yet. Leave private == NULL until the thread library
1333 has initialized. */
1334 if (ti_p->ti_tid == 0)
be550b6e 1335 return tp;
2db9a427 1336
17faa917 1337 /* Construct the thread's private data. */
7aabaf9d 1338 thread_db_thread_info *priv = new thread_db_thread_info;
17faa917 1339
fe978cb0
PA
1340 priv->th = *th_p;
1341 priv->tid = ti_p->ti_tid;
1342 update_thread_state (priv, ti_p);
17faa917 1343
4eec2deb
PA
1344 /* Add the thread to GDB's thread list. If we already know about a
1345 thread with this PTID, but it's marked exited, then the kernel
1346 reused the tid of an old thread. */
1347 if (tp == NULL || tp->state == THREAD_EXITED)
5b6d1e4f 1348 tp = add_thread_with_info (info->process_target, ptid, priv);
17faa917 1349 else
7aabaf9d 1350 tp->priv.reset (priv);
5365276c 1351
55f6301a 1352 if (target_has_execution ())
2db9a427 1353 check_thread_signals ();
be550b6e
DE
1354
1355 return tp;
fb0e1ba7
MK
1356}
1357
f6ac5f3d
PA
1358void
1359thread_db_target::detach (inferior *inf, int from_tty)
fb0e1ba7 1360{
5b6d1e4f 1361 delete_thread_db_info (inf->process_target (), inf->pid);
4105de34 1362
d6ca69cd 1363 beneath ()->detach (inf, from_tty);
d90e17a7
PA
1364
1365 /* NOTE: From this point on, inferior_ptid is null_ptid. */
1366
5b6d1e4f 1367 /* Detach the thread_db target from this inferior. */
fadf6add 1368 inf->unpush_target (this);
fb0e1ba7
MK
1369}
1370
f6ac5f3d
PA
1371ptid_t
1372thread_db_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
b60cea74 1373 target_wait_flags options)
fb0e1ba7 1374{
d90e17a7 1375 struct thread_db_info *info;
117de6a9 1376
5b6d1e4f
PA
1377 process_stratum_target *beneath
1378 = as_process_stratum_target (this->beneath ());
1379
1380 ptid = beneath->wait (ptid, ourstatus, options);
fb0e1ba7 1381
aa01bd36
PA
1382 switch (ourstatus->kind)
1383 {
1384 case TARGET_WAITKIND_IGNORE:
1385 case TARGET_WAITKIND_EXITED:
1386 case TARGET_WAITKIND_THREAD_EXITED:
1387 case TARGET_WAITKIND_SIGNALLED:
294c36eb 1388 case TARGET_WAITKIND_EXECD:
aa01bd36
PA
1389 return ptid;
1390 }
fb0e1ba7 1391
5b6d1e4f 1392 info = get_thread_db_info (beneath, ptid.pid ());
d90e17a7
PA
1393
1394 /* If this process isn't using thread_db, we're done. */
1395 if (info == NULL)
1396 return ptid;
1397
2db9a427 1398 /* Fill in the thread's user-level thread id and status. */
5b6d1e4f 1399 thread_from_lwp (find_thread_ptid (beneath, ptid), ptid);
fb0e1ba7 1400
b9b5d7ea 1401 return ptid;
fb0e1ba7
MK
1402}
1403
f6ac5f3d
PA
1404void
1405thread_db_target::mourn_inferior ()
fb0e1ba7 1406{
5b6d1e4f
PA
1407 process_stratum_target *target_beneath
1408 = as_process_stratum_target (this->beneath ());
1409
1410 delete_thread_db_info (target_beneath, inferior_ptid.pid ());
fb0e1ba7 1411
5b6d1e4f 1412 target_beneath->mourn_inferior ();
d90e17a7 1413
5b6d1e4f 1414 /* Detach the thread_db target from this inferior. */
fadf6add 1415 current_inferior ()->unpush_target (this);
fb0e1ba7
MK
1416}
1417
294c36eb
SM
1418void
1419thread_db_target::follow_exec (inferior *follow_inf, ptid_t ptid,
1420 const char *execd_pathname)
1421{
1422 process_stratum_target *beneath
1423 = as_process_stratum_target (this->beneath ());
1424
1425 delete_thread_db_info (beneath, ptid.pid ());
1426
1427 current_inferior ()->unpush_target (this);
1428 beneath->follow_exec (follow_inf, ptid, execd_pathname);
1429}
1430
02c6c942
PP
1431struct callback_data
1432{
1433 struct thread_db_info *info;
1434 int new_threads;
1435};
1436
fb0e1ba7
MK
1437static int
1438find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
1439{
1440 td_thrinfo_t ti;
1441 td_err_e err;
403fe197 1442 struct thread_info *tp;
9a3c8263 1443 struct callback_data *cb_data = (struct callback_data *) data;
02c6c942 1444 struct thread_db_info *info = cb_data->info;
fb0e1ba7 1445
d90e17a7 1446 err = info->td_thr_get_info_p (th_p, &ti);
fb0e1ba7 1447 if (err != TD_OK)
8a3fe4f8 1448 error (_("find_new_threads_callback: cannot get thread info: %s"),
3197744f 1449 thread_db_err_str (err));
fb0e1ba7 1450
a33e3959
PA
1451 if (ti.ti_lid == -1)
1452 {
1453 /* A thread with kernel thread ID -1 is either a thread that
1454 exited and was joined, or a thread that is being created but
1455 hasn't started yet, and that is reusing the tcb/stack of a
1456 thread that previously exited and was joined. (glibc marks
1457 terminated and joined threads with kernel thread ID -1. See
1458 glibc PR17707. */
d6c146e9
PA
1459 if (libthread_db_debug)
1460 fprintf_unfiltered (gdb_stdlog,
1461 "thread_db: skipping exited and "
d41401ac
DE
1462 "joined thread (0x%lx)\n",
1463 (unsigned long) ti.ti_tid);
a33e3959
PA
1464 return 0;
1465 }
1466
254f582e 1467 if (ti.ti_tid == 0)
4105de34
DJ
1468 {
1469 /* A thread ID of zero means that this is the main thread, but
1470 glibc has not yet initialized thread-local storage and the
1471 pthread library. We do not know what the thread's TID will
c2c2a31f 1472 be yet. */
4105de34 1473
4d062f1a
PA
1474 /* In that case, we're not stopped in a fork syscall and don't
1475 need this glibc bug workaround. */
1476 info->need_stale_parent_threads_check = 0;
1477
4105de34
DJ
1478 return 0;
1479 }
1480
4d062f1a
PA
1481 /* Ignore stale parent threads, caused by glibc/BZ5983. This is a
1482 bit expensive, as it needs to open /proc/pid/status, so try to
1483 avoid doing the work if we know we don't have to. */
1484 if (info->need_stale_parent_threads_check)
1485 {
1486 int tgid = linux_proc_get_tgid (ti.ti_lid);
e0881a8e 1487
4d062f1a
PA
1488 if (tgid != -1 && tgid != info->pid)
1489 return 0;
1490 }
1491
00431a78 1492 ptid_t ptid (info->pid, ti.ti_lid);
5b6d1e4f 1493 tp = find_thread_ptid (info->process_target, ptid);
fe978cb0 1494 if (tp == NULL || tp->priv == NULL)
60269a4a 1495 record_thread (info, tp, ptid, th_p, &ti);
fb0e1ba7
MK
1496
1497 return 0;
1498}
1499
02c6c942
PP
1500/* Helper for thread_db_find_new_threads_2.
1501 Returns number of new threads found. */
1502
1503static int
1504find_new_threads_once (struct thread_db_info *info, int iteration,
fb169834 1505 td_err_e *errp)
02c6c942 1506{
02c6c942 1507 struct callback_data data;
fb169834 1508 td_err_e err = TD_ERR;
02c6c942
PP
1509
1510 data.info = info;
1511 data.new_threads = 0;
1512
2db9a427 1513 /* See comment in thread_db_update_thread_list. */
1eb2dbb8 1514 gdb_assert (info->td_ta_thr_iter_p != NULL);
2db9a427 1515
a70b8144 1516 try
02c6c942
PP
1517 {
1518 /* Iterate over all user-space threads to discover new threads. */
1519 err = info->td_ta_thr_iter_p (info->thread_agent,
1520 find_new_threads_callback,
1521 &data,
1522 TD_THR_ANY_STATE,
1523 TD_THR_LOWEST_PRIORITY,
1524 TD_SIGNO_MASK,
1525 TD_THR_ANY_USER_FLAGS);
1526 }
230d2906 1527 catch (const gdb_exception_error &except)
02c6c942 1528 {
6c63c96a 1529 if (libthread_db_debug)
492d29ea
PA
1530 {
1531 exception_fprintf (gdb_stdlog, except,
1532 "Warning: find_new_threads_once: ");
1533 }
6c63c96a 1534 }
02c6c942 1535
6c63c96a
PA
1536 if (libthread_db_debug)
1537 {
883ed13e
PA
1538 fprintf_unfiltered (gdb_stdlog,
1539 _("Found %d new threads in iteration %d.\n"),
1540 data.new_threads, iteration);
02c6c942
PP
1541 }
1542
1543 if (errp != NULL)
1544 *errp = err;
1545
1546 return data.new_threads;
1547}
1548
4c28f408 1549/* Search for new threads, accessing memory through stopped thread
02c6c942
PP
1550 PTID. If UNTIL_NO_NEW is true, repeat searching until several
1551 searches in a row do not discover any new threads. */
4c28f408 1552
fb0e1ba7 1553static void
00431a78 1554thread_db_find_new_threads_2 (thread_info *stopped, bool until_no_new)
fb0e1ba7 1555{
fcb44371 1556 td_err_e err = TD_OK;
d90e17a7 1557 struct thread_db_info *info;
02c6c942 1558 int i, loop;
4c28f408 1559
5b6d1e4f
PA
1560 info = get_thread_db_info (stopped->inf->process_target (),
1561 stopped->ptid.pid ());
d90e17a7 1562
4c28f408 1563 /* Access an lwp we know is stopped. */
00431a78 1564 info->proc_handle.thread = stopped;
02c6c942
PP
1565
1566 if (until_no_new)
1567 {
1568 /* Require 4 successive iterations which do not find any new threads.
1569 The 4 is a heuristic: there is an inherent race here, and I have
1570 seen that 2 iterations in a row are not always sufficient to
1571 "capture" all threads. */
fcb44371
JK
1572 for (i = 0, loop = 0; loop < 4 && err == TD_OK; ++i, ++loop)
1573 if (find_new_threads_once (info, i, &err) != 0)
1574 {
1575 /* Found some new threads. Restart the loop from beginning. */
1576 loop = -1;
1577 }
02c6c942
PP
1578 }
1579 else
fcb44371
JK
1580 find_new_threads_once (info, 0, &err);
1581
1582 if (err != TD_OK)
1583 error (_("Cannot find new threads: %s"), thread_db_err_str (err));
fb0e1ba7
MK
1584}
1585
02c6c942 1586static void
00431a78 1587thread_db_find_new_threads_1 (thread_info *stopped)
02c6c942 1588{
00431a78 1589 thread_db_find_new_threads_2 (stopped, 0);
02c6c942
PP
1590}
1591
a6904d5a
PA
1592/* Implement the to_update_thread_list target method for this
1593 target. */
2db9a427 1594
f6ac5f3d
PA
1595void
1596thread_db_target::update_thread_list ()
28439f5e 1597{
d90e17a7
PA
1598 struct thread_db_info *info;
1599
e8032dde
PA
1600 prune_threads ();
1601
08036331 1602 for (inferior *inf : all_inferiors ())
c65b3e0d 1603 {
c65b3e0d
PA
1604 if (inf->pid == 0)
1605 continue;
d90e17a7 1606
5b6d1e4f 1607 info = get_thread_db_info (inf->process_target (), inf->pid);
c65b3e0d
PA
1608 if (info == NULL)
1609 continue;
1610
5b6d1e4f 1611 thread_info *thread = any_live_thread_of_inferior (inf);
c65b3e0d
PA
1612 if (thread == NULL || thread->executing)
1613 continue;
1614
a6904d5a
PA
1615 /* It's best to avoid td_ta_thr_iter if possible. That walks
1616 data structures in the inferior's address space that may be
1617 corrupted, or, if the target is running, the list may change
1618 while we walk it. In the latter case, it's possible that a
1619 thread exits just at the exact time that causes GDB to get
1620 stuck in an infinite loop. To avoid pausing all threads
1621 whenever the core wants to refresh the thread list, we
1622 instead use thread_from_lwp immediately when we see an LWP
1623 stop. That uses thread_db entry points that do not walk
1624 libpthread's thread list, so should be safe, as well as more
1625 efficient. */
5018ce90 1626 if (thread->inf->has_execution ())
a6904d5a
PA
1627 continue;
1628
00431a78 1629 thread_db_find_new_threads_1 (thread);
c65b3e0d 1630 }
2db9a427 1631
a6904d5a 1632 /* Give the beneath target a chance to do extra processing. */
b6a8c27b 1633 this->beneath ()->update_thread_list ();
28439f5e
PA
1634}
1635
a068643d 1636std::string
f6ac5f3d 1637thread_db_target::pid_to_str (ptid_t ptid)
fb0e1ba7 1638{
5b6d1e4f 1639 thread_info *thread_info = find_thread_ptid (current_inferior (), ptid);
17faa917 1640
fe978cb0 1641 if (thread_info != NULL && thread_info->priv != NULL)
fb0e1ba7 1642 {
7aabaf9d 1643 thread_db_thread_info *priv = get_thread_db_thread_info (thread_info);
fb0e1ba7 1644
a068643d
TT
1645 return string_printf ("Thread 0x%lx (LWP %ld)",
1646 (unsigned long) priv->tid, ptid.lwp ());
fb0e1ba7
MK
1647 }
1648
d6ca69cd 1649 return beneath ()->pid_to_str (ptid);
fb0e1ba7
MK
1650}
1651
28b17333
DJ
1652/* Return a string describing the state of the thread specified by
1653 INFO. */
1654
f6ac5f3d
PA
1655const char *
1656thread_db_target::extra_thread_info (thread_info *info)
28b17333 1657{
fe978cb0 1658 if (info->priv == NULL)
17faa917
DJ
1659 return NULL;
1660
7aabaf9d
SM
1661 thread_db_thread_info *priv = get_thread_db_thread_info (info);
1662
1663 if (priv->dying)
28b17333
DJ
1664 return "Exiting";
1665
1666 return NULL;
1667}
1668
e04ee09e
KB
1669/* Return pointer to the thread_info struct which corresponds to
1670 THREAD_HANDLE (having length HANDLE_LEN). */
1671
f6ac5f3d
PA
1672thread_info *
1673thread_db_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
1674 int handle_len,
1675 inferior *inf)
e04ee09e 1676{
e04ee09e
KB
1677 thread_t handle_tid;
1678
6bdfee81
KB
1679 /* When debugging a 32-bit target from a 64-bit host, handle_len
1680 will be 4 and sizeof (handle_tid) will be 8. This requires
1681 a different cast than the more straightforward case where
1682 the sizes are the same.
1683
1684 Use "--target_board unix/-m32" from a native x86_64 linux build
1685 to test the 32/64-bit case. */
1686 if (handle_len == 4 && sizeof (handle_tid) == 8)
1687 handle_tid = (thread_t) * (const uint32_t *) thread_handle;
1688 else if (handle_len == sizeof (handle_tid))
1689 handle_tid = * (const thread_t *) thread_handle;
1690 else
e04ee09e
KB
1691 error (_("Thread handle size mismatch: %d vs %zu (from libthread_db)"),
1692 handle_len, sizeof (handle_tid));
1693
08036331 1694 for (thread_info *tp : inf->non_exited_threads ())
e04ee09e 1695 {
7aabaf9d
SM
1696 thread_db_thread_info *priv = get_thread_db_thread_info (tp);
1697
08036331 1698 if (priv != NULL && handle_tid == priv->tid)
dda83cd7 1699 return tp;
e04ee09e
KB
1700 }
1701
1702 return NULL;
1703}
3d6c6204
KB
1704
1705/* Return the thread handle associated the thread_info pointer TP. */
1706
1707gdb::byte_vector
1708thread_db_target::thread_info_to_thread_handle (struct thread_info *tp)
1709{
1710 thread_db_thread_info *priv = get_thread_db_thread_info (tp);
1711
1712 if (priv == NULL)
1713 return gdb::byte_vector ();
1714
1715 int handle_size = sizeof (priv->tid);
1716 gdb::byte_vector rv (handle_size);
1717
1718 memcpy (rv.data (), &priv->tid, handle_size);
1719
1720 return rv;
1721}
e04ee09e 1722
b2756930
KB
1723/* Get the address of the thread local variable in load module LM which
1724 is stored at OFFSET within the thread local storage for thread PTID. */
3f47be5c 1725
f6ac5f3d
PA
1726CORE_ADDR
1727thread_db_target::get_thread_local_address (ptid_t ptid,
1728 CORE_ADDR lm,
1729 CORE_ADDR offset)
3f47be5c 1730{
17faa917 1731 struct thread_info *thread_info;
5b6d1e4f
PA
1732 process_stratum_target *beneath
1733 = as_process_stratum_target (this->beneath ());
17faa917 1734 /* Find the matching thread. */
5b6d1e4f 1735 thread_info = find_thread_ptid (beneath, ptid);
4105de34 1736
e0fd7c47
UW
1737 /* We may not have discovered the thread yet. */
1738 if (thread_info != NULL && thread_info->priv == NULL)
00431a78 1739 thread_info = thread_from_lwp (thread_info, ptid);
e0fd7c47 1740
fe978cb0 1741 if (thread_info != NULL && thread_info->priv != NULL)
3f47be5c 1742 {
3f47be5c 1743 td_err_e err;
00f515da 1744 psaddr_t address;
5b6d1e4f 1745 thread_db_info *info = get_thread_db_info (beneath, ptid.pid ());
7aabaf9d 1746 thread_db_thread_info *priv = get_thread_db_thread_info (thread_info);
3f47be5c 1747
3f47be5c 1748 /* Finally, get the address of the variable. */
5876f503
JK
1749 if (lm != 0)
1750 {
1751 /* glibc doesn't provide the needed interface. */
1752 if (!info->td_thr_tls_get_addr_p)
1753 throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR,
1754 _("No TLS library support"));
1755
1756 /* Note the cast through uintptr_t: this interface only works if
1757 a target address fits in a psaddr_t, which is a host pointer.
1758 So a 32-bit debugger can not access 64-bit TLS through this. */
7aabaf9d 1759 err = info->td_thr_tls_get_addr_p (&priv->th,
5876f503
JK
1760 (psaddr_t)(uintptr_t) lm,
1761 offset, &address);
1762 }
1763 else
1764 {
1765 /* If glibc doesn't provide the needed interface throw an error
1766 that LM is zero - normally cases it should not be. */
1767 if (!info->td_thr_tlsbase_p)
1768 throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
1769 _("TLS load module not found"));
1770
1771 /* This code path handles the case of -static -pthread executables:
1772 https://sourceware.org/ml/libc-help/2014-03/msg00024.html
1773 For older GNU libc r_debug.r_map is NULL. For GNU libc after
1774 PR libc/16831 due to GDB PR threads/16954 LOAD_MODULE is also NULL.
1775 The constant number 1 depends on GNU __libc_setup_tls
1776 initialization of l_tls_modid to 1. */
7aabaf9d 1777 err = info->td_thr_tlsbase_p (&priv->th, 1, &address);
5876f503
JK
1778 address = (char *) address + offset;
1779 }
3f47be5c
EZ
1780
1781#ifdef THREAD_DB_HAS_TD_NOTALLOC
1782 /* The memory hasn't been allocated, yet. */
1783 if (err == TD_NOTALLOC)
b4acd559
JJ
1784 /* Now, if libthread_db provided the initialization image's
1785 address, we *could* try to build a non-lvalue value from
1786 the initialization image. */
dda83cd7
SM
1787 throw_error (TLS_NOT_ALLOCATED_YET_ERROR,
1788 _("TLS not allocated yet"));
3f47be5c
EZ
1789#endif
1790
1791 /* Something else went wrong. */
1792 if (err != TD_OK)
dda83cd7
SM
1793 throw_error (TLS_GENERIC_ERROR,
1794 (("%s")), thread_db_err_str (err));
3f47be5c
EZ
1795
1796 /* Cast assuming host == target. Joy. */
16451949 1797 /* Do proper sign extension for the target. */
7e10abd1
TT
1798 gdb_assert (current_program_space->exec_bfd ());
1799 return (bfd_get_sign_extend_vma (current_program_space->exec_bfd ()) > 0
16451949
AS
1800 ? (CORE_ADDR) (intptr_t) address
1801 : (CORE_ADDR) (uintptr_t) address);
3f47be5c
EZ
1802 }
1803
5b6d1e4f 1804 return beneath->get_thread_local_address (ptid, lm, offset);
3f47be5c
EZ
1805}
1806
0ef643c8
JB
1807/* Implement the to_get_ada_task_ptid target method for this target. */
1808
f6ac5f3d
PA
1809ptid_t
1810thread_db_target::get_ada_task_ptid (long lwp, long thread)
0ef643c8 1811{
2db9a427 1812 /* NPTL uses a 1:1 model, so the LWP id suffices. */
e99b03dc 1813 return ptid_t (inferior_ptid.pid (), lwp, 0);
0ef643c8
JB
1814}
1815
f6ac5f3d
PA
1816void
1817thread_db_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
4d062f1a 1818{
5b6d1e4f
PA
1819 process_stratum_target *beneath
1820 = as_process_stratum_target (this->beneath ());
4d062f1a 1821
5b6d1e4f
PA
1822 thread_db_info *info
1823 = get_thread_db_info (beneath, (ptid == minus_one_ptid
1824 ? inferior_ptid.pid ()
1825 : ptid.pid ()));
4d062f1a
PA
1826
1827 /* This workaround is only needed for child fork lwps stopped in a
1828 PTRACE_O_TRACEFORK event. When the inferior is resumed, the
1829 workaround can be disabled. */
1830 if (info)
1831 info->need_stale_parent_threads_check = 0;
1832
5b6d1e4f 1833 beneath->resume (ptid, step, signo);
4d062f1a
PA
1834}
1835
9b292f68 1836/* std::sort helper function for info_auto_load_libthread_db, sort the
bf88dd68
JK
1837 thread_db_info pointers primarily by their FILENAME and secondarily by their
1838 PID, both in ascending order. */
1839
9b292f68
TT
1840static bool
1841info_auto_load_libthread_db_compare (const struct thread_db_info *a,
1842 const struct thread_db_info *b)
bf88dd68 1843{
bf88dd68
JK
1844 int retval;
1845
1846 retval = strcmp (a->filename, b->filename);
1847 if (retval)
9b292f68 1848 return retval < 0;
bf88dd68 1849
9b292f68 1850 return a->pid < b->pid;
bf88dd68
JK
1851}
1852
1853/* Implement 'info auto-load libthread-db'. */
1854
1855static void
5fed81ff 1856info_auto_load_libthread_db (const char *args, int from_tty)
bf88dd68
JK
1857{
1858 struct ui_out *uiout = current_uiout;
1859 const char *cs = args ? args : "";
9b292f68
TT
1860 struct thread_db_info *info;
1861 unsigned unique_filenames;
1862 size_t max_filename_len, pids_len;
bf88dd68
JK
1863 int i;
1864
f1735a53 1865 cs = skip_spaces (cs);
bf88dd68
JK
1866 if (*cs)
1867 error (_("'info auto-load libthread-db' does not accept any parameters"));
1868
9b292f68 1869 std::vector<struct thread_db_info *> array;
bf88dd68
JK
1870 for (info = thread_db_list; info; info = info->next)
1871 if (info->filename != NULL)
9b292f68 1872 array.push_back (info);
bf88dd68
JK
1873
1874 /* Sort ARRAY by filenames and PIDs. */
9b292f68
TT
1875 std::sort (array.begin (), array.end (),
1876 info_auto_load_libthread_db_compare);
bf88dd68
JK
1877
1878 /* Calculate the number of unique filenames (rows) and the maximum string
1879 length of PIDs list for the unique filenames (columns). */
1880
1881 unique_filenames = 0;
1882 max_filename_len = 0;
bf88dd68 1883 pids_len = 0;
9b292f68 1884 for (i = 0; i < array.size (); i++)
bf88dd68
JK
1885 {
1886 int pid = array[i]->pid;
1887 size_t this_pid_len;
1888
1889 for (this_pid_len = 0; pid != 0; pid /= 10)
1890 this_pid_len++;
1891
1892 if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
1893 {
1894 unique_filenames++;
325fac50
PA
1895 max_filename_len = std::max (max_filename_len,
1896 strlen (array[i]->filename));
bf88dd68
JK
1897
1898 if (i > 0)
9b292f68 1899 pids_len -= strlen (", ");
bf88dd68
JK
1900 pids_len = 0;
1901 }
1902 pids_len += this_pid_len + strlen (", ");
1903 }
1904 if (i)
9b292f68 1905 pids_len -= strlen (", ");
bf88dd68
JK
1906
1907 /* Table header shifted right by preceding "libthread-db: " would not match
1908 its columns. */
9b292f68 1909 if (array.size () > 0 && args == auto_load_info_scripts_pattern_nl)
112e8700 1910 uiout->text ("\n");
bf88dd68 1911
4a2b031d
TT
1912 {
1913 ui_out_emit_table table_emitter (uiout, 2, unique_filenames,
1914 "LinuxThreadDbTable");
bf88dd68 1915
4a2b031d
TT
1916 uiout->table_header (max_filename_len, ui_left, "filename", "Filename");
1917 uiout->table_header (pids_len, ui_left, "PIDs", "Pids");
1918 uiout->table_body ();
bf88dd68 1919
4a2b031d 1920 /* Note I is incremented inside the cycle, not at its end. */
9b292f68 1921 for (i = 0; i < array.size ();)
4a2b031d
TT
1922 {
1923 ui_out_emit_tuple tuple_emitter (uiout, NULL);
bf88dd68 1924
4a2b031d
TT
1925 info = array[i];
1926 uiout->field_string ("filename", info->filename);
bf88dd68 1927
9b292f68
TT
1928 std::string pids;
1929 while (i < array.size () && strcmp (info->filename,
1930 array[i]->filename) == 0)
4a2b031d 1931 {
9b292f68
TT
1932 if (!pids.empty ())
1933 pids += ", ";
1934 string_appendf (pids, "%u", array[i]->pid);
4a2b031d
TT
1935 i++;
1936 }
bf88dd68 1937
8dd8c8d4 1938 uiout->field_string ("pids", pids);
bf88dd68 1939
4a2b031d
TT
1940 uiout->text ("\n");
1941 }
1942 }
bf88dd68 1943
9b292f68 1944 if (array.empty ())
112e8700 1945 uiout->message (_("No auto-loaded libthread-db.\n"));
bf88dd68
JK
1946}
1947
5045b3d7
GB
1948/* Implement 'maintenance check libthread-db'. */
1949
1950static void
1951maintenance_check_libthread_db (const char *args, int from_tty)
1952{
e99b03dc 1953 int inferior_pid = inferior_ptid.pid ();
5045b3d7
GB
1954 struct thread_db_info *info;
1955
1956 if (inferior_pid == 0)
1957 error (_("No inferior running"));
1958
5b6d1e4f
PA
1959 info = get_thread_db_info (current_inferior ()->process_target (),
1960 inferior_pid);
5045b3d7
GB
1961 if (info == NULL)
1962 error (_("No libthread_db loaded"));
1963
1964 check_thread_db (info, true);
1965}
1966
6c265988 1967void _initialize_thread_db ();
fb0e1ba7 1968void
6c265988 1969_initialize_thread_db ()
fb0e1ba7 1970{
17a37d48
PP
1971 /* Defer loading of libthread_db.so until inferior is running.
1972 This allows gdb to load correct libthread_db for a given
4a6ed09b
PA
1973 executable -- there could be multiple versions of glibc,
1974 and until there is a running inferior, we can't tell which
1975 libthread_db is the correct one to load. */
17a37d48
PP
1976
1977 libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
1978
1979 add_setshow_optional_filename_cmd ("libthread-db-search-path",
1980 class_support,
1981 &libthread_db_search_path, _("\
1982Set search path for libthread_db."), _("\
1983Show the current search path or libthread_db."), _("\
1984This path is used to search for libthread_db to be loaded into \
84e578fb
DE
1985gdb itself.\n\
1986Its value is a colon (':') separate list of directories to search.\n\
1987Setting the search path to an empty list resets it to its default value."),
1988 set_libthread_db_search_path,
17a37d48
PP
1989 NULL,
1990 &setlist, &showlist);
02d868e8 1991
ccce17b0
YQ
1992 add_setshow_zuinteger_cmd ("libthread-db", class_maintenance,
1993 &libthread_db_debug, _("\
02d868e8
PP
1994Set libthread-db debugging."), _("\
1995Show libthread-db debugging."), _("\
1996When non-zero, libthread-db debugging is enabled."),
ccce17b0
YQ
1997 NULL,
1998 show_libthread_db_debug,
1999 &setdebuglist, &showdebuglist);
02d868e8 2000
bf88dd68
JK
2001 add_setshow_boolean_cmd ("libthread-db", class_support,
2002 &auto_load_thread_db, _("\
2003Enable or disable auto-loading of inferior specific libthread_db."), _("\
2004Show whether auto-loading inferior specific libthread_db is enabled."), _("\
2005If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n\
2006locations to load libthread_db compatible with the inferior.\n\
2007Standard system libthread_db still gets loaded even with this option off.\n\
8d8c087f 2008This option has security implications for untrusted inferiors."),
bf88dd68
JK
2009 NULL, show_auto_load_thread_db,
2010 auto_load_set_cmdlist_get (),
2011 auto_load_show_cmdlist_get ());
2012
2013 add_cmd ("libthread-db", class_info, info_auto_load_libthread_db,
2014 _("Print the list of loaded inferior specific libthread_db.\n\
2015Usage: info auto-load libthread-db"),
2016 auto_load_info_cmdlist_get ());
2017
5045b3d7
GB
2018 add_cmd ("libthread-db", class_maintenance,
2019 maintenance_check_libthread_db, _("\
2020Run integrity checks on the current inferior's libthread_db."),
2021 &maintenancechecklist);
2022
2023 add_setshow_boolean_cmd ("check-libthread-db",
2024 class_maintenance,
2025 &check_thread_db_on_load, _("\
2026Set whether to check libthread_db at load time."), _("\
2027Show whether to check libthread_db at load time."), _("\
2028If enabled GDB will run integrity checks on inferior specific libthread_db\n\
2029as they are loaded."),
2030 NULL,
2031 NULL,
2032 &maintenance_set_cmdlist,
2033 &maintenance_show_cmdlist);
2034
17a37d48 2035 /* Add ourselves to objfile event chain. */
c90e7d63 2036 gdb::observers::new_objfile.attach (thread_db_new_objfile, "linux-thread-db");
0838fb57
DE
2037
2038 /* Add ourselves to inferior_created event chain.
2039 This is needed to handle debugging statically linked programs where
2040 the new_objfile observer won't get called for libpthread. */
c90e7d63
SM
2041 gdb::observers::inferior_created.attach (thread_db_inferior_created,
2042 "linux-thread-db");
fb0e1ba7 2043}