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