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