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, _("auto-load: Loading libthread-db "
874                                        "library \"%s\" from $pdir.\n"),
875                                path))
876     result = 0;
877   else
878     result = try_thread_db_load (path);
879
880   do_cleanups (cleanup);
881   return result;
882 }
883
884 /* Handle $pdir in libthread-db-search-path.
885    Look for libthread_db in the directory of libpthread.
886    The result is true for success.  */
887
888 static int
889 try_thread_db_load_from_pdir (void)
890 {
891   struct objfile *obj;
892
893   if (!auto_load_thread_db)
894     return 0;
895
896   ALL_OBJFILES (obj)
897     if (libpthread_name_p (obj->name))
898       {
899         if (try_thread_db_load_from_pdir_1 (obj))
900           return 1;
901
902         /* We may have found the separate-debug-info version of
903            libpthread, and it may live in a directory without a matching
904            libthread_db.  */
905         if (obj->separate_debug_objfile_backlink != NULL)
906           return try_thread_db_load_from_pdir_1 (obj->separate_debug_objfile_backlink);
907
908         return 0;
909       }
910
911   return 0;
912 }
913
914 /* Handle $sdir in libthread-db-search-path.
915    Look for libthread_db in the system dirs, or wherever a plain
916    dlopen(file_without_path) will look.
917    The result is true for success.  */
918
919 static int
920 try_thread_db_load_from_sdir (void)
921 {
922   return try_thread_db_load (LIBTHREAD_DB_SO);
923 }
924
925 /* Try to load libthread_db from directory DIR of length DIR_LEN.
926    The result is true for success.  */
927
928 static int
929 try_thread_db_load_from_dir (const char *dir, size_t dir_len)
930 {
931   struct cleanup *cleanup;
932   char *path;
933   int result;
934
935   if (!auto_load_thread_db)
936     return 0;
937
938   path = xmalloc (dir_len + 1 + strlen (LIBTHREAD_DB_SO) + 1);
939   cleanup = make_cleanup (xfree, path);
940
941   memcpy (path, dir, dir_len);
942   path[dir_len] = '/';
943   strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
944
945   if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
946                                        "library \"%s\" from explicit "
947                                        "directory.\n"),
948                                path))
949     result = 0;
950   else
951     result = try_thread_db_load (path);
952
953   do_cleanups (cleanup);
954   return result;
955 }
956
957 /* Search libthread_db_search_path for libthread_db which "agrees"
958    to work on current inferior.
959    The result is true for success.  */
960
961 static int
962 thread_db_load_search (void)
963 {
964   const char *search_path = libthread_db_search_path;
965   int rc = 0;
966
967   while (*search_path)
968     {
969       const char *end = strchr (search_path, ':');
970       const char *this_dir = search_path;
971       size_t this_dir_len;
972
973       if (end)
974         {
975           this_dir_len = end - search_path;
976           search_path += this_dir_len + 1;
977         }
978       else
979         {
980           this_dir_len = strlen (this_dir);
981           search_path += this_dir_len;
982         }
983
984       if (this_dir_len == sizeof ("$pdir") - 1
985           && strncmp (this_dir, "$pdir", this_dir_len) == 0)
986         {
987           if (try_thread_db_load_from_pdir ())
988             {
989               rc = 1;
990               break;
991             }
992         }
993       else if (this_dir_len == sizeof ("$sdir") - 1
994                && strncmp (this_dir, "$sdir", this_dir_len) == 0)
995         {
996           if (try_thread_db_load_from_sdir ())
997             {
998               rc = 1;
999               break;
1000             }
1001         }
1002       else
1003         {
1004           if (try_thread_db_load_from_dir (this_dir, this_dir_len))
1005             {
1006               rc = 1;
1007               break;
1008             }
1009         }
1010     }
1011
1012   if (libthread_db_debug)
1013     printf_unfiltered (_("thread_db_load_search returning %d\n"), rc);
1014   return rc;
1015 }
1016
1017 /* Return non-zero if the inferior has a libpthread.  */
1018
1019 static int
1020 has_libpthread (void)
1021 {
1022   struct objfile *obj;
1023
1024   ALL_OBJFILES (obj)
1025     if (libpthread_name_p (obj->name))
1026       return 1;
1027
1028   return 0;
1029 }
1030
1031 /* Attempt to load and initialize libthread_db.
1032    Return 1 on success.  */
1033
1034 static int
1035 thread_db_load (void)
1036 {
1037   struct thread_db_info *info;
1038
1039   info = get_thread_db_info (GET_PID (inferior_ptid));
1040
1041   if (info != NULL)
1042     return 1;
1043
1044   /* Don't attempt to use thread_db on executables not running
1045      yet.  */
1046   if (!target_has_registers)
1047     return 0;
1048
1049   /* Don't attempt to use thread_db for remote targets.  */
1050   if (!(target_can_run (&current_target) || core_bfd))
1051     return 0;
1052
1053   if (thread_db_load_search ())
1054     return 1;
1055
1056   /* We couldn't find a libthread_db.
1057      If the inferior has a libpthread warn the user.  */
1058   if (has_libpthread ())
1059     {
1060       warning (_("Unable to find libthread_db matching inferior's thread"
1061                  " library, thread debugging will not be available."));
1062       return 0;
1063     }
1064
1065   /* Either this executable isn't using libpthread at all, or it is
1066      statically linked.  Since we can't easily distinguish these two cases,
1067      no warning is issued.  */
1068   return 0;
1069 }
1070
1071 static void
1072 disable_thread_event_reporting (struct thread_db_info *info)
1073 {
1074   if (info->td_ta_clear_event_p != NULL)
1075     {
1076       td_thr_events_t events;
1077
1078       /* Set the process wide mask saying we aren't interested in any
1079          events anymore.  */
1080       td_event_fillset (&events);
1081       info->td_ta_clear_event_p (info->thread_agent, &events);
1082     }
1083
1084   info->td_create_bp_addr = 0;
1085   info->td_death_bp_addr = 0;
1086 }
1087
1088 static void
1089 check_thread_signals (void)
1090 {
1091   if (!thread_signals)
1092     {
1093       sigset_t mask;
1094       int i;
1095
1096       lin_thread_get_thread_signals (&mask);
1097       sigemptyset (&thread_stop_set);
1098       sigemptyset (&thread_print_set);
1099
1100       for (i = 1; i < NSIG; i++)
1101         {
1102           if (sigismember (&mask, i))
1103             {
1104               if (signal_stop_update (gdb_signal_from_host (i), 0))
1105                 sigaddset (&thread_stop_set, i);
1106               if (signal_print_update (gdb_signal_from_host (i), 0))
1107                 sigaddset (&thread_print_set, i);
1108               thread_signals = 1;
1109             }
1110         }
1111     }
1112 }
1113
1114 /* Check whether thread_db is usable.  This function is called when
1115    an inferior is created (or otherwise acquired, e.g. attached to)
1116    and when new shared libraries are loaded into a running process.  */
1117
1118 void
1119 check_for_thread_db (void)
1120 {
1121   /* Do nothing if we couldn't load libthread_db.so.1.  */
1122   if (!thread_db_load ())
1123     return;
1124 }
1125
1126 /* This function is called via the new_objfile observer.  */
1127
1128 static void
1129 thread_db_new_objfile (struct objfile *objfile)
1130 {
1131   /* This observer must always be called with inferior_ptid set
1132      correctly.  */
1133
1134   if (objfile != NULL
1135       /* Only check for thread_db if we loaded libpthread,
1136          or if this is the main symbol file.
1137          We need to check OBJF_MAINLINE to handle the case of debugging
1138          a statically linked executable AND the symbol file is specified AFTER
1139          the exec file is loaded (e.g., gdb -c core ; file foo).
1140          For dynamically linked executables, libpthread can be near the end
1141          of the list of shared libraries to load, and in an app of several
1142          thousand shared libraries, this can otherwise be painful.  */
1143       && ((objfile->flags & OBJF_MAINLINE) != 0
1144           || libpthread_name_p (objfile->name)))
1145     check_for_thread_db ();
1146 }
1147
1148 /* This function is called via the inferior_created observer.
1149    This handles the case of debugging statically linked executables.  */
1150
1151 static void
1152 thread_db_inferior_created (struct target_ops *target, int from_tty)
1153 {
1154   check_for_thread_db ();
1155 }
1156
1157 /* Attach to a new thread.  This function is called when we receive a
1158    TD_CREATE event or when we iterate over all threads and find one
1159    that wasn't already in our list.  Returns true on success.  */
1160
1161 static int
1162 attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
1163                const td_thrinfo_t *ti_p)
1164 {
1165   struct private_thread_info *private;
1166   struct thread_info *tp;
1167   td_err_e err;
1168   struct thread_db_info *info;
1169
1170   /* If we're being called after a TD_CREATE event, we may already
1171      know about this thread.  There are two ways this can happen.  We
1172      may have iterated over all threads between the thread creation
1173      and the TD_CREATE event, for instance when the user has issued
1174      the `info threads' command before the SIGTRAP for hitting the
1175      thread creation breakpoint was reported.  Alternatively, the
1176      thread may have exited and a new one been created with the same
1177      thread ID.  In the first case we don't need to do anything; in
1178      the second case we should discard information about the dead
1179      thread and attach to the new one.  */
1180   tp = find_thread_ptid (ptid);
1181   if (tp != NULL)
1182     {
1183       /* If tp->private is NULL, then GDB is already attached to this
1184          thread, but we do not know anything about it.  We can learn
1185          about it here.  This can only happen if we have some other
1186          way besides libthread_db to notice new threads (i.e.
1187          PTRACE_EVENT_CLONE); assume the same mechanism notices thread
1188          exit, so this can not be a stale thread recreated with the
1189          same ID.  */
1190       if (tp->private != NULL)
1191         {
1192           if (!tp->private->dying)
1193             return 0;
1194
1195           delete_thread (ptid);
1196           tp = NULL;
1197         }
1198     }
1199
1200   if (target_has_execution)
1201     check_thread_signals ();
1202
1203   if (ti_p->ti_state == TD_THR_UNKNOWN || ti_p->ti_state == TD_THR_ZOMBIE)
1204     return 0;                   /* A zombie thread -- do not attach.  */
1205
1206   /* Under GNU/Linux, we have to attach to each and every thread.  */
1207   if (target_has_execution
1208       && tp == NULL)
1209     {
1210       int res;
1211
1212       res = lin_lwp_attach_lwp (BUILD_LWP (ti_p->ti_lid, GET_PID (ptid)));
1213       if (res < 0)
1214         {
1215           /* Error, stop iterating.  */
1216           return 0;
1217         }
1218       else if (res > 0)
1219         {
1220           /* Pretend this thread doesn't exist yet, and keep
1221              iterating.  */
1222           return 1;
1223         }
1224
1225       /* Otherwise, we sucessfully attached to the thread.  */
1226     }
1227
1228   /* Construct the thread's private data.  */
1229   private = xmalloc (sizeof (struct private_thread_info));
1230   memset (private, 0, sizeof (struct private_thread_info));
1231
1232   /* A thread ID of zero may mean the thread library has not initialized
1233      yet.  But we shouldn't even get here if that's the case.  FIXME:
1234      if we change GDB to always have at least one thread in the thread
1235      list this will have to go somewhere else; maybe private == NULL
1236      until the thread_db target claims it.  */
1237   gdb_assert (ti_p->ti_tid != 0);
1238   private->th = *th_p;
1239   private->tid = ti_p->ti_tid;
1240
1241   /* Add the thread to GDB's thread list.  */
1242   if (tp == NULL)
1243     add_thread_with_info (ptid, private);
1244   else
1245     tp->private = private;
1246
1247   info = get_thread_db_info (GET_PID (ptid));
1248
1249   /* Enable thread event reporting for this thread, except when
1250      debugging a core file.  */
1251   if (target_has_execution)
1252     {
1253       err = info->td_thr_event_enable_p (th_p, 1);
1254       if (err != TD_OK)
1255         error (_("Cannot enable thread event reporting for %s: %s"),
1256                target_pid_to_str (ptid), thread_db_err_str (err));
1257     }
1258
1259   return 1;
1260 }
1261
1262 static void
1263 detach_thread (ptid_t ptid)
1264 {
1265   struct thread_info *thread_info;
1266
1267   /* Don't delete the thread now, because it still reports as active
1268      until it has executed a few instructions after the event
1269      breakpoint - if we deleted it now, "info threads" would cause us
1270      to re-attach to it.  Just mark it as having had a TD_DEATH
1271      event.  This means that we won't delete it from our thread list
1272      until we notice that it's dead (via prune_threads), or until
1273      something re-uses its thread ID.  We'll report the thread exit
1274      when the underlying LWP dies.  */
1275   thread_info = find_thread_ptid (ptid);
1276   gdb_assert (thread_info != NULL && thread_info->private != NULL);
1277   thread_info->private->dying = 1;
1278 }
1279
1280 static void
1281 thread_db_detach (struct target_ops *ops, char *args, int from_tty)
1282 {
1283   struct target_ops *target_beneath = find_target_beneath (ops);
1284   struct thread_db_info *info;
1285
1286   info = get_thread_db_info (GET_PID (inferior_ptid));
1287
1288   if (info)
1289     {
1290       if (target_has_execution)
1291         {
1292           disable_thread_event_reporting (info);
1293
1294           /* Delete the old thread event breakpoints.  Note that
1295              unlike when mourning, we can remove them here because
1296              there's still a live inferior to poke at.  In any case,
1297              GDB will not try to insert anything in the inferior when
1298              removing a breakpoint.  */
1299           remove_thread_event_breakpoints ();
1300         }
1301
1302       delete_thread_db_info (GET_PID (inferior_ptid));
1303     }
1304
1305   target_beneath->to_detach (target_beneath, args, from_tty);
1306
1307   /* NOTE: From this point on, inferior_ptid is null_ptid.  */
1308
1309   /* If there are no more processes using libpthread, detach the
1310      thread_db target ops.  */
1311   if (!thread_db_list)
1312     unpush_target (&thread_db_ops);
1313 }
1314
1315 /* Check if PID is currently stopped at the location of a thread event
1316    breakpoint location.  If it is, read the event message and act upon
1317    the event.  */
1318
1319 static void
1320 check_event (ptid_t ptid)
1321 {
1322   struct regcache *regcache = get_thread_regcache (ptid);
1323   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1324   td_event_msg_t msg;
1325   td_thrinfo_t ti;
1326   td_err_e err;
1327   CORE_ADDR stop_pc;
1328   int loop = 0;
1329   struct thread_db_info *info;
1330
1331   info = get_thread_db_info (GET_PID (ptid));
1332
1333   /* Bail out early if we're not at a thread event breakpoint.  */
1334   stop_pc = regcache_read_pc (regcache)
1335             - gdbarch_decr_pc_after_break (gdbarch);
1336   if (stop_pc != info->td_create_bp_addr
1337       && stop_pc != info->td_death_bp_addr)
1338     return;
1339
1340   /* Access an lwp we know is stopped.  */
1341   info->proc_handle.ptid = ptid;
1342
1343   /* If we have only looked at the first thread before libpthread was
1344      initialized, we may not know its thread ID yet.  Make sure we do
1345      before we add another thread to the list.  */
1346   if (!have_threads (ptid))
1347     thread_db_find_new_threads_1 (ptid);
1348
1349   /* If we are at a create breakpoint, we do not know what new lwp
1350      was created and cannot specifically locate the event message for it.
1351      We have to call td_ta_event_getmsg() to get
1352      the latest message.  Since we have no way of correlating whether
1353      the event message we get back corresponds to our breakpoint, we must
1354      loop and read all event messages, processing them appropriately.
1355      This guarantees we will process the correct message before continuing
1356      from the breakpoint.
1357
1358      Currently, death events are not enabled.  If they are enabled,
1359      the death event can use the td_thr_event_getmsg() interface to
1360      get the message specifically for that lwp and avoid looping
1361      below.  */
1362
1363   loop = 1;
1364
1365   do
1366     {
1367       err = info->td_ta_event_getmsg_p (info->thread_agent, &msg);
1368       if (err != TD_OK)
1369         {
1370           if (err == TD_NOMSG)
1371             return;
1372
1373           error (_("Cannot get thread event message: %s"),
1374                  thread_db_err_str (err));
1375         }
1376
1377       err = info->td_thr_get_info_p (msg.th_p, &ti);
1378       if (err != TD_OK)
1379         error (_("Cannot get thread info: %s"), thread_db_err_str (err));
1380
1381       ptid = ptid_build (GET_PID (ptid), ti.ti_lid, 0);
1382
1383       switch (msg.event)
1384         {
1385         case TD_CREATE:
1386           /* Call attach_thread whether or not we already know about a
1387              thread with this thread ID.  */
1388           attach_thread (ptid, msg.th_p, &ti);
1389
1390           break;
1391
1392         case TD_DEATH:
1393
1394           if (!in_thread_list (ptid))
1395             error (_("Spurious thread death event."));
1396
1397           detach_thread (ptid);
1398
1399           break;
1400
1401         default:
1402           error (_("Spurious thread event."));
1403         }
1404     }
1405   while (loop);
1406 }
1407
1408 static ptid_t
1409 thread_db_wait (struct target_ops *ops,
1410                 ptid_t ptid, struct target_waitstatus *ourstatus,
1411                 int options)
1412 {
1413   struct thread_db_info *info;
1414   struct target_ops *beneath = find_target_beneath (ops);
1415
1416   ptid = beneath->to_wait (beneath, ptid, ourstatus, options);
1417
1418   if (ourstatus->kind == TARGET_WAITKIND_IGNORE)
1419     return ptid;
1420
1421   if (ourstatus->kind == TARGET_WAITKIND_EXITED
1422       || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
1423     return ptid;
1424
1425   info = get_thread_db_info (GET_PID (ptid));
1426
1427   /* If this process isn't using thread_db, we're done.  */
1428   if (info == NULL)
1429     return ptid;
1430
1431   if (ourstatus->kind == TARGET_WAITKIND_EXECD)
1432     {
1433       /* New image, it may or may not end up using thread_db.  Assume
1434          not unless we find otherwise.  */
1435       delete_thread_db_info (GET_PID (ptid));
1436       if (!thread_db_list)
1437         unpush_target (&thread_db_ops);
1438
1439       /* Thread event breakpoints are deleted by
1440          update_breakpoints_after_exec.  */
1441
1442       return ptid;
1443     }
1444
1445   /* If we do not know about the main thread yet, this would be a good time to
1446      find it.  */
1447   if (ourstatus->kind == TARGET_WAITKIND_STOPPED && !have_threads (ptid))
1448     thread_db_find_new_threads_1 (ptid);
1449
1450   if (ourstatus->kind == TARGET_WAITKIND_STOPPED
1451       && ourstatus->value.sig == GDB_SIGNAL_TRAP)
1452     /* Check for a thread event.  */
1453     check_event (ptid);
1454
1455   if (have_threads (ptid))
1456     {
1457       /* Change ptids back into the higher level PID + TID format.  If
1458          the thread is dead and no longer on the thread list, we will
1459          get back a dead ptid.  This can occur if the thread death
1460          event gets postponed by other simultaneous events.  In such a
1461          case, we want to just ignore the event and continue on.  */
1462
1463       ptid = thread_from_lwp (ptid);
1464       if (GET_PID (ptid) == -1)
1465         ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
1466     }
1467
1468   return ptid;
1469 }
1470
1471 static void
1472 thread_db_mourn_inferior (struct target_ops *ops)
1473 {
1474   struct target_ops *target_beneath = find_target_beneath (ops);
1475
1476   delete_thread_db_info (GET_PID (inferior_ptid));
1477
1478   target_beneath->to_mourn_inferior (target_beneath);
1479
1480   /* Delete the old thread event breakpoints.  Do this after mourning
1481      the inferior, so that we don't try to uninsert them.  */
1482   remove_thread_event_breakpoints ();
1483
1484   /* Detach thread_db target ops.  */
1485   if (!thread_db_list)
1486     unpush_target (ops);
1487 }
1488
1489 struct callback_data
1490 {
1491   struct thread_db_info *info;
1492   int new_threads;
1493 };
1494
1495 static int
1496 find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
1497 {
1498   td_thrinfo_t ti;
1499   td_err_e err;
1500   ptid_t ptid;
1501   struct thread_info *tp;
1502   struct callback_data *cb_data = data;
1503   struct thread_db_info *info = cb_data->info;
1504
1505   err = info->td_thr_get_info_p (th_p, &ti);
1506   if (err != TD_OK)
1507     error (_("find_new_threads_callback: cannot get thread info: %s"),
1508            thread_db_err_str (err));
1509
1510   if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
1511     return 0;                   /* A zombie -- ignore.  */
1512
1513   if (ti.ti_tid == 0)
1514     {
1515       /* A thread ID of zero means that this is the main thread, but
1516          glibc has not yet initialized thread-local storage and the
1517          pthread library.  We do not know what the thread's TID will
1518          be yet.  Just enable event reporting and otherwise ignore
1519          it.  */
1520
1521       /* In that case, we're not stopped in a fork syscall and don't
1522          need this glibc bug workaround.  */
1523       info->need_stale_parent_threads_check = 0;
1524
1525       if (target_has_execution)
1526         {
1527           err = info->td_thr_event_enable_p (th_p, 1);
1528           if (err != TD_OK)
1529             error (_("Cannot enable thread event reporting for LWP %d: %s"),
1530                    (int) ti.ti_lid, thread_db_err_str (err));
1531         }
1532
1533       return 0;
1534     }
1535
1536   /* Ignore stale parent threads, caused by glibc/BZ5983.  This is a
1537      bit expensive, as it needs to open /proc/pid/status, so try to
1538      avoid doing the work if we know we don't have to.  */
1539   if (info->need_stale_parent_threads_check)
1540     {
1541       int tgid = linux_proc_get_tgid (ti.ti_lid);
1542
1543       if (tgid != -1 && tgid != info->pid)
1544         return 0;
1545     }
1546
1547   ptid = ptid_build (info->pid, ti.ti_lid, 0);
1548   tp = find_thread_ptid (ptid);
1549   if (tp == NULL || tp->private == NULL)
1550     {
1551       if (attach_thread (ptid, th_p, &ti))
1552         cb_data->new_threads += 1;
1553       else
1554         /* Problem attaching this thread; perhaps it exited before we
1555            could attach it?
1556            This could mean that the thread list inside glibc itself is in
1557            inconsistent state, and libthread_db could go on looping forever
1558            (observed with glibc-2.3.6).  To prevent that, terminate
1559            iteration: thread_db_find_new_threads_2 will retry.  */
1560         return 1;
1561     }
1562
1563   return 0;
1564 }
1565
1566 /* Helper for thread_db_find_new_threads_2.
1567    Returns number of new threads found.  */
1568
1569 static int
1570 find_new_threads_once (struct thread_db_info *info, int iteration,
1571                        td_err_e *errp)
1572 {
1573   volatile struct gdb_exception except;
1574   struct callback_data data;
1575   td_err_e err = TD_ERR;
1576
1577   data.info = info;
1578   data.new_threads = 0;
1579
1580   TRY_CATCH (except, RETURN_MASK_ERROR)
1581     {
1582       /* Iterate over all user-space threads to discover new threads.  */
1583       err = info->td_ta_thr_iter_p (info->thread_agent,
1584                                     find_new_threads_callback,
1585                                     &data,
1586                                     TD_THR_ANY_STATE,
1587                                     TD_THR_LOWEST_PRIORITY,
1588                                     TD_SIGNO_MASK,
1589                                     TD_THR_ANY_USER_FLAGS);
1590     }
1591
1592   if (libthread_db_debug)
1593     {
1594       if (except.reason < 0)
1595         exception_fprintf (gdb_stderr, except,
1596                            "Warning: find_new_threads_once: ");
1597
1598       printf_filtered (_("Found %d new threads in iteration %d.\n"),
1599                        data.new_threads, iteration);
1600     }
1601
1602   if (errp != NULL)
1603     *errp = err;
1604
1605   return data.new_threads;
1606 }
1607
1608 /* Search for new threads, accessing memory through stopped thread
1609    PTID.  If UNTIL_NO_NEW is true, repeat searching until several
1610    searches in a row do not discover any new threads.  */
1611
1612 static void
1613 thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
1614 {
1615   td_err_e err;
1616   struct thread_db_info *info;
1617   int pid = ptid_get_pid (ptid);
1618   int i, loop;
1619
1620   info = get_thread_db_info (GET_PID (ptid));
1621
1622   /* Access an lwp we know is stopped.  */
1623   info->proc_handle.ptid = ptid;
1624
1625   if (until_no_new)
1626     {
1627       /* Require 4 successive iterations which do not find any new threads.
1628          The 4 is a heuristic: there is an inherent race here, and I have
1629          seen that 2 iterations in a row are not always sufficient to
1630          "capture" all threads.  */
1631       for (i = 0, loop = 0; loop < 4; ++i, ++loop)
1632         if (find_new_threads_once (info, i, NULL) != 0)
1633           /* Found some new threads.  Restart the loop from beginning.  */
1634           loop = -1;
1635     }
1636   else
1637     {
1638       find_new_threads_once (info, 0, &err);
1639       if (err != TD_OK)
1640         error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1641     }
1642 }
1643
1644 static void
1645 thread_db_find_new_threads_1 (ptid_t ptid)
1646 {
1647   thread_db_find_new_threads_2 (ptid, 0);
1648 }
1649
1650 static int
1651 update_thread_core (struct lwp_info *info, void *closure)
1652 {
1653   info->core = linux_common_core_of_thread (info->ptid);
1654   return 0;
1655 }
1656
1657 static void
1658 thread_db_find_new_threads (struct target_ops *ops)
1659 {
1660   struct thread_db_info *info;
1661   struct inferior *inf;
1662
1663   ALL_INFERIORS (inf)
1664     {
1665       struct thread_info *thread;
1666
1667       if (inf->pid == 0)
1668         continue;
1669
1670       info = get_thread_db_info (inf->pid);
1671       if (info == NULL)
1672         continue;
1673
1674       thread = any_live_thread_of_process (inf->pid);
1675       if (thread == NULL || thread->executing)
1676         continue;
1677
1678       thread_db_find_new_threads_1 (thread->ptid);
1679     }
1680
1681   if (target_has_execution)
1682     iterate_over_lwps (minus_one_ptid /* iterate over all */,
1683                        update_thread_core, NULL);
1684 }
1685
1686 static char *
1687 thread_db_pid_to_str (struct target_ops *ops, ptid_t ptid)
1688 {
1689   struct thread_info *thread_info = find_thread_ptid (ptid);
1690   struct target_ops *beneath;
1691
1692   if (thread_info != NULL && thread_info->private != NULL)
1693     {
1694       static char buf[64];
1695       thread_t tid;
1696
1697       tid = thread_info->private->tid;
1698       snprintf (buf, sizeof (buf), "Thread 0x%lx (LWP %ld)",
1699                 tid, GET_LWP (ptid));
1700
1701       return buf;
1702     }
1703
1704   beneath = find_target_beneath (ops);
1705   if (beneath->to_pid_to_str (beneath, ptid))
1706     return beneath->to_pid_to_str (beneath, ptid);
1707
1708   return normal_pid_to_str (ptid);
1709 }
1710
1711 /* Return a string describing the state of the thread specified by
1712    INFO.  */
1713
1714 static char *
1715 thread_db_extra_thread_info (struct thread_info *info)
1716 {
1717   if (info->private == NULL)
1718     return NULL;
1719
1720   if (info->private->dying)
1721     return "Exiting";
1722
1723   return NULL;
1724 }
1725
1726 /* Get the address of the thread local variable in load module LM which
1727    is stored at OFFSET within the thread local storage for thread PTID.  */
1728
1729 static CORE_ADDR
1730 thread_db_get_thread_local_address (struct target_ops *ops,
1731                                     ptid_t ptid,
1732                                     CORE_ADDR lm,
1733                                     CORE_ADDR offset)
1734 {
1735   struct thread_info *thread_info;
1736   struct target_ops *beneath;
1737
1738   /* If we have not discovered any threads yet, check now.  */
1739   if (!have_threads (ptid))
1740     thread_db_find_new_threads_1 (ptid);
1741
1742   /* Find the matching thread.  */
1743   thread_info = find_thread_ptid (ptid);
1744
1745   if (thread_info != NULL && thread_info->private != NULL)
1746     {
1747       td_err_e err;
1748       psaddr_t address;
1749       struct thread_db_info *info;
1750
1751       info = get_thread_db_info (GET_PID (ptid));
1752
1753       /* glibc doesn't provide the needed interface.  */
1754       if (!info->td_thr_tls_get_addr_p)
1755         throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR,
1756                      _("No TLS library support"));
1757
1758       /* Caller should have verified that lm != 0.  */
1759       gdb_assert (lm != 0);
1760
1761       /* Finally, get the address of the variable.  */
1762       /* Note the cast through uintptr_t: this interface only works if
1763          a target address fits in a psaddr_t, which is a host pointer.
1764          So a 32-bit debugger can not access 64-bit TLS through this.  */
1765       err = info->td_thr_tls_get_addr_p (&thread_info->private->th,
1766                                          (psaddr_t)(uintptr_t) lm,
1767                                          offset, &address);
1768
1769 #ifdef THREAD_DB_HAS_TD_NOTALLOC
1770       /* The memory hasn't been allocated, yet.  */
1771       if (err == TD_NOTALLOC)
1772           /* Now, if libthread_db provided the initialization image's
1773              address, we *could* try to build a non-lvalue value from
1774              the initialization image.  */
1775         throw_error (TLS_NOT_ALLOCATED_YET_ERROR,
1776                      _("TLS not allocated yet"));
1777 #endif
1778
1779       /* Something else went wrong.  */
1780       if (err != TD_OK)
1781         throw_error (TLS_GENERIC_ERROR,
1782                      (("%s")), thread_db_err_str (err));
1783
1784       /* Cast assuming host == target.  Joy.  */
1785       /* Do proper sign extension for the target.  */
1786       gdb_assert (exec_bfd);
1787       return (bfd_get_sign_extend_vma (exec_bfd) > 0
1788               ? (CORE_ADDR) (intptr_t) address
1789               : (CORE_ADDR) (uintptr_t) address);
1790     }
1791
1792   beneath = find_target_beneath (ops);
1793   if (beneath->to_get_thread_local_address)
1794     return beneath->to_get_thread_local_address (beneath, ptid, lm, offset);
1795   else
1796     throw_error (TLS_GENERIC_ERROR,
1797                  _("TLS not supported on this target"));
1798 }
1799
1800 /* Callback routine used to find a thread based on the TID part of
1801    its PTID.  */
1802
1803 static int
1804 thread_db_find_thread_from_tid (struct thread_info *thread, void *data)
1805 {
1806   long *tid = (long *) data;
1807
1808   if (thread->private->tid == *tid)
1809     return 1;
1810
1811   return 0;
1812 }
1813
1814 /* Implement the to_get_ada_task_ptid target method for this target.  */
1815
1816 static ptid_t
1817 thread_db_get_ada_task_ptid (long lwp, long thread)
1818 {
1819   struct thread_info *thread_info;
1820
1821   thread_db_find_new_threads_1 (inferior_ptid);
1822   thread_info = iterate_over_threads (thread_db_find_thread_from_tid, &thread);
1823
1824   gdb_assert (thread_info != NULL);
1825
1826   return (thread_info->ptid);
1827 }
1828
1829 static void
1830 thread_db_resume (struct target_ops *ops,
1831                   ptid_t ptid, int step, enum gdb_signal signo)
1832 {
1833   struct target_ops *beneath = find_target_beneath (ops);
1834   struct thread_db_info *info;
1835
1836   if (ptid_equal (ptid, minus_one_ptid))
1837     info = get_thread_db_info (GET_PID (inferior_ptid));
1838   else
1839     info = get_thread_db_info (GET_PID (ptid));
1840
1841   /* This workaround is only needed for child fork lwps stopped in a
1842      PTRACE_O_TRACEFORK event.  When the inferior is resumed, the
1843      workaround can be disabled.  */
1844   if (info)
1845     info->need_stale_parent_threads_check = 0;
1846
1847   beneath->to_resume (beneath, ptid, step, signo);
1848 }
1849
1850 /* qsort helper function for info_auto_load_libthread_db, sort the
1851    thread_db_info pointers primarily by their FILENAME and secondarily by their
1852    PID, both in ascending order.  */
1853
1854 static int
1855 info_auto_load_libthread_db_compare (const void *ap, const void *bp)
1856 {
1857   struct thread_db_info *a = *(struct thread_db_info **) ap;
1858   struct thread_db_info *b = *(struct thread_db_info **) bp;
1859   int retval;
1860
1861   retval = strcmp (a->filename, b->filename);
1862   if (retval)
1863     return retval;
1864
1865   return (a->pid > b->pid) - (a->pid - b->pid);
1866 }
1867
1868 /* Implement 'info auto-load libthread-db'.  */
1869
1870 static void
1871 info_auto_load_libthread_db (char *args, int from_tty)
1872 {
1873   struct ui_out *uiout = current_uiout;
1874   const char *cs = args ? args : "";
1875   struct thread_db_info *info, **array;
1876   unsigned info_count, unique_filenames;
1877   size_t max_filename_len, max_pids_len, pids_len;
1878   struct cleanup *back_to;
1879   char *pids;
1880   int i;
1881
1882   while (isspace (*cs))
1883     cs++;
1884   if (*cs)
1885     error (_("'info auto-load libthread-db' does not accept any parameters"));
1886
1887   info_count = 0;
1888   for (info = thread_db_list; info; info = info->next)
1889     if (info->filename != NULL)
1890       info_count++;
1891
1892   array = xmalloc (sizeof (*array) * info_count);
1893   back_to = make_cleanup (xfree, array);
1894
1895   info_count = 0;
1896   for (info = thread_db_list; info; info = info->next)
1897     if (info->filename != NULL)
1898       array[info_count++] = info;
1899
1900   /* Sort ARRAY by filenames and PIDs.  */
1901
1902   qsort (array, info_count, sizeof (*array),
1903          info_auto_load_libthread_db_compare);
1904
1905   /* Calculate the number of unique filenames (rows) and the maximum string
1906      length of PIDs list for the unique filenames (columns).  */
1907
1908   unique_filenames = 0;
1909   max_filename_len = 0;
1910   max_pids_len = 0;
1911   pids_len = 0;
1912   for (i = 0; i < info_count; i++)
1913     {
1914       int pid = array[i]->pid;
1915       size_t this_pid_len;
1916
1917       for (this_pid_len = 0; pid != 0; pid /= 10)
1918         this_pid_len++;
1919
1920       if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
1921         {
1922           unique_filenames++;
1923           max_filename_len = max (max_filename_len,
1924                                   strlen (array[i]->filename));
1925
1926           if (i > 0)
1927             {
1928               pids_len -= strlen (", ");
1929               max_pids_len = max (max_pids_len, pids_len);
1930             }
1931           pids_len = 0;
1932         }
1933       pids_len += this_pid_len + strlen (", ");
1934     }
1935   if (i)
1936     {
1937       pids_len -= strlen (", ");
1938       max_pids_len = max (max_pids_len, pids_len);
1939     }
1940
1941   /* Table header shifted right by preceding "libthread-db:  " would not match
1942      its columns.  */
1943   if (info_count > 0 && args == auto_load_info_scripts_pattern_nl)
1944     ui_out_text (uiout, "\n");
1945
1946   make_cleanup_ui_out_table_begin_end (uiout, 2, unique_filenames,
1947                                        "LinuxThreadDbTable");
1948
1949   ui_out_table_header (uiout, max_filename_len, ui_left, "filename",
1950                        "Filename");
1951   ui_out_table_header (uiout, pids_len, ui_left, "PIDs", "Pids");
1952   ui_out_table_body (uiout);
1953
1954   pids = xmalloc (max_pids_len + 1);
1955   make_cleanup (xfree, pids);
1956
1957   /* Note I is incremented inside the cycle, not at its end.  */
1958   for (i = 0; i < info_count;)
1959     {
1960       struct cleanup *chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1961       char *pids_end;
1962
1963       info = array[i];
1964       ui_out_field_string (uiout, "filename", info->filename);
1965       pids_end = pids;
1966
1967       while (i < info_count && strcmp (info->filename, array[i]->filename) == 0)
1968         {
1969           if (pids_end != pids)
1970             {
1971               *pids_end++ = ',';
1972               *pids_end++ = ' ';
1973             }
1974           pids_end += xsnprintf (pids_end, &pids[max_pids_len + 1] - pids_end,
1975                                  "%u", array[i]->pid);
1976           gdb_assert (pids_end < &pids[max_pids_len + 1]);
1977
1978           i++;
1979         }
1980       *pids_end = '\0';
1981
1982       ui_out_field_string (uiout, "pids", pids);
1983
1984       ui_out_text (uiout, "\n");
1985       do_cleanups (chain);
1986     }
1987
1988   do_cleanups (back_to);
1989
1990   if (info_count == 0)
1991     ui_out_message (uiout, 0, _("No auto-loaded libthread-db.\n"));
1992 }
1993
1994 static void
1995 init_thread_db_ops (void)
1996 {
1997   thread_db_ops.to_shortname = "multi-thread";
1998   thread_db_ops.to_longname = "multi-threaded child process.";
1999   thread_db_ops.to_doc = "Threads and pthreads support.";
2000   thread_db_ops.to_detach = thread_db_detach;
2001   thread_db_ops.to_wait = thread_db_wait;
2002   thread_db_ops.to_resume = thread_db_resume;
2003   thread_db_ops.to_mourn_inferior = thread_db_mourn_inferior;
2004   thread_db_ops.to_find_new_threads = thread_db_find_new_threads;
2005   thread_db_ops.to_pid_to_str = thread_db_pid_to_str;
2006   thread_db_ops.to_stratum = thread_stratum;
2007   thread_db_ops.to_has_thread_control = tc_schedlock;
2008   thread_db_ops.to_get_thread_local_address
2009     = thread_db_get_thread_local_address;
2010   thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
2011   thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
2012   thread_db_ops.to_magic = OPS_MAGIC;
2013 }
2014
2015 /* Provide a prototype to silence -Wmissing-prototypes.  */
2016 extern initialize_file_ftype _initialize_thread_db;
2017
2018 void
2019 _initialize_thread_db (void)
2020 {
2021   init_thread_db_ops ();
2022   add_target (&thread_db_ops);
2023
2024   /* Defer loading of libthread_db.so until inferior is running.
2025      This allows gdb to load correct libthread_db for a given
2026      executable -- there could be mutiple versions of glibc,
2027      compiled with LinuxThreads or NPTL, and until there is
2028      a running inferior, we can't tell which libthread_db is
2029      the correct one to load.  */
2030
2031   libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
2032
2033   add_setshow_optional_filename_cmd ("libthread-db-search-path",
2034                                      class_support,
2035                                      &libthread_db_search_path, _("\
2036 Set search path for libthread_db."), _("\
2037 Show the current search path or libthread_db."), _("\
2038 This path is used to search for libthread_db to be loaded into \
2039 gdb itself.\n\
2040 Its value is a colon (':') separate list of directories to search.\n\
2041 Setting the search path to an empty list resets it to its default value."),
2042                             set_libthread_db_search_path,
2043                             NULL,
2044                             &setlist, &showlist);
2045
2046   add_setshow_zinteger_cmd ("libthread-db", class_maintenance,
2047                             &libthread_db_debug, _("\
2048 Set libthread-db debugging."), _("\
2049 Show libthread-db debugging."), _("\
2050 When non-zero, libthread-db debugging is enabled."),
2051                             NULL,
2052                             show_libthread_db_debug,
2053                             &setdebuglist, &showdebuglist);
2054
2055   add_setshow_boolean_cmd ("libthread-db", class_support,
2056                            &auto_load_thread_db, _("\
2057 Enable or disable auto-loading of inferior specific libthread_db."), _("\
2058 Show whether auto-loading inferior specific libthread_db is enabled."), _("\
2059 If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n\
2060 locations to load libthread_db compatible with the inferior.\n\
2061 Standard system libthread_db still gets loaded even with this option off.\n\
2062 This options has security implications for untrusted inferiors."),
2063                            NULL, show_auto_load_thread_db,
2064                            auto_load_set_cmdlist_get (),
2065                            auto_load_show_cmdlist_get ());
2066
2067   add_cmd ("libthread-db", class_info, info_auto_load_libthread_db,
2068            _("Print the list of loaded inferior specific libthread_db.\n\
2069 Usage: info auto-load libthread-db"),
2070            auto_load_info_cmdlist_get ());
2071
2072   /* Add ourselves to objfile event chain.  */
2073   observer_attach_new_objfile (thread_db_new_objfile);
2074
2075   /* Add ourselves to inferior_created event chain.
2076      This is needed to handle debugging statically linked programs where
2077      the new_objfile observer won't get called for libpthread.  */
2078   observer_attach_inferior_created (thread_db_inferior_created);
2079 }