Remove unused td_thr_validate code
[binutils-gdb.git] / gdb / linux-thread-db.c
1 /* libthread_db assisted debugging support, generic parts.
2
3 Copyright (C) 1999-2015 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 "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 "observer.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
46 #include <signal.h>
47 #include <ctype.h>
48
49 /* GNU/Linux libthread_db support.
50
51 libthread_db is a library, provided along with libpthread.so, which
52 exposes the internals of the thread library to a debugger. It
53 allows GDB to find existing threads, new threads as they are
54 created, thread IDs (usually, the result of pthread_self), and
55 thread-local variables.
56
57 The libthread_db interface originates on Solaris, where it is
58 both more powerful and more complicated. This implementation
59 only works for LinuxThreads and NPTL, the two glibc threading
60 libraries. It assumes that each thread is permanently assigned
61 to a single light-weight process (LWP).
62
63 libthread_db-specific information is stored in the "private" field
64 of struct thread_info. When the field is NULL we do not yet have
65 information about the new thread; this could be temporary (created,
66 but the thread library's data structures do not reflect it yet)
67 or permanent (created using clone instead of pthread_create).
68
69 Process IDs managed by linux-thread-db.c match those used by
70 linux-nat.c: a common PID for all processes, an LWP ID for each
71 thread, and no TID. We save the TID in private. Keeping it out
72 of the ptid_t prevents thread IDs changing when libpthread is
73 loaded or unloaded. */
74
75 static char *libthread_db_search_path;
76
77 /* Set to non-zero if thread_db auto-loading is enabled
78 by the "set auto-load libthread-db" command. */
79 static int auto_load_thread_db = 1;
80
81 /* Returns true if we need to use thread_db thread create/death event
82 breakpoints to learn about threads. */
83
84 static int
85 thread_db_use_events (void)
86 {
87 /* Not necessary if the kernel supports clone events. */
88 return !linux_supports_traceclone ();
89 }
90
91 /* "show" command for the auto_load_thread_db configuration variable. */
92
93 static void
94 show_auto_load_thread_db (struct ui_file *file, int from_tty,
95 struct cmd_list_element *c, const char *value)
96 {
97 fprintf_filtered (file, _("Auto-loading of inferior specific libthread_db "
98 "is %s.\n"),
99 value);
100 }
101
102 static void
103 set_libthread_db_search_path (char *ignored, int from_tty,
104 struct cmd_list_element *c)
105 {
106 if (*libthread_db_search_path == '\0')
107 {
108 xfree (libthread_db_search_path);
109 libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
110 }
111 }
112
113 /* If non-zero, print details of libthread_db processing. */
114
115 static unsigned int libthread_db_debug;
116
117 static void
118 show_libthread_db_debug (struct ui_file *file, int from_tty,
119 struct cmd_list_element *c, const char *value)
120 {
121 fprintf_filtered (file, _("libthread-db debugging is %s.\n"), value);
122 }
123
124 /* If we're running on GNU/Linux, we must explicitly attach to any new
125 threads. */
126
127 /* This module's target vector. */
128 static struct target_ops thread_db_ops;
129
130 /* Non-zero if we have determined the signals used by the threads
131 library. */
132 static int thread_signals;
133 static sigset_t thread_stop_set;
134 static sigset_t thread_print_set;
135
136 struct thread_db_info
137 {
138 struct thread_db_info *next;
139
140 /* Process id this object refers to. */
141 int pid;
142
143 /* Handle from dlopen for libthread_db.so. */
144 void *handle;
145
146 /* Absolute pathname from gdb_realpath to disk file used for dlopen-ing
147 HANDLE. It may be NULL for system library. */
148 char *filename;
149
150 /* Structure that identifies the child process for the
151 <proc_service.h> interface. */
152 struct ps_prochandle proc_handle;
153
154 /* Connection to the libthread_db library. */
155 td_thragent_t *thread_agent;
156
157 /* True if we need to apply the workaround for glibc/BZ5983. When
158 we catch a PTRACE_O_TRACEFORK, and go query the child's thread
159 list, nptl_db returns the parent's threads in addition to the new
160 (single) child thread. If this flag is set, we do extra work to
161 be able to ignore such stale entries. */
162 int need_stale_parent_threads_check;
163
164 /* Location of the thread creation event breakpoint. The code at
165 this location in the child process will be called by the pthread
166 library whenever a new thread is created. By setting a special
167 breakpoint at this location, GDB can detect when a new thread is
168 created. We obtain this location via the td_ta_event_addr
169 call. */
170 CORE_ADDR td_create_bp_addr;
171
172 /* Location of the thread death event breakpoint. */
173 CORE_ADDR td_death_bp_addr;
174
175 /* Pointers to the libthread_db functions. */
176
177 td_err_e (*td_init_p) (void);
178
179 td_err_e (*td_ta_new_p) (struct ps_prochandle * ps,
180 td_thragent_t **ta);
181 td_err_e (*td_ta_map_id2thr_p) (const td_thragent_t *ta, thread_t pt,
182 td_thrhandle_t *__th);
183 td_err_e (*td_ta_map_lwp2thr_p) (const td_thragent_t *ta,
184 lwpid_t lwpid, td_thrhandle_t *th);
185 td_err_e (*td_ta_thr_iter_p) (const td_thragent_t *ta,
186 td_thr_iter_f *callback, void *cbdata_p,
187 td_thr_state_e state, int ti_pri,
188 sigset_t *ti_sigmask_p,
189 unsigned int ti_user_flags);
190 td_err_e (*td_ta_event_addr_p) (const td_thragent_t *ta,
191 td_event_e event, td_notify_t *ptr);
192 td_err_e (*td_ta_set_event_p) (const td_thragent_t *ta,
193 td_thr_events_t *event);
194 td_err_e (*td_ta_clear_event_p) (const td_thragent_t *ta,
195 td_thr_events_t *event);
196 td_err_e (*td_ta_event_getmsg_p) (const td_thragent_t *ta,
197 td_event_msg_t *msg);
198
199 td_err_e (*td_thr_get_info_p) (const td_thrhandle_t *th,
200 td_thrinfo_t *infop);
201 td_err_e (*td_thr_event_enable_p) (const td_thrhandle_t *th,
202 int event);
203
204 td_err_e (*td_thr_tls_get_addr_p) (const td_thrhandle_t *th,
205 psaddr_t map_address,
206 size_t offset, psaddr_t *address);
207 td_err_e (*td_thr_tlsbase_p) (const td_thrhandle_t *th,
208 unsigned long int modid,
209 psaddr_t *base);
210 };
211
212 /* List of known processes using thread_db, and the required
213 bookkeeping. */
214 struct thread_db_info *thread_db_list;
215
216 static void thread_db_find_new_threads_1 (ptid_t ptid);
217 static void thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new);
218
219 static void check_thread_signals (void);
220
221 static void record_thread (struct thread_db_info *info,
222 struct thread_info *tp,
223 ptid_t ptid, const td_thrhandle_t *th_p,
224 const td_thrinfo_t *ti_p);
225
226 /* Add the current inferior to the list of processes using libpthread.
227 Return a pointer to the newly allocated object that was added to
228 THREAD_DB_LIST. HANDLE is the handle returned by dlopen'ing
229 LIBTHREAD_DB_SO. */
230
231 static struct thread_db_info *
232 add_thread_db_info (void *handle)
233 {
234 struct thread_db_info *info;
235
236 info = xcalloc (1, sizeof (*info));
237 info->pid = ptid_get_pid (inferior_ptid);
238 info->handle = handle;
239
240 /* The workaround works by reading from /proc/pid/status, so it is
241 disabled for core files. */
242 if (target_has_execution)
243 info->need_stale_parent_threads_check = 1;
244
245 info->next = thread_db_list;
246 thread_db_list = info;
247
248 return info;
249 }
250
251 /* Return the thread_db_info object representing the bookkeeping
252 related to process PID, if any; NULL otherwise. */
253
254 static struct thread_db_info *
255 get_thread_db_info (int pid)
256 {
257 struct thread_db_info *info;
258
259 for (info = thread_db_list; info; info = info->next)
260 if (pid == info->pid)
261 return info;
262
263 return NULL;
264 }
265
266 /* When PID has exited or has been detached, we no longer want to keep
267 track of it as using libpthread. Call this function to discard
268 thread_db related info related to PID. Note that this closes
269 LIBTHREAD_DB_SO's dlopen'ed handle. */
270
271 static void
272 delete_thread_db_info (int pid)
273 {
274 struct thread_db_info *info, *info_prev;
275
276 info_prev = NULL;
277
278 for (info = thread_db_list; info; info_prev = info, info = info->next)
279 if (pid == info->pid)
280 break;
281
282 if (info == NULL)
283 return;
284
285 if (info->handle != NULL)
286 dlclose (info->handle);
287
288 xfree (info->filename);
289
290 if (info_prev)
291 info_prev->next = info->next;
292 else
293 thread_db_list = info->next;
294
295 xfree (info);
296 }
297
298 /* Prototypes for local functions. */
299 static int attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
300 const td_thrinfo_t *ti_p);
301 static void detach_thread (ptid_t ptid);
302 \f
303
304 /* Use "struct private_thread_info" to cache thread state. This is
305 a substantial optimization. */
306
307 struct private_thread_info
308 {
309 /* Flag set when we see a TD_DEATH event for this thread. */
310 unsigned int dying:1;
311
312 /* Cached thread state. */
313 td_thrhandle_t th;
314 thread_t tid;
315 };
316 \f
317
318 static char *
319 thread_db_err_str (td_err_e err)
320 {
321 static char buf[64];
322
323 switch (err)
324 {
325 case TD_OK:
326 return "generic 'call succeeded'";
327 case TD_ERR:
328 return "generic error";
329 case TD_NOTHR:
330 return "no thread to satisfy query";
331 case TD_NOSV:
332 return "no sync handle to satisfy query";
333 case TD_NOLWP:
334 return "no LWP to satisfy query";
335 case TD_BADPH:
336 return "invalid process handle";
337 case TD_BADTH:
338 return "invalid thread handle";
339 case TD_BADSH:
340 return "invalid synchronization handle";
341 case TD_BADTA:
342 return "invalid thread agent";
343 case TD_BADKEY:
344 return "invalid key";
345 case TD_NOMSG:
346 return "no event message for getmsg";
347 case TD_NOFPREGS:
348 return "FPU register set not available";
349 case TD_NOLIBTHREAD:
350 return "application not linked with libthread";
351 case TD_NOEVENT:
352 return "requested event is not supported";
353 case TD_NOCAPAB:
354 return "capability not available";
355 case TD_DBERR:
356 return "debugger service failed";
357 case TD_NOAPLIC:
358 return "operation not applicable to";
359 case TD_NOTSD:
360 return "no thread-specific data for this thread";
361 case TD_MALLOC:
362 return "malloc failed";
363 case TD_PARTIALREG:
364 return "only part of register set was written/read";
365 case TD_NOXREGS:
366 return "X register set not available for this thread";
367 #ifdef THREAD_DB_HAS_TD_NOTALLOC
368 case TD_NOTALLOC:
369 return "thread has not yet allocated TLS for given module";
370 #endif
371 #ifdef THREAD_DB_HAS_TD_VERSION
372 case TD_VERSION:
373 return "versions of libpthread and libthread_db do not match";
374 #endif
375 #ifdef THREAD_DB_HAS_TD_NOTLS
376 case TD_NOTLS:
377 return "there is no TLS segment in the given module";
378 #endif
379 default:
380 snprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err);
381 return buf;
382 }
383 }
384 \f
385 /* Return 1 if any threads have been registered. There may be none if
386 the threading library is not fully initialized yet. */
387
388 static int
389 have_threads_callback (struct thread_info *thread, void *args)
390 {
391 int pid = * (int *) args;
392
393 if (ptid_get_pid (thread->ptid) != pid)
394 return 0;
395
396 return thread->priv != NULL;
397 }
398
399 static int
400 have_threads (ptid_t ptid)
401 {
402 int pid = ptid_get_pid (ptid);
403
404 return iterate_over_threads (have_threads_callback, &pid) != NULL;
405 }
406
407 \f
408 /* Fetch the user-level thread id of PTID. */
409
410 static void
411 thread_from_lwp (ptid_t ptid)
412 {
413 td_thrhandle_t th;
414 td_thrinfo_t ti;
415 td_err_e err;
416 struct thread_db_info *info;
417 struct thread_info *tp;
418
419 /* Just in case td_ta_map_lwp2thr doesn't initialize it completely. */
420 th.th_unique = 0;
421
422 /* This ptid comes from linux-nat.c, which should always fill in the
423 LWP. */
424 gdb_assert (ptid_get_lwp (ptid) != 0);
425
426 info = get_thread_db_info (ptid_get_pid (ptid));
427
428 /* Access an lwp we know is stopped. */
429 info->proc_handle.ptid = ptid;
430 err = info->td_ta_map_lwp2thr_p (info->thread_agent, ptid_get_lwp (ptid),
431 &th);
432 if (err != TD_OK)
433 error (_("Cannot find user-level thread for LWP %ld: %s"),
434 ptid_get_lwp (ptid), thread_db_err_str (err));
435
436 err = info->td_thr_get_info_p (&th, &ti);
437 if (err != TD_OK)
438 error (_("thread_get_info_callback: cannot get thread info: %s"),
439 thread_db_err_str (err));
440
441 /* Fill the cache. */
442 tp = find_thread_ptid (ptid);
443 record_thread (info, tp, ptid, &th, &ti);
444 }
445 \f
446
447 /* See linux-nat.h. */
448
449 int
450 thread_db_notice_clone (ptid_t parent, ptid_t child)
451 {
452 td_thrhandle_t th;
453 td_thrinfo_t ti;
454 td_err_e err;
455 struct thread_db_info *info;
456
457 info = get_thread_db_info (ptid_get_pid (child));
458
459 if (info == NULL)
460 return 0;
461
462 thread_from_lwp (child);
463
464 /* If we do not know about the main thread yet, this would be a good
465 time to find it. */
466 thread_from_lwp (parent);
467 return 1;
468 }
469
470 static void *
471 verbose_dlsym (void *handle, const char *name)
472 {
473 void *sym = dlsym (handle, name);
474 if (sym == NULL)
475 warning (_("Symbol \"%s\" not found in libthread_db: %s"),
476 name, dlerror ());
477 return sym;
478 }
479
480 static td_err_e
481 enable_thread_event (int event, CORE_ADDR *bp)
482 {
483 td_notify_t notify;
484 td_err_e err;
485 struct thread_db_info *info;
486
487 info = get_thread_db_info (ptid_get_pid (inferior_ptid));
488
489 /* Access an lwp we know is stopped. */
490 info->proc_handle.ptid = inferior_ptid;
491
492 /* Get the breakpoint address for thread EVENT. */
493 err = info->td_ta_event_addr_p (info->thread_agent, event, &notify);
494 if (err != TD_OK)
495 return err;
496
497 /* Set up the breakpoint. */
498 gdb_assert (exec_bfd);
499 (*bp) = (gdbarch_convert_from_func_ptr_addr
500 (target_gdbarch (),
501 /* Do proper sign extension for the target. */
502 (bfd_get_sign_extend_vma (exec_bfd) > 0
503 ? (CORE_ADDR) (intptr_t) notify.u.bptaddr
504 : (CORE_ADDR) (uintptr_t) notify.u.bptaddr),
505 &current_target));
506 create_thread_event_breakpoint (target_gdbarch (), *bp);
507
508 return TD_OK;
509 }
510
511 /* Verify inferior's '\0'-terminated symbol VER_SYMBOL starts with "%d.%d" and
512 return 1 if this version is lower (and not equal) to
513 VER_MAJOR_MIN.VER_MINOR_MIN. Return 0 in all other cases. */
514
515 static int
516 inferior_has_bug (const char *ver_symbol, int ver_major_min, int ver_minor_min)
517 {
518 struct bound_minimal_symbol version_msym;
519 CORE_ADDR version_addr;
520 char *version;
521 int err, got, retval = 0;
522
523 version_msym = lookup_minimal_symbol (ver_symbol, NULL, NULL);
524 if (version_msym.minsym == NULL)
525 return 0;
526
527 version_addr = BMSYMBOL_VALUE_ADDRESS (version_msym);
528 got = target_read_string (version_addr, &version, 32, &err);
529 if (err == 0 && memchr (version, 0, got) == &version[got -1])
530 {
531 int major, minor;
532
533 retval = (sscanf (version, "%d.%d", &major, &minor) == 2
534 && (major < ver_major_min
535 || (major == ver_major_min && minor < ver_minor_min)));
536 }
537 xfree (version);
538
539 return retval;
540 }
541
542 static void
543 enable_thread_event_reporting (void)
544 {
545 td_thr_events_t events;
546 td_err_e err;
547 struct thread_db_info *info;
548
549 info = get_thread_db_info (ptid_get_pid (inferior_ptid));
550
551 /* We cannot use the thread event reporting facility if these
552 functions aren't available. */
553 if (info->td_ta_event_addr_p == NULL
554 || info->td_ta_set_event_p == NULL
555 || info->td_ta_event_getmsg_p == NULL
556 || info->td_thr_event_enable_p == NULL)
557 return;
558
559 /* Set the process wide mask saying which events we're interested in. */
560 td_event_emptyset (&events);
561 td_event_addset (&events, TD_CREATE);
562
563 /* There is a bug fixed between linuxthreads 2.1.3 and 2.2 by
564 commit 2e4581e4fba917f1779cd0a010a45698586c190a
565 * manager.c (pthread_exited): Correctly report event as TD_REAP
566 instead of TD_DEATH. Fix comments.
567 where event reporting facility is broken for TD_DEATH events,
568 so don't enable it if we have glibc but a lower version. */
569 if (!inferior_has_bug ("__linuxthreads_version", 2, 2))
570 td_event_addset (&events, TD_DEATH);
571
572 err = info->td_ta_set_event_p (info->thread_agent, &events);
573 if (err != TD_OK)
574 {
575 warning (_("Unable to set global thread event mask: %s"),
576 thread_db_err_str (err));
577 return;
578 }
579
580 /* Delete previous thread event breakpoints, if any. */
581 remove_thread_event_breakpoints ();
582 info->td_create_bp_addr = 0;
583 info->td_death_bp_addr = 0;
584
585 /* Set up the thread creation event. */
586 err = enable_thread_event (TD_CREATE, &info->td_create_bp_addr);
587 if (err != TD_OK)
588 {
589 warning (_("Unable to get location for thread creation breakpoint: %s"),
590 thread_db_err_str (err));
591 return;
592 }
593
594 /* Set up the thread death event. */
595 err = enable_thread_event (TD_DEATH, &info->td_death_bp_addr);
596 if (err != TD_OK)
597 {
598 warning (_("Unable to get location for thread death breakpoint: %s"),
599 thread_db_err_str (err));
600 return;
601 }
602 }
603
604 /* Similar as thread_db_find_new_threads_1, but try to silently ignore errors
605 if appropriate.
606
607 Return 1 if the caller should abort libthread_db initialization. Return 0
608 otherwise. */
609
610 static int
611 thread_db_find_new_threads_silently (ptid_t ptid)
612 {
613
614 TRY
615 {
616 thread_db_find_new_threads_2 (ptid, 1);
617 }
618
619 CATCH (except, RETURN_MASK_ERROR)
620 {
621 if (libthread_db_debug)
622 exception_fprintf (gdb_stdlog, except,
623 "Warning: thread_db_find_new_threads_silently: ");
624
625 /* There is a bug fixed between nptl 2.6.1 and 2.7 by
626 commit 7d9d8bd18906fdd17364f372b160d7ab896ce909
627 where calls to td_thr_get_info fail with TD_ERR for statically linked
628 executables if td_thr_get_info is called before glibc has initialized
629 itself.
630
631 If the nptl bug is NOT present in the inferior and still thread_db
632 reports an error return 1. It means the inferior has corrupted thread
633 list and GDB should fall back only to LWPs.
634
635 If the nptl bug is present in the inferior return 0 to silently ignore
636 such errors, and let gdb enumerate threads again later. In such case
637 GDB cannot properly display LWPs if the inferior thread list is
638 corrupted. For core files it does not apply, no 'later enumeration'
639 is possible. */
640
641 if (!target_has_execution || !inferior_has_bug ("nptl_version", 2, 7))
642 {
643 exception_fprintf (gdb_stderr, except,
644 _("Warning: couldn't activate thread debugging "
645 "using libthread_db: "));
646 return 1;
647 }
648 }
649 END_CATCH
650
651 return 0;
652 }
653
654 /* Lookup a library in which given symbol resides.
655 Note: this is looking in GDB process, not in the inferior.
656 Returns library name, or NULL. */
657
658 static const char *
659 dladdr_to_soname (const void *addr)
660 {
661 Dl_info info;
662
663 if (dladdr (addr, &info) != 0)
664 return info.dli_fname;
665 return NULL;
666 }
667
668 /* Attempt to initialize dlopen()ed libthread_db, described by INFO.
669 Return 1 on success.
670 Failure could happen if libthread_db does not have symbols we expect,
671 or when it refuses to work with the current inferior (e.g. due to
672 version mismatch between libthread_db and libpthread). */
673
674 static int
675 try_thread_db_load_1 (struct thread_db_info *info)
676 {
677 td_err_e err;
678
679 /* Initialize pointers to the dynamic library functions we will use.
680 Essential functions first. */
681
682 info->td_init_p = verbose_dlsym (info->handle, "td_init");
683 if (info->td_init_p == NULL)
684 return 0;
685
686 err = info->td_init_p ();
687 if (err != TD_OK)
688 {
689 warning (_("Cannot initialize libthread_db: %s"),
690 thread_db_err_str (err));
691 return 0;
692 }
693
694 info->td_ta_new_p = verbose_dlsym (info->handle, "td_ta_new");
695 if (info->td_ta_new_p == NULL)
696 return 0;
697
698 /* Initialize the structure that identifies the child process. */
699 info->proc_handle.ptid = inferior_ptid;
700
701 /* Now attempt to open a connection to the thread library. */
702 err = info->td_ta_new_p (&info->proc_handle, &info->thread_agent);
703 if (err != TD_OK)
704 {
705 if (libthread_db_debug)
706 fprintf_unfiltered (gdb_stdlog, _("td_ta_new failed: %s\n"),
707 thread_db_err_str (err));
708 else
709 switch (err)
710 {
711 case TD_NOLIBTHREAD:
712 #ifdef THREAD_DB_HAS_TD_VERSION
713 case TD_VERSION:
714 #endif
715 /* The errors above are not unexpected and silently ignored:
716 they just mean we haven't found correct version of
717 libthread_db yet. */
718 break;
719 default:
720 warning (_("td_ta_new failed: %s"), thread_db_err_str (err));
721 }
722 return 0;
723 }
724
725 info->td_ta_map_id2thr_p = verbose_dlsym (info->handle, "td_ta_map_id2thr");
726 if (info->td_ta_map_id2thr_p == NULL)
727 return 0;
728
729 info->td_ta_map_lwp2thr_p = verbose_dlsym (info->handle,
730 "td_ta_map_lwp2thr");
731 if (info->td_ta_map_lwp2thr_p == NULL)
732 return 0;
733
734 info->td_ta_thr_iter_p = verbose_dlsym (info->handle, "td_ta_thr_iter");
735 if (info->td_ta_thr_iter_p == NULL)
736 return 0;
737
738 info->td_thr_get_info_p = verbose_dlsym (info->handle, "td_thr_get_info");
739 if (info->td_thr_get_info_p == NULL)
740 return 0;
741
742 /* These are not essential. */
743 info->td_ta_event_addr_p = dlsym (info->handle, "td_ta_event_addr");
744 info->td_ta_set_event_p = dlsym (info->handle, "td_ta_set_event");
745 info->td_ta_clear_event_p = dlsym (info->handle, "td_ta_clear_event");
746 info->td_ta_event_getmsg_p = dlsym (info->handle, "td_ta_event_getmsg");
747 info->td_thr_event_enable_p = dlsym (info->handle, "td_thr_event_enable");
748 info->td_thr_tls_get_addr_p = dlsym (info->handle, "td_thr_tls_get_addr");
749 info->td_thr_tlsbase_p = dlsym (info->handle, "td_thr_tlsbase");
750
751 /* It's best to avoid td_ta_thr_iter if possible. That walks data
752 structures in the inferior's address space that may be corrupted,
753 or, if the target is running, may change while we walk them. If
754 there's execution (and /proc is mounted), then we're already
755 attached to all LWPs. Use thread_from_lwp, which uses
756 td_ta_map_lwp2thr instead, which does not walk the thread list.
757
758 td_ta_map_lwp2thr uses ps_get_thread_area, but we can't use that
759 currently on core targets, as it uses ptrace directly. */
760 if (target_has_execution
761 && linux_proc_task_list_dir_exists (ptid_get_pid (inferior_ptid)))
762 {
763 struct lwp_info *lp;
764 int pid = ptid_get_pid (inferior_ptid);
765
766 linux_stop_and_wait_all_lwps ();
767
768 ALL_LWPS (lp)
769 if (ptid_get_pid (lp->ptid) == pid)
770 thread_from_lwp (lp->ptid);
771
772 linux_unstop_all_lwps ();
773 }
774 else if (thread_db_find_new_threads_silently (inferior_ptid) != 0)
775 {
776 /* Even if libthread_db initializes, if the thread list is
777 corrupted, we'd not manage to list any threads. Better reject this
778 thread_db, and fall back to at least listing LWPs. */
779 return 0;
780 }
781
782 printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
783
784 if (*libthread_db_search_path || libthread_db_debug)
785 {
786 struct ui_file *file;
787 const char *library;
788
789 library = dladdr_to_soname (*info->td_ta_new_p);
790 if (library == NULL)
791 library = LIBTHREAD_DB_SO;
792
793 /* If we'd print this to gdb_stdout when debug output is
794 disabled, still print it to gdb_stdout if debug output is
795 enabled. User visible output should not depend on debug
796 settings. */
797 file = *libthread_db_search_path != '\0' ? gdb_stdout : gdb_stdlog;
798 fprintf_unfiltered (file, _("Using host libthread_db library \"%s\".\n"),
799 library);
800 }
801
802 /* The thread library was detected. Activate the thread_db target
803 if this is the first process using it. */
804 if (thread_db_list->next == NULL)
805 push_target (&thread_db_ops);
806
807 /* Enable event reporting, but not when debugging a core file. */
808 if (target_has_execution && thread_db_use_events ())
809 enable_thread_event_reporting ();
810
811 return 1;
812 }
813
814 /* Attempt to use LIBRARY as libthread_db. LIBRARY could be absolute,
815 relative, or just LIBTHREAD_DB. */
816
817 static int
818 try_thread_db_load (const char *library, int check_auto_load_safe)
819 {
820 void *handle;
821 struct thread_db_info *info;
822
823 if (libthread_db_debug)
824 fprintf_unfiltered (gdb_stdlog,
825 _("Trying host libthread_db library: %s.\n"),
826 library);
827
828 if (check_auto_load_safe)
829 {
830 if (access (library, R_OK) != 0)
831 {
832 /* Do not print warnings by file_is_auto_load_safe if the library does
833 not exist at this place. */
834 if (libthread_db_debug)
835 fprintf_unfiltered (gdb_stdlog, _("open failed: %s.\n"),
836 safe_strerror (errno));
837 return 0;
838 }
839
840 if (!file_is_auto_load_safe (library, _("auto-load: Loading libthread-db "
841 "library \"%s\" from explicit "
842 "directory.\n"),
843 library))
844 return 0;
845 }
846
847 handle = dlopen (library, RTLD_NOW);
848 if (handle == NULL)
849 {
850 if (libthread_db_debug)
851 fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
852 return 0;
853 }
854
855 if (libthread_db_debug && strchr (library, '/') == NULL)
856 {
857 void *td_init;
858
859 td_init = dlsym (handle, "td_init");
860 if (td_init != NULL)
861 {
862 const char *const libpath = dladdr_to_soname (td_init);
863
864 if (libpath != NULL)
865 fprintf_unfiltered (gdb_stdlog, _("Host %s resolved to: %s.\n"),
866 library, libpath);
867 }
868 }
869
870 info = add_thread_db_info (handle);
871
872 /* Do not save system library name, that one is always trusted. */
873 if (strchr (library, '/') != NULL)
874 info->filename = gdb_realpath (library);
875
876 if (try_thread_db_load_1 (info))
877 return 1;
878
879 /* This library "refused" to work on current inferior. */
880 delete_thread_db_info (ptid_get_pid (inferior_ptid));
881 return 0;
882 }
883
884 /* Subroutine of try_thread_db_load_from_pdir to simplify it.
885 Try loading libthread_db in directory(OBJ)/SUBDIR.
886 SUBDIR may be NULL. It may also be something like "../lib64".
887 The result is true for success. */
888
889 static int
890 try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
891 {
892 struct cleanup *cleanup;
893 char *path, *cp;
894 int result;
895 const char *obj_name = objfile_name (obj);
896
897 if (obj_name[0] != '/')
898 {
899 warning (_("Expected absolute pathname for libpthread in the"
900 " inferior, but got %s."), obj_name);
901 return 0;
902 }
903
904 path = xmalloc (strlen (obj_name) + (subdir ? strlen (subdir) + 1 : 0)
905 + 1 + strlen (LIBTHREAD_DB_SO) + 1);
906 cleanup = make_cleanup (xfree, path);
907
908 strcpy (path, obj_name);
909 cp = strrchr (path, '/');
910 /* This should at minimum hit the first character. */
911 gdb_assert (cp != NULL);
912 cp[1] = '\0';
913 if (subdir != NULL)
914 {
915 strcat (cp, subdir);
916 strcat (cp, "/");
917 }
918 strcat (cp, LIBTHREAD_DB_SO);
919
920 result = try_thread_db_load (path, 1);
921
922 do_cleanups (cleanup);
923 return result;
924 }
925
926 /* Handle $pdir in libthread-db-search-path.
927 Look for libthread_db in directory(libpthread)/SUBDIR.
928 SUBDIR may be NULL. It may also be something like "../lib64".
929 The result is true for success. */
930
931 static int
932 try_thread_db_load_from_pdir (const char *subdir)
933 {
934 struct objfile *obj;
935
936 if (!auto_load_thread_db)
937 return 0;
938
939 ALL_OBJFILES (obj)
940 if (libpthread_name_p (objfile_name (obj)))
941 {
942 if (try_thread_db_load_from_pdir_1 (obj, subdir))
943 return 1;
944
945 /* We may have found the separate-debug-info version of
946 libpthread, and it may live in a directory without a matching
947 libthread_db. */
948 if (obj->separate_debug_objfile_backlink != NULL)
949 return try_thread_db_load_from_pdir_1 (obj->separate_debug_objfile_backlink,
950 subdir);
951
952 return 0;
953 }
954
955 return 0;
956 }
957
958 /* Handle $sdir in libthread-db-search-path.
959 Look for libthread_db in the system dirs, or wherever a plain
960 dlopen(file_without_path) will look.
961 The result is true for success. */
962
963 static int
964 try_thread_db_load_from_sdir (void)
965 {
966 return try_thread_db_load (LIBTHREAD_DB_SO, 0);
967 }
968
969 /* Try to load libthread_db from directory DIR of length DIR_LEN.
970 The result is true for success. */
971
972 static int
973 try_thread_db_load_from_dir (const char *dir, size_t dir_len)
974 {
975 struct cleanup *cleanup;
976 char *path;
977 int result;
978
979 if (!auto_load_thread_db)
980 return 0;
981
982 path = xmalloc (dir_len + 1 + strlen (LIBTHREAD_DB_SO) + 1);
983 cleanup = make_cleanup (xfree, path);
984
985 memcpy (path, dir, dir_len);
986 path[dir_len] = '/';
987 strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
988
989 result = try_thread_db_load (path, 1);
990
991 do_cleanups (cleanup);
992 return result;
993 }
994
995 /* Search libthread_db_search_path for libthread_db which "agrees"
996 to work on current inferior.
997 The result is true for success. */
998
999 static int
1000 thread_db_load_search (void)
1001 {
1002 VEC (char_ptr) *dir_vec;
1003 struct cleanup *cleanups;
1004 char *this_dir;
1005 int i, rc = 0;
1006
1007 dir_vec = dirnames_to_char_ptr_vec (libthread_db_search_path);
1008 cleanups = make_cleanup_free_char_ptr_vec (dir_vec);
1009
1010 for (i = 0; VEC_iterate (char_ptr, dir_vec, i, this_dir); ++i)
1011 {
1012 const int pdir_len = sizeof ("$pdir") - 1;
1013 size_t this_dir_len;
1014
1015 this_dir_len = strlen (this_dir);
1016
1017 if (strncmp (this_dir, "$pdir", pdir_len) == 0
1018 && (this_dir[pdir_len] == '\0'
1019 || this_dir[pdir_len] == '/'))
1020 {
1021 char *subdir = NULL;
1022 struct cleanup *free_subdir_cleanup
1023 = make_cleanup (null_cleanup, NULL);
1024
1025 if (this_dir[pdir_len] == '/')
1026 {
1027 subdir = xmalloc (strlen (this_dir));
1028 make_cleanup (xfree, subdir);
1029 strcpy (subdir, this_dir + pdir_len + 1);
1030 }
1031 rc = try_thread_db_load_from_pdir (subdir);
1032 do_cleanups (free_subdir_cleanup);
1033 if (rc)
1034 break;
1035 }
1036 else if (strcmp (this_dir, "$sdir") == 0)
1037 {
1038 if (try_thread_db_load_from_sdir ())
1039 {
1040 rc = 1;
1041 break;
1042 }
1043 }
1044 else
1045 {
1046 if (try_thread_db_load_from_dir (this_dir, this_dir_len))
1047 {
1048 rc = 1;
1049 break;
1050 }
1051 }
1052 }
1053
1054 do_cleanups (cleanups);
1055 if (libthread_db_debug)
1056 fprintf_unfiltered (gdb_stdlog,
1057 _("thread_db_load_search returning %d\n"), rc);
1058 return rc;
1059 }
1060
1061 /* Return non-zero if the inferior has a libpthread. */
1062
1063 static int
1064 has_libpthread (void)
1065 {
1066 struct objfile *obj;
1067
1068 ALL_OBJFILES (obj)
1069 if (libpthread_name_p (objfile_name (obj)))
1070 return 1;
1071
1072 return 0;
1073 }
1074
1075 /* Attempt to load and initialize libthread_db.
1076 Return 1 on success. */
1077
1078 static int
1079 thread_db_load (void)
1080 {
1081 struct thread_db_info *info;
1082
1083 info = get_thread_db_info (ptid_get_pid (inferior_ptid));
1084
1085 if (info != NULL)
1086 return 1;
1087
1088 /* Don't attempt to use thread_db on executables not running
1089 yet. */
1090 if (!target_has_registers)
1091 return 0;
1092
1093 /* Don't attempt to use thread_db for remote targets. */
1094 if (!(target_can_run (&current_target) || core_bfd))
1095 return 0;
1096
1097 if (thread_db_load_search ())
1098 return 1;
1099
1100 /* We couldn't find a libthread_db.
1101 If the inferior has a libpthread warn the user. */
1102 if (has_libpthread ())
1103 {
1104 warning (_("Unable to find libthread_db matching inferior's thread"
1105 " library, thread debugging will not be available."));
1106 return 0;
1107 }
1108
1109 /* Either this executable isn't using libpthread at all, or it is
1110 statically linked. Since we can't easily distinguish these two cases,
1111 no warning is issued. */
1112 return 0;
1113 }
1114
1115 static void
1116 disable_thread_event_reporting (struct thread_db_info *info)
1117 {
1118 if (info->td_ta_clear_event_p != NULL)
1119 {
1120 td_thr_events_t events;
1121
1122 /* Set the process wide mask saying we aren't interested in any
1123 events anymore. */
1124 td_event_fillset (&events);
1125 info->td_ta_clear_event_p (info->thread_agent, &events);
1126 }
1127
1128 info->td_create_bp_addr = 0;
1129 info->td_death_bp_addr = 0;
1130 }
1131
1132 static void
1133 check_thread_signals (void)
1134 {
1135 if (!thread_signals)
1136 {
1137 sigset_t mask;
1138 int i;
1139
1140 lin_thread_get_thread_signals (&mask);
1141 sigemptyset (&thread_stop_set);
1142 sigemptyset (&thread_print_set);
1143
1144 for (i = 1; i < NSIG; i++)
1145 {
1146 if (sigismember (&mask, i))
1147 {
1148 if (signal_stop_update (gdb_signal_from_host (i), 0))
1149 sigaddset (&thread_stop_set, i);
1150 if (signal_print_update (gdb_signal_from_host (i), 0))
1151 sigaddset (&thread_print_set, i);
1152 thread_signals = 1;
1153 }
1154 }
1155 }
1156 }
1157
1158 /* Check whether thread_db is usable. This function is called when
1159 an inferior is created (or otherwise acquired, e.g. attached to)
1160 and when new shared libraries are loaded into a running process. */
1161
1162 void
1163 check_for_thread_db (void)
1164 {
1165 /* Do nothing if we couldn't load libthread_db.so.1. */
1166 if (!thread_db_load ())
1167 return;
1168 }
1169
1170 /* This function is called via the new_objfile observer. */
1171
1172 static void
1173 thread_db_new_objfile (struct objfile *objfile)
1174 {
1175 /* This observer must always be called with inferior_ptid set
1176 correctly. */
1177
1178 if (objfile != NULL
1179 /* libpthread with separate debug info has its debug info file already
1180 loaded (and notified without successful thread_db initialization)
1181 the time observer_notify_new_objfile is called for the library itself.
1182 Static executables have their separate debug info loaded already
1183 before the inferior has started. */
1184 && objfile->separate_debug_objfile_backlink == NULL
1185 /* Only check for thread_db if we loaded libpthread,
1186 or if this is the main symbol file.
1187 We need to check OBJF_MAINLINE to handle the case of debugging
1188 a statically linked executable AND the symbol file is specified AFTER
1189 the exec file is loaded (e.g., gdb -c core ; file foo).
1190 For dynamically linked executables, libpthread can be near the end
1191 of the list of shared libraries to load, and in an app of several
1192 thousand shared libraries, this can otherwise be painful. */
1193 && ((objfile->flags & OBJF_MAINLINE) != 0
1194 || libpthread_name_p (objfile_name (objfile))))
1195 check_for_thread_db ();
1196 }
1197
1198 static void
1199 check_pid_namespace_match (void)
1200 {
1201 /* Check is only relevant for local targets targets. */
1202 if (target_can_run (&current_target))
1203 {
1204 /* If the child is in a different PID namespace, its idea of its
1205 PID will differ from our idea of its PID. When we scan the
1206 child's thread list, we'll mistakenly think it has no threads
1207 since the thread PID fields won't match the PID we give to
1208 libthread_db. */
1209 char *our_pid_ns = linux_proc_pid_get_ns (getpid (), "pid");
1210 char *inferior_pid_ns = linux_proc_pid_get_ns (
1211 ptid_get_pid (inferior_ptid), "pid");
1212
1213 if (our_pid_ns != NULL && inferior_pid_ns != NULL
1214 && strcmp (our_pid_ns, inferior_pid_ns) != 0)
1215 {
1216 warning (_ ("Target and debugger are in different PID "
1217 "namespaces; thread lists and other data are "
1218 "likely unreliable"));
1219 }
1220
1221 xfree (our_pid_ns);
1222 xfree (inferior_pid_ns);
1223 }
1224 }
1225
1226 /* This function is called via the inferior_created observer.
1227 This handles the case of debugging statically linked executables. */
1228
1229 static void
1230 thread_db_inferior_created (struct target_ops *target, int from_tty)
1231 {
1232 check_pid_namespace_match ();
1233 check_for_thread_db ();
1234 }
1235
1236 /* Update the thread's state (what's displayed in "info threads"),
1237 from libthread_db thread state information. */
1238
1239 static void
1240 update_thread_state (struct private_thread_info *priv,
1241 const td_thrinfo_t *ti_p)
1242 {
1243 priv->dying = (ti_p->ti_state == TD_THR_UNKNOWN
1244 || ti_p->ti_state == TD_THR_ZOMBIE);
1245 }
1246
1247 /* Attach to a new thread. This function is called when we receive a
1248 TD_CREATE event or when we iterate over all threads and find one
1249 that wasn't already in our list. Returns true on success. */
1250
1251 static int
1252 attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
1253 const td_thrinfo_t *ti_p)
1254 {
1255 struct thread_info *tp;
1256 struct thread_db_info *info;
1257
1258 /* If we're being called after a TD_CREATE event, we may already
1259 know about this thread. There are two ways this can happen. We
1260 may have iterated over all threads between the thread creation
1261 and the TD_CREATE event, for instance when the user has issued
1262 the `info threads' command before the SIGTRAP for hitting the
1263 thread creation breakpoint was reported. Alternatively, the
1264 thread may have exited and a new one been created with the same
1265 thread ID. In the first case we don't need to do anything; in
1266 the second case we should discard information about the dead
1267 thread and attach to the new one. */
1268 tp = find_thread_ptid (ptid);
1269 if (tp != NULL)
1270 {
1271 /* If tp->priv is NULL, then GDB is already attached to this
1272 thread, but we do not know anything about it. We can learn
1273 about it here. This can only happen if we have some other
1274 way besides libthread_db to notice new threads (i.e.
1275 PTRACE_EVENT_CLONE); assume the same mechanism notices thread
1276 exit, so this can not be a stale thread recreated with the
1277 same ID. */
1278 if (tp->priv != NULL)
1279 {
1280 if (!tp->priv->dying)
1281 return 0;
1282
1283 delete_thread (ptid);
1284 tp = NULL;
1285 }
1286 }
1287
1288 /* Under GNU/Linux, we have to attach to each and every thread. */
1289 if (target_has_execution
1290 && tp == NULL)
1291 {
1292 int res;
1293
1294 res = lin_lwp_attach_lwp (ptid_build (ptid_get_pid (ptid),
1295 ti_p->ti_lid, 0));
1296 if (res < 0)
1297 {
1298 /* Error, stop iterating. */
1299 return 0;
1300 }
1301 else if (res > 0)
1302 {
1303 /* Pretend this thread doesn't exist yet, and keep
1304 iterating. */
1305 return 1;
1306 }
1307
1308 /* Otherwise, we sucessfully attached to the thread. */
1309 }
1310
1311 info = get_thread_db_info (ptid_get_pid (ptid));
1312 record_thread (info, tp, ptid, th_p, ti_p);
1313 return 1;
1314 }
1315
1316 /* Record a new thread in GDB's thread list. Creates the thread's
1317 private info. If TP is NULL, creates a new thread. Otherwise,
1318 uses TP. */
1319
1320 static void
1321 record_thread (struct thread_db_info *info,
1322 struct thread_info *tp,
1323 ptid_t ptid, const td_thrhandle_t *th_p,
1324 const td_thrinfo_t *ti_p)
1325 {
1326 td_err_e err;
1327 struct private_thread_info *priv;
1328 int new_thread = (tp == NULL);
1329
1330 /* A thread ID of zero may mean the thread library has not
1331 initialized yet. Leave private == NULL until the thread library
1332 has initialized. */
1333 if (ti_p->ti_tid == 0)
1334 return;
1335
1336 /* Construct the thread's private data. */
1337 priv = xmalloc (sizeof (struct private_thread_info));
1338 memset (priv, 0, sizeof (struct private_thread_info));
1339
1340 priv->th = *th_p;
1341 priv->tid = ti_p->ti_tid;
1342 update_thread_state (priv, ti_p);
1343
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)
1348 tp = add_thread_with_info (ptid, priv);
1349 else
1350 tp->priv = priv;
1351
1352 /* Enable thread event reporting for this thread, except when
1353 debugging a core file. */
1354 if (target_has_execution && thread_db_use_events () && new_thread)
1355 {
1356 err = info->td_thr_event_enable_p (th_p, 1);
1357 if (err != TD_OK)
1358 error (_("Cannot enable thread event reporting for %s: %s"),
1359 target_pid_to_str (ptid), thread_db_err_str (err));
1360 }
1361
1362 if (target_has_execution)
1363 check_thread_signals ();
1364 }
1365
1366 static void
1367 detach_thread (ptid_t ptid)
1368 {
1369 struct thread_info *thread_info;
1370
1371 /* Don't delete the thread now, because it still reports as active
1372 until it has executed a few instructions after the event
1373 breakpoint - if we deleted it now, "info threads" would cause us
1374 to re-attach to it. Just mark it as having had a TD_DEATH
1375 event. This means that we won't delete it from our thread list
1376 until we notice that it's dead (via prune_threads), or until
1377 something re-uses its thread ID. We'll report the thread exit
1378 when the underlying LWP dies. */
1379 thread_info = find_thread_ptid (ptid);
1380 gdb_assert (thread_info != NULL && thread_info->priv != NULL);
1381 thread_info->priv->dying = 1;
1382 }
1383
1384 static void
1385 thread_db_detach (struct target_ops *ops, const char *args, int from_tty)
1386 {
1387 struct target_ops *target_beneath = find_target_beneath (ops);
1388 struct thread_db_info *info;
1389
1390 info = get_thread_db_info (ptid_get_pid (inferior_ptid));
1391
1392 if (info)
1393 {
1394 if (target_has_execution && thread_db_use_events ())
1395 {
1396 disable_thread_event_reporting (info);
1397
1398 /* Delete the old thread event breakpoints. Note that
1399 unlike when mourning, we can remove them here because
1400 there's still a live inferior to poke at. In any case,
1401 GDB will not try to insert anything in the inferior when
1402 removing a breakpoint. */
1403 remove_thread_event_breakpoints ();
1404 }
1405
1406 delete_thread_db_info (ptid_get_pid (inferior_ptid));
1407 }
1408
1409 target_beneath->to_detach (target_beneath, args, from_tty);
1410
1411 /* NOTE: From this point on, inferior_ptid is null_ptid. */
1412
1413 /* If there are no more processes using libpthread, detach the
1414 thread_db target ops. */
1415 if (!thread_db_list)
1416 unpush_target (&thread_db_ops);
1417 }
1418
1419 /* Check if PID is currently stopped at the location of a thread event
1420 breakpoint location. If it is, read the event message and act upon
1421 the event. */
1422
1423 static void
1424 check_event (ptid_t ptid)
1425 {
1426 struct regcache *regcache = get_thread_regcache (ptid);
1427 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1428 td_event_msg_t msg;
1429 td_thrinfo_t ti;
1430 td_err_e err;
1431 CORE_ADDR stop_pc;
1432 int loop = 0;
1433 struct thread_db_info *info;
1434
1435 info = get_thread_db_info (ptid_get_pid (ptid));
1436
1437 /* Bail out early if we're not at a thread event breakpoint. */
1438 stop_pc = regcache_read_pc (regcache);
1439 if (!target_supports_stopped_by_sw_breakpoint ())
1440 stop_pc -= gdbarch_decr_pc_after_break (gdbarch);
1441
1442 if (stop_pc != info->td_create_bp_addr
1443 && stop_pc != info->td_death_bp_addr)
1444 return;
1445
1446 /* Access an lwp we know is stopped. */
1447 info->proc_handle.ptid = ptid;
1448
1449 /* If we have only looked at the first thread before libpthread was
1450 initialized, we may not know its thread ID yet. Make sure we do
1451 before we add another thread to the list. */
1452 if (!have_threads (ptid))
1453 thread_db_find_new_threads_1 (ptid);
1454
1455 /* If we are at a create breakpoint, we do not know what new lwp
1456 was created and cannot specifically locate the event message for it.
1457 We have to call td_ta_event_getmsg() to get
1458 the latest message. Since we have no way of correlating whether
1459 the event message we get back corresponds to our breakpoint, we must
1460 loop and read all event messages, processing them appropriately.
1461 This guarantees we will process the correct message before continuing
1462 from the breakpoint.
1463
1464 Currently, death events are not enabled. If they are enabled,
1465 the death event can use the td_thr_event_getmsg() interface to
1466 get the message specifically for that lwp and avoid looping
1467 below. */
1468
1469 loop = 1;
1470
1471 do
1472 {
1473 err = info->td_ta_event_getmsg_p (info->thread_agent, &msg);
1474 if (err != TD_OK)
1475 {
1476 if (err == TD_NOMSG)
1477 return;
1478
1479 error (_("Cannot get thread event message: %s"),
1480 thread_db_err_str (err));
1481 }
1482
1483 err = info->td_thr_get_info_p (msg.th_p, &ti);
1484 if (err != TD_OK)
1485 error (_("Cannot get thread info: %s"), thread_db_err_str (err));
1486
1487 ptid = ptid_build (ptid_get_pid (ptid), ti.ti_lid, 0);
1488
1489 switch (msg.event)
1490 {
1491 case TD_CREATE:
1492 /* Call attach_thread whether or not we already know about a
1493 thread with this thread ID. */
1494 attach_thread (ptid, msg.th_p, &ti);
1495
1496 break;
1497
1498 case TD_DEATH:
1499
1500 if (!in_thread_list (ptid))
1501 error (_("Spurious thread death event."));
1502
1503 detach_thread (ptid);
1504
1505 break;
1506
1507 default:
1508 error (_("Spurious thread event."));
1509 }
1510 }
1511 while (loop);
1512 }
1513
1514 static ptid_t
1515 thread_db_wait (struct target_ops *ops,
1516 ptid_t ptid, struct target_waitstatus *ourstatus,
1517 int options)
1518 {
1519 struct thread_db_info *info;
1520 struct target_ops *beneath = find_target_beneath (ops);
1521
1522 ptid = beneath->to_wait (beneath, ptid, ourstatus, options);
1523
1524 if (ourstatus->kind == TARGET_WAITKIND_IGNORE)
1525 return ptid;
1526
1527 if (ourstatus->kind == TARGET_WAITKIND_EXITED
1528 || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
1529 return ptid;
1530
1531 info = get_thread_db_info (ptid_get_pid (ptid));
1532
1533 /* If this process isn't using thread_db, we're done. */
1534 if (info == NULL)
1535 return ptid;
1536
1537 if (ourstatus->kind == TARGET_WAITKIND_EXECD)
1538 {
1539 /* New image, it may or may not end up using thread_db. Assume
1540 not unless we find otherwise. */
1541 delete_thread_db_info (ptid_get_pid (ptid));
1542 if (!thread_db_list)
1543 unpush_target (&thread_db_ops);
1544
1545 /* Thread event breakpoints are deleted by
1546 update_breakpoints_after_exec. */
1547
1548 return ptid;
1549 }
1550
1551 if (ourstatus->kind == TARGET_WAITKIND_STOPPED
1552 && ourstatus->value.sig == GDB_SIGNAL_TRAP)
1553 /* Check for a thread event. */
1554 check_event (ptid);
1555
1556 /* Fill in the thread's user-level thread id and status. */
1557 thread_from_lwp (ptid);
1558
1559 return ptid;
1560 }
1561
1562 static void
1563 thread_db_mourn_inferior (struct target_ops *ops)
1564 {
1565 struct target_ops *target_beneath = find_target_beneath (ops);
1566
1567 delete_thread_db_info (ptid_get_pid (inferior_ptid));
1568
1569 target_beneath->to_mourn_inferior (target_beneath);
1570
1571 /* Delete the old thread event breakpoints. Do this after mourning
1572 the inferior, so that we don't try to uninsert them. */
1573 remove_thread_event_breakpoints ();
1574
1575 /* Detach thread_db target ops. */
1576 if (!thread_db_list)
1577 unpush_target (ops);
1578 }
1579
1580 struct callback_data
1581 {
1582 struct thread_db_info *info;
1583 int new_threads;
1584 };
1585
1586 static int
1587 find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
1588 {
1589 td_thrinfo_t ti;
1590 td_err_e err;
1591 ptid_t ptid;
1592 struct thread_info *tp;
1593 struct callback_data *cb_data = data;
1594 struct thread_db_info *info = cb_data->info;
1595
1596 err = info->td_thr_get_info_p (th_p, &ti);
1597 if (err != TD_OK)
1598 error (_("find_new_threads_callback: cannot get thread info: %s"),
1599 thread_db_err_str (err));
1600
1601 if (ti.ti_lid == -1)
1602 {
1603 /* A thread with kernel thread ID -1 is either a thread that
1604 exited and was joined, or a thread that is being created but
1605 hasn't started yet, and that is reusing the tcb/stack of a
1606 thread that previously exited and was joined. (glibc marks
1607 terminated and joined threads with kernel thread ID -1. See
1608 glibc PR17707. */
1609 if (libthread_db_debug)
1610 fprintf_unfiltered (gdb_stdlog,
1611 "thread_db: skipping exited and "
1612 "joined thread (0x%lx)\n", ti.ti_tid);
1613 return 0;
1614 }
1615
1616 if (ti.ti_tid == 0)
1617 {
1618 /* A thread ID of zero means that this is the main thread, but
1619 glibc has not yet initialized thread-local storage and the
1620 pthread library. We do not know what the thread's TID will
1621 be yet. Just enable event reporting and otherwise ignore
1622 it. */
1623
1624 /* In that case, we're not stopped in a fork syscall and don't
1625 need this glibc bug workaround. */
1626 info->need_stale_parent_threads_check = 0;
1627
1628 if (target_has_execution && thread_db_use_events ())
1629 {
1630 err = info->td_thr_event_enable_p (th_p, 1);
1631 if (err != TD_OK)
1632 error (_("Cannot enable thread event reporting for LWP %d: %s"),
1633 (int) ti.ti_lid, thread_db_err_str (err));
1634 }
1635
1636 return 0;
1637 }
1638
1639 /* Ignore stale parent threads, caused by glibc/BZ5983. This is a
1640 bit expensive, as it needs to open /proc/pid/status, so try to
1641 avoid doing the work if we know we don't have to. */
1642 if (info->need_stale_parent_threads_check)
1643 {
1644 int tgid = linux_proc_get_tgid (ti.ti_lid);
1645
1646 if (tgid != -1 && tgid != info->pid)
1647 return 0;
1648 }
1649
1650 ptid = ptid_build (info->pid, ti.ti_lid, 0);
1651 tp = find_thread_ptid (ptid);
1652 if (tp == NULL || tp->priv == NULL)
1653 {
1654 if (attach_thread (ptid, th_p, &ti))
1655 cb_data->new_threads += 1;
1656 else
1657 /* Problem attaching this thread; perhaps it exited before we
1658 could attach it?
1659 This could mean that the thread list inside glibc itself is in
1660 inconsistent state, and libthread_db could go on looping forever
1661 (observed with glibc-2.3.6). To prevent that, terminate
1662 iteration: thread_db_find_new_threads_2 will retry. */
1663 return 1;
1664 }
1665 else if (target_has_execution && !thread_db_use_events ())
1666 {
1667 /* Need to update this if not using the libthread_db events
1668 (particularly, the TD_DEATH event). */
1669 update_thread_state (tp->priv, &ti);
1670 }
1671
1672 return 0;
1673 }
1674
1675 /* Helper for thread_db_find_new_threads_2.
1676 Returns number of new threads found. */
1677
1678 static int
1679 find_new_threads_once (struct thread_db_info *info, int iteration,
1680 td_err_e *errp)
1681 {
1682 struct callback_data data;
1683 td_err_e err = TD_ERR;
1684
1685 data.info = info;
1686 data.new_threads = 0;
1687
1688 /* See comment in thread_db_update_thread_list. */
1689 gdb_assert (!target_has_execution || thread_db_use_events ());
1690
1691 TRY
1692 {
1693 /* Iterate over all user-space threads to discover new threads. */
1694 err = info->td_ta_thr_iter_p (info->thread_agent,
1695 find_new_threads_callback,
1696 &data,
1697 TD_THR_ANY_STATE,
1698 TD_THR_LOWEST_PRIORITY,
1699 TD_SIGNO_MASK,
1700 TD_THR_ANY_USER_FLAGS);
1701 }
1702 CATCH (except, RETURN_MASK_ERROR)
1703 {
1704 if (libthread_db_debug)
1705 {
1706 exception_fprintf (gdb_stdlog, except,
1707 "Warning: find_new_threads_once: ");
1708 }
1709 }
1710 END_CATCH
1711
1712 if (libthread_db_debug)
1713 {
1714 fprintf_unfiltered (gdb_stdlog,
1715 _("Found %d new threads in iteration %d.\n"),
1716 data.new_threads, iteration);
1717 }
1718
1719 if (errp != NULL)
1720 *errp = err;
1721
1722 return data.new_threads;
1723 }
1724
1725 /* Search for new threads, accessing memory through stopped thread
1726 PTID. If UNTIL_NO_NEW is true, repeat searching until several
1727 searches in a row do not discover any new threads. */
1728
1729 static void
1730 thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
1731 {
1732 td_err_e err = TD_OK;
1733 struct thread_db_info *info;
1734 int i, loop;
1735
1736 info = get_thread_db_info (ptid_get_pid (ptid));
1737
1738 /* Access an lwp we know is stopped. */
1739 info->proc_handle.ptid = ptid;
1740
1741 if (until_no_new)
1742 {
1743 /* Require 4 successive iterations which do not find any new threads.
1744 The 4 is a heuristic: there is an inherent race here, and I have
1745 seen that 2 iterations in a row are not always sufficient to
1746 "capture" all threads. */
1747 for (i = 0, loop = 0; loop < 4 && err == TD_OK; ++i, ++loop)
1748 if (find_new_threads_once (info, i, &err) != 0)
1749 {
1750 /* Found some new threads. Restart the loop from beginning. */
1751 loop = -1;
1752 }
1753 }
1754 else
1755 find_new_threads_once (info, 0, &err);
1756
1757 if (err != TD_OK)
1758 error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1759 }
1760
1761 static void
1762 thread_db_find_new_threads_1 (ptid_t ptid)
1763 {
1764 thread_db_find_new_threads_2 (ptid, 0);
1765 }
1766
1767 static int
1768 update_thread_core (struct lwp_info *info, void *closure)
1769 {
1770 info->core = linux_common_core_of_thread (info->ptid);
1771 return 0;
1772 }
1773
1774 /* Update the thread list using td_ta_thr_iter. */
1775
1776 static void
1777 thread_db_update_thread_list_td_ta_thr_iter (struct target_ops *ops)
1778 {
1779 struct thread_db_info *info;
1780 struct inferior *inf;
1781
1782 prune_threads ();
1783
1784 ALL_INFERIORS (inf)
1785 {
1786 struct thread_info *thread;
1787
1788 if (inf->pid == 0)
1789 continue;
1790
1791 info = get_thread_db_info (inf->pid);
1792 if (info == NULL)
1793 continue;
1794
1795 thread = any_live_thread_of_process (inf->pid);
1796 if (thread == NULL || thread->executing)
1797 continue;
1798
1799 thread_db_find_new_threads_1 (thread->ptid);
1800 }
1801 }
1802
1803 /* Implement the to_update_thread_list target method for this
1804 target. */
1805
1806 static void
1807 thread_db_update_thread_list (struct target_ops *ops)
1808 {
1809 /* It's best to avoid td_ta_thr_iter if possible. That walks data
1810 structures in the inferior's address space that may be corrupted,
1811 or, if the target is running, the list may change while we walk
1812 it. In the latter case, it's possible that a thread exits just
1813 at the exact time that causes GDB to get stuck in an infinite
1814 loop. To avoid pausing all threads whenever the core wants to
1815 refresh the thread list, if the kernel supports clone events
1816 (meaning we're always already attached to all LWPs), we use
1817 thread_from_lwp immediately when we see an LWP stop. That uses
1818 thread_db entry points that do not walk libpthread's thread list,
1819 so should be safe, as well as more efficient. */
1820 if (target_has_execution && !thread_db_use_events ())
1821 ops->beneath->to_update_thread_list (ops->beneath);
1822 else
1823 thread_db_update_thread_list_td_ta_thr_iter (ops);
1824
1825 if (target_has_execution)
1826 iterate_over_lwps (minus_one_ptid /* iterate over all */,
1827 update_thread_core, NULL);
1828 }
1829
1830 static char *
1831 thread_db_pid_to_str (struct target_ops *ops, ptid_t ptid)
1832 {
1833 struct thread_info *thread_info = find_thread_ptid (ptid);
1834 struct target_ops *beneath;
1835
1836 if (thread_info != NULL && thread_info->priv != NULL)
1837 {
1838 static char buf[64];
1839 thread_t tid;
1840
1841 tid = thread_info->priv->tid;
1842 snprintf (buf, sizeof (buf), "Thread 0x%lx (LWP %ld)",
1843 tid, ptid_get_lwp (ptid));
1844
1845 return buf;
1846 }
1847
1848 beneath = find_target_beneath (ops);
1849 return beneath->to_pid_to_str (beneath, ptid);
1850 }
1851
1852 /* Return a string describing the state of the thread specified by
1853 INFO. */
1854
1855 static char *
1856 thread_db_extra_thread_info (struct target_ops *self,
1857 struct thread_info *info)
1858 {
1859 if (info->priv == NULL)
1860 return NULL;
1861
1862 if (info->priv->dying)
1863 return "Exiting";
1864
1865 return NULL;
1866 }
1867
1868 /* Get the address of the thread local variable in load module LM which
1869 is stored at OFFSET within the thread local storage for thread PTID. */
1870
1871 static CORE_ADDR
1872 thread_db_get_thread_local_address (struct target_ops *ops,
1873 ptid_t ptid,
1874 CORE_ADDR lm,
1875 CORE_ADDR offset)
1876 {
1877 struct thread_info *thread_info;
1878 struct target_ops *beneath;
1879
1880 /* If we have not discovered any threads yet, check now. */
1881 if (!have_threads (ptid))
1882 thread_db_find_new_threads_1 (ptid);
1883
1884 /* Find the matching thread. */
1885 thread_info = find_thread_ptid (ptid);
1886
1887 if (thread_info != NULL && thread_info->priv != NULL)
1888 {
1889 td_err_e err;
1890 psaddr_t address;
1891 struct thread_db_info *info;
1892
1893 info = get_thread_db_info (ptid_get_pid (ptid));
1894
1895 /* Finally, get the address of the variable. */
1896 if (lm != 0)
1897 {
1898 /* glibc doesn't provide the needed interface. */
1899 if (!info->td_thr_tls_get_addr_p)
1900 throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR,
1901 _("No TLS library support"));
1902
1903 /* Note the cast through uintptr_t: this interface only works if
1904 a target address fits in a psaddr_t, which is a host pointer.
1905 So a 32-bit debugger can not access 64-bit TLS through this. */
1906 err = info->td_thr_tls_get_addr_p (&thread_info->priv->th,
1907 (psaddr_t)(uintptr_t) lm,
1908 offset, &address);
1909 }
1910 else
1911 {
1912 /* If glibc doesn't provide the needed interface throw an error
1913 that LM is zero - normally cases it should not be. */
1914 if (!info->td_thr_tlsbase_p)
1915 throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
1916 _("TLS load module not found"));
1917
1918 /* This code path handles the case of -static -pthread executables:
1919 https://sourceware.org/ml/libc-help/2014-03/msg00024.html
1920 For older GNU libc r_debug.r_map is NULL. For GNU libc after
1921 PR libc/16831 due to GDB PR threads/16954 LOAD_MODULE is also NULL.
1922 The constant number 1 depends on GNU __libc_setup_tls
1923 initialization of l_tls_modid to 1. */
1924 err = info->td_thr_tlsbase_p (&thread_info->priv->th,
1925 1, &address);
1926 address = (char *) address + offset;
1927 }
1928
1929 #ifdef THREAD_DB_HAS_TD_NOTALLOC
1930 /* The memory hasn't been allocated, yet. */
1931 if (err == TD_NOTALLOC)
1932 /* Now, if libthread_db provided the initialization image's
1933 address, we *could* try to build a non-lvalue value from
1934 the initialization image. */
1935 throw_error (TLS_NOT_ALLOCATED_YET_ERROR,
1936 _("TLS not allocated yet"));
1937 #endif
1938
1939 /* Something else went wrong. */
1940 if (err != TD_OK)
1941 throw_error (TLS_GENERIC_ERROR,
1942 (("%s")), thread_db_err_str (err));
1943
1944 /* Cast assuming host == target. Joy. */
1945 /* Do proper sign extension for the target. */
1946 gdb_assert (exec_bfd);
1947 return (bfd_get_sign_extend_vma (exec_bfd) > 0
1948 ? (CORE_ADDR) (intptr_t) address
1949 : (CORE_ADDR) (uintptr_t) address);
1950 }
1951
1952 beneath = find_target_beneath (ops);
1953 return beneath->to_get_thread_local_address (beneath, ptid, lm, offset);
1954 }
1955
1956 /* Implement the to_get_ada_task_ptid target method for this target. */
1957
1958 static ptid_t
1959 thread_db_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
1960 {
1961 /* NPTL uses a 1:1 model, so the LWP id suffices. */
1962 return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
1963 }
1964
1965 static void
1966 thread_db_resume (struct target_ops *ops,
1967 ptid_t ptid, int step, enum gdb_signal signo)
1968 {
1969 struct target_ops *beneath = find_target_beneath (ops);
1970 struct thread_db_info *info;
1971
1972 if (ptid_equal (ptid, minus_one_ptid))
1973 info = get_thread_db_info (ptid_get_pid (inferior_ptid));
1974 else
1975 info = get_thread_db_info (ptid_get_pid (ptid));
1976
1977 /* This workaround is only needed for child fork lwps stopped in a
1978 PTRACE_O_TRACEFORK event. When the inferior is resumed, the
1979 workaround can be disabled. */
1980 if (info)
1981 info->need_stale_parent_threads_check = 0;
1982
1983 beneath->to_resume (beneath, ptid, step, signo);
1984 }
1985
1986 /* qsort helper function for info_auto_load_libthread_db, sort the
1987 thread_db_info pointers primarily by their FILENAME and secondarily by their
1988 PID, both in ascending order. */
1989
1990 static int
1991 info_auto_load_libthread_db_compare (const void *ap, const void *bp)
1992 {
1993 struct thread_db_info *a = *(struct thread_db_info **) ap;
1994 struct thread_db_info *b = *(struct thread_db_info **) bp;
1995 int retval;
1996
1997 retval = strcmp (a->filename, b->filename);
1998 if (retval)
1999 return retval;
2000
2001 return (a->pid > b->pid) - (a->pid - b->pid);
2002 }
2003
2004 /* Implement 'info auto-load libthread-db'. */
2005
2006 static void
2007 info_auto_load_libthread_db (char *args, int from_tty)
2008 {
2009 struct ui_out *uiout = current_uiout;
2010 const char *cs = args ? args : "";
2011 struct thread_db_info *info, **array;
2012 unsigned info_count, unique_filenames;
2013 size_t max_filename_len, max_pids_len, pids_len;
2014 struct cleanup *back_to;
2015 char *pids;
2016 int i;
2017
2018 cs = skip_spaces_const (cs);
2019 if (*cs)
2020 error (_("'info auto-load libthread-db' does not accept any parameters"));
2021
2022 info_count = 0;
2023 for (info = thread_db_list; info; info = info->next)
2024 if (info->filename != NULL)
2025 info_count++;
2026
2027 array = xmalloc (sizeof (*array) * info_count);
2028 back_to = make_cleanup (xfree, array);
2029
2030 info_count = 0;
2031 for (info = thread_db_list; info; info = info->next)
2032 if (info->filename != NULL)
2033 array[info_count++] = info;
2034
2035 /* Sort ARRAY by filenames and PIDs. */
2036
2037 qsort (array, info_count, sizeof (*array),
2038 info_auto_load_libthread_db_compare);
2039
2040 /* Calculate the number of unique filenames (rows) and the maximum string
2041 length of PIDs list for the unique filenames (columns). */
2042
2043 unique_filenames = 0;
2044 max_filename_len = 0;
2045 max_pids_len = 0;
2046 pids_len = 0;
2047 for (i = 0; i < info_count; i++)
2048 {
2049 int pid = array[i]->pid;
2050 size_t this_pid_len;
2051
2052 for (this_pid_len = 0; pid != 0; pid /= 10)
2053 this_pid_len++;
2054
2055 if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
2056 {
2057 unique_filenames++;
2058 max_filename_len = max (max_filename_len,
2059 strlen (array[i]->filename));
2060
2061 if (i > 0)
2062 {
2063 pids_len -= strlen (", ");
2064 max_pids_len = max (max_pids_len, pids_len);
2065 }
2066 pids_len = 0;
2067 }
2068 pids_len += this_pid_len + strlen (", ");
2069 }
2070 if (i)
2071 {
2072 pids_len -= strlen (", ");
2073 max_pids_len = max (max_pids_len, pids_len);
2074 }
2075
2076 /* Table header shifted right by preceding "libthread-db: " would not match
2077 its columns. */
2078 if (info_count > 0 && args == auto_load_info_scripts_pattern_nl)
2079 ui_out_text (uiout, "\n");
2080
2081 make_cleanup_ui_out_table_begin_end (uiout, 2, unique_filenames,
2082 "LinuxThreadDbTable");
2083
2084 ui_out_table_header (uiout, max_filename_len, ui_left, "filename",
2085 "Filename");
2086 ui_out_table_header (uiout, pids_len, ui_left, "PIDs", "Pids");
2087 ui_out_table_body (uiout);
2088
2089 pids = xmalloc (max_pids_len + 1);
2090 make_cleanup (xfree, pids);
2091
2092 /* Note I is incremented inside the cycle, not at its end. */
2093 for (i = 0; i < info_count;)
2094 {
2095 struct cleanup *chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2096 char *pids_end;
2097
2098 info = array[i];
2099 ui_out_field_string (uiout, "filename", info->filename);
2100 pids_end = pids;
2101
2102 while (i < info_count && strcmp (info->filename, array[i]->filename) == 0)
2103 {
2104 if (pids_end != pids)
2105 {
2106 *pids_end++ = ',';
2107 *pids_end++ = ' ';
2108 }
2109 pids_end += xsnprintf (pids_end, &pids[max_pids_len + 1] - pids_end,
2110 "%u", array[i]->pid);
2111 gdb_assert (pids_end < &pids[max_pids_len + 1]);
2112
2113 i++;
2114 }
2115 *pids_end = '\0';
2116
2117 ui_out_field_string (uiout, "pids", pids);
2118
2119 ui_out_text (uiout, "\n");
2120 do_cleanups (chain);
2121 }
2122
2123 do_cleanups (back_to);
2124
2125 if (info_count == 0)
2126 ui_out_message (uiout, 0, _("No auto-loaded libthread-db.\n"));
2127 }
2128
2129 static void
2130 init_thread_db_ops (void)
2131 {
2132 thread_db_ops.to_shortname = "multi-thread";
2133 thread_db_ops.to_longname = "multi-threaded child process.";
2134 thread_db_ops.to_doc = "Threads and pthreads support.";
2135 thread_db_ops.to_detach = thread_db_detach;
2136 thread_db_ops.to_wait = thread_db_wait;
2137 thread_db_ops.to_resume = thread_db_resume;
2138 thread_db_ops.to_mourn_inferior = thread_db_mourn_inferior;
2139 thread_db_ops.to_update_thread_list = thread_db_update_thread_list;
2140 thread_db_ops.to_pid_to_str = thread_db_pid_to_str;
2141 thread_db_ops.to_stratum = thread_stratum;
2142 thread_db_ops.to_has_thread_control = tc_schedlock;
2143 thread_db_ops.to_get_thread_local_address
2144 = thread_db_get_thread_local_address;
2145 thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
2146 thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
2147 thread_db_ops.to_magic = OPS_MAGIC;
2148
2149 complete_target_initialization (&thread_db_ops);
2150 }
2151
2152 /* Provide a prototype to silence -Wmissing-prototypes. */
2153 extern initialize_file_ftype _initialize_thread_db;
2154
2155 void
2156 _initialize_thread_db (void)
2157 {
2158 init_thread_db_ops ();
2159
2160 /* Defer loading of libthread_db.so until inferior is running.
2161 This allows gdb to load correct libthread_db for a given
2162 executable -- there could be mutiple versions of glibc,
2163 compiled with LinuxThreads or NPTL, and until there is
2164 a running inferior, we can't tell which libthread_db is
2165 the correct one to load. */
2166
2167 libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
2168
2169 add_setshow_optional_filename_cmd ("libthread-db-search-path",
2170 class_support,
2171 &libthread_db_search_path, _("\
2172 Set search path for libthread_db."), _("\
2173 Show the current search path or libthread_db."), _("\
2174 This path is used to search for libthread_db to be loaded into \
2175 gdb itself.\n\
2176 Its value is a colon (':') separate list of directories to search.\n\
2177 Setting the search path to an empty list resets it to its default value."),
2178 set_libthread_db_search_path,
2179 NULL,
2180 &setlist, &showlist);
2181
2182 add_setshow_zuinteger_cmd ("libthread-db", class_maintenance,
2183 &libthread_db_debug, _("\
2184 Set libthread-db debugging."), _("\
2185 Show libthread-db debugging."), _("\
2186 When non-zero, libthread-db debugging is enabled."),
2187 NULL,
2188 show_libthread_db_debug,
2189 &setdebuglist, &showdebuglist);
2190
2191 add_setshow_boolean_cmd ("libthread-db", class_support,
2192 &auto_load_thread_db, _("\
2193 Enable or disable auto-loading of inferior specific libthread_db."), _("\
2194 Show whether auto-loading inferior specific libthread_db is enabled."), _("\
2195 If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n\
2196 locations to load libthread_db compatible with the inferior.\n\
2197 Standard system libthread_db still gets loaded even with this option off.\n\
2198 This options has security implications for untrusted inferiors."),
2199 NULL, show_auto_load_thread_db,
2200 auto_load_set_cmdlist_get (),
2201 auto_load_show_cmdlist_get ());
2202
2203 add_cmd ("libthread-db", class_info, info_auto_load_libthread_db,
2204 _("Print the list of loaded inferior specific libthread_db.\n\
2205 Usage: info auto-load libthread-db"),
2206 auto_load_info_cmdlist_get ());
2207
2208 /* Add ourselves to objfile event chain. */
2209 observer_attach_new_objfile (thread_db_new_objfile);
2210
2211 /* Add ourselves to inferior_created event chain.
2212 This is needed to handle debugging statically linked programs where
2213 the new_objfile observer won't get called for libpthread. */
2214 observer_attach_inferior_created (thread_db_inferior_created);
2215 }