* linux-fork.c (linux_fork_detach): New.
[external/binutils.git] / gdb / linux-thread-db.c
1 /* libthread_db assisted debugging support, generic parts.
2
3    Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008
4    Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 #include "defs.h"
22
23 #include "gdb_assert.h"
24 #include <dlfcn.h>
25 #include "gdb_proc_service.h"
26 #include "gdb_thread_db.h"
27
28 #include "bfd.h"
29 #include "exceptions.h"
30 #include "gdbthread.h"
31 #include "inferior.h"
32 #include "symfile.h"
33 #include "objfiles.h"
34 #include "target.h"
35 #include "regcache.h"
36 #include "solib-svr4.h"
37 #include "gdbcore.h"
38 #include "observer.h"
39 #include "linux-nat.h"
40
41 #include <signal.h>
42
43 #ifdef HAVE_GNU_LIBC_VERSION_H
44 #include <gnu/libc-version.h>
45 #endif
46
47 #ifndef LIBTHREAD_DB_SO
48 #define LIBTHREAD_DB_SO "libthread_db.so.1"
49 #endif
50
51 /* GNU/Linux libthread_db support.
52
53    libthread_db is a library, provided along with libpthread.so, which
54    exposes the internals of the thread library to a debugger.  It
55    allows GDB to find existing threads, new threads as they are
56    created, thread IDs (usually, the result of pthread_self), and
57    thread-local variables.
58
59    The libthread_db interface originates on Solaris, where it is
60    both more powerful and more complicated.  This implementation
61    only works for LinuxThreads and NPTL, the two glibc threading
62    libraries.  It assumes that each thread is permanently assigned
63    to a single light-weight process (LWP).
64
65    libthread_db-specific information is stored in the "private" field
66    of struct thread_info.  When the field is NULL we do not yet have
67    information about the new thread; this could be temporary (created,
68    but the thread library's data structures do not reflect it yet)
69    or permanent (created using clone instead of pthread_create).
70
71    Process IDs managed by linux-thread-db.c match those used by
72    linux-nat.c: a common PID for all processes, an LWP ID for each
73    thread, and no TID.  We save the TID in private.  Keeping it out
74    of the ptid_t prevents thread IDs changing when libpthread is
75    loaded or unloaded.  */
76
77 /* If we're running on GNU/Linux, we must explicitly attach to any new
78    threads.  */
79
80 /* This module's target vector.  */
81 static struct target_ops thread_db_ops;
82
83 /* The target vector that we call for things this module can't handle.  */
84 static struct target_ops *target_beneath;
85
86 /* Non-zero if we're using this module's target vector.  */
87 static int using_thread_db;
88
89 /* Non-zero if we have determined the signals used by the threads
90    library.  */
91 static int thread_signals;
92 static sigset_t thread_stop_set;
93 static sigset_t thread_print_set;
94
95 /* Structure that identifies the child process for the
96    <proc_service.h> interface.  */
97 static struct ps_prochandle proc_handle;
98
99 /* Connection to the libthread_db library.  */
100 static td_thragent_t *thread_agent;
101
102 /* Pointers to the libthread_db functions.  */
103
104 static td_err_e (*td_init_p) (void);
105
106 static td_err_e (*td_ta_new_p) (struct ps_prochandle * ps,
107                                 td_thragent_t **ta);
108 static td_err_e (*td_ta_map_id2thr_p) (const td_thragent_t *ta, thread_t pt,
109                                        td_thrhandle_t *__th);
110 static td_err_e (*td_ta_map_lwp2thr_p) (const td_thragent_t *ta,
111                                         lwpid_t lwpid, td_thrhandle_t *th);
112 static td_err_e (*td_ta_thr_iter_p) (const td_thragent_t *ta,
113                                      td_thr_iter_f *callback, void *cbdata_p,
114                                      td_thr_state_e state, int ti_pri,
115                                      sigset_t *ti_sigmask_p,
116                                      unsigned int ti_user_flags);
117 static td_err_e (*td_ta_event_addr_p) (const td_thragent_t *ta,
118                                        td_event_e event, td_notify_t *ptr);
119 static td_err_e (*td_ta_set_event_p) (const td_thragent_t *ta,
120                                       td_thr_events_t *event);
121 static td_err_e (*td_ta_event_getmsg_p) (const td_thragent_t *ta,
122                                          td_event_msg_t *msg);
123
124 static td_err_e (*td_thr_validate_p) (const td_thrhandle_t *th);
125 static td_err_e (*td_thr_get_info_p) (const td_thrhandle_t *th,
126                                       td_thrinfo_t *infop);
127 static td_err_e (*td_thr_event_enable_p) (const td_thrhandle_t *th,
128                                           int event);
129
130 static td_err_e (*td_thr_tls_get_addr_p) (const td_thrhandle_t *th,
131                                           void *map_address,
132                                           size_t offset, void **address);
133
134 /* Location of the thread creation event breakpoint.  The code at this
135    location in the child process will be called by the pthread library
136    whenever a new thread is created.  By setting a special breakpoint
137    at this location, GDB can detect when a new thread is created.  We
138    obtain this location via the td_ta_event_addr call.  */
139 static CORE_ADDR td_create_bp_addr;
140
141 /* Location of the thread death event breakpoint.  */
142 static CORE_ADDR td_death_bp_addr;
143
144 /* Prototypes for local functions.  */
145 static void thread_db_find_new_threads (void);
146 static void attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
147                            const td_thrinfo_t *ti_p);
148 static void detach_thread (ptid_t ptid);
149 \f
150
151 /* Use "struct private_thread_info" to cache thread state.  This is
152    a substantial optimization.  */
153
154 struct private_thread_info
155 {
156   /* Flag set when we see a TD_DEATH event for this thread.  */
157   unsigned int dying:1;
158
159   /* Cached thread state.  */
160   td_thrhandle_t th;
161   thread_t tid;
162 };
163 \f
164
165 static char *
166 thread_db_err_str (td_err_e err)
167 {
168   static char buf[64];
169
170   switch (err)
171     {
172     case TD_OK:
173       return "generic 'call succeeded'";
174     case TD_ERR:
175       return "generic error";
176     case TD_NOTHR:
177       return "no thread to satisfy query";
178     case TD_NOSV:
179       return "no sync handle to satisfy query";
180     case TD_NOLWP:
181       return "no LWP to satisfy query";
182     case TD_BADPH:
183       return "invalid process handle";
184     case TD_BADTH:
185       return "invalid thread handle";
186     case TD_BADSH:
187       return "invalid synchronization handle";
188     case TD_BADTA:
189       return "invalid thread agent";
190     case TD_BADKEY:
191       return "invalid key";
192     case TD_NOMSG:
193       return "no event message for getmsg";
194     case TD_NOFPREGS:
195       return "FPU register set not available";
196     case TD_NOLIBTHREAD:
197       return "application not linked with libthread";
198     case TD_NOEVENT:
199       return "requested event is not supported";
200     case TD_NOCAPAB:
201       return "capability not available";
202     case TD_DBERR:
203       return "debugger service failed";
204     case TD_NOAPLIC:
205       return "operation not applicable to";
206     case TD_NOTSD:
207       return "no thread-specific data for this thread";
208     case TD_MALLOC:
209       return "malloc failed";
210     case TD_PARTIALREG:
211       return "only part of register set was written/read";
212     case TD_NOXREGS:
213       return "X register set not available for this thread";
214 #ifdef THREAD_DB_HAS_TD_NOTALLOC
215     case TD_NOTALLOC:
216       return "thread has not yet allocated TLS for given module";
217 #endif
218 #ifdef THREAD_DB_HAS_TD_VERSION
219     case TD_VERSION:
220       return "versions of libpthread and libthread_db do not match";
221 #endif
222 #ifdef THREAD_DB_HAS_TD_NOTLS
223     case TD_NOTLS:
224       return "there is no TLS segment in the given module";
225 #endif
226     default:
227       snprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err);
228       return buf;
229     }
230 }
231 \f
232 /* Return 1 if any threads have been registered.  There may be none if
233    the threading library is not fully initialized yet.  */
234
235 static int
236 have_threads_callback (struct thread_info *thread, void *dummy)
237 {
238   return thread->private != NULL;
239 }
240
241 static int
242 have_threads (void)
243 {
244   return iterate_over_threads (have_threads_callback, NULL) != NULL;
245 }
246
247 /* A callback function for td_ta_thr_iter, which we use to map all
248    threads to LWPs.
249
250    THP is a handle to the current thread; if INFOP is not NULL, the
251    struct thread_info associated with this thread is returned in
252    *INFOP.
253
254    If the thread is a zombie, TD_THR_ZOMBIE is returned.  Otherwise,
255    zero is returned to indicate success.  */
256
257 static int
258 thread_get_info_callback (const td_thrhandle_t *thp, void *infop)
259 {
260   td_thrinfo_t ti;
261   td_err_e err;
262   struct thread_info *thread_info;
263   ptid_t thread_ptid;
264
265   err = td_thr_get_info_p (thp, &ti);
266   if (err != TD_OK)
267     error (_("thread_get_info_callback: cannot get thread info: %s"),
268            thread_db_err_str (err));
269
270   /* Fill the cache.  */
271   thread_ptid = ptid_build (GET_PID (inferior_ptid), ti.ti_lid, 0);
272   thread_info = find_thread_pid (thread_ptid);
273
274   /* In the case of a zombie thread, don't continue.  We don't want to
275      attach to it thinking it is a new thread.  */
276   if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
277     {
278       if (infop != NULL)
279         *(struct thread_info **) infop = thread_info;
280       return TD_THR_ZOMBIE;
281     }
282
283   if (thread_info == NULL)
284     {
285       /* New thread.  Attach to it now (why wait?).  */
286       if (!have_threads ())
287         thread_db_find_new_threads ();
288       else
289         attach_thread (thread_ptid, thp, &ti);
290       thread_info = find_thread_pid (thread_ptid);
291       gdb_assert (thread_info != NULL);
292     }
293
294   if (infop != NULL)
295     *(struct thread_info **) infop = thread_info;
296
297   return 0;
298 }
299 \f
300 /* Convert between user-level thread ids and LWP ids.  */
301
302 static ptid_t
303 thread_from_lwp (ptid_t ptid)
304 {
305   td_thrhandle_t th;
306   td_err_e err;
307   struct thread_info *thread_info;
308   ptid_t thread_ptid;
309
310   /* This ptid comes from linux-nat.c, which should always fill in the
311      LWP.  */
312   gdb_assert (GET_LWP (ptid) != 0);
313
314   /* Access an lwp we know is stopped.  */
315   proc_handle.pid = GET_LWP (ptid);
316   err = td_ta_map_lwp2thr_p (thread_agent, GET_LWP (ptid), &th);
317   if (err != TD_OK)
318     error (_("Cannot find user-level thread for LWP %ld: %s"),
319            GET_LWP (ptid), thread_db_err_str (err));
320
321   thread_info = NULL;
322
323   /* Fetch the thread info.  If we get back TD_THR_ZOMBIE, then the
324      event thread has already died.  If another gdb interface has called
325      thread_alive() previously, the thread won't be found on the thread list
326      anymore.  In that case, we don't want to process this ptid anymore
327      to avoid the possibility of later treating it as a newly
328      discovered thread id that we should add to the list.  Thus,
329      we return a -1 ptid which is also how the thread list marks a
330      dead thread.  */
331   if (thread_get_info_callback (&th, &thread_info) == TD_THR_ZOMBIE
332       && thread_info == NULL)
333     return pid_to_ptid (-1);
334
335   gdb_assert (ptid_get_tid (ptid) == 0);
336   return ptid;
337 }
338 \f
339
340 /* Attach to lwp PTID, doing whatever else is required to have this
341    LWP under the debugger's control --- e.g., enabling event
342    reporting.  Returns true on success.  */
343 int
344 thread_db_attach_lwp (ptid_t ptid)
345 {
346   td_thrhandle_t th;
347   td_thrinfo_t ti;
348   td_err_e err;
349
350   if (!using_thread_db)
351     return 0;
352
353   /* This ptid comes from linux-nat.c, which should always fill in the
354      LWP.  */
355   gdb_assert (GET_LWP (ptid) != 0);
356
357   /* Access an lwp we know is stopped.  */
358   proc_handle.pid = GET_LWP (ptid);
359
360   /* If we have only looked at the first thread before libpthread was
361      initialized, we may not know its thread ID yet.  Make sure we do
362      before we add another thread to the list.  */
363   if (!have_threads ())
364     thread_db_find_new_threads ();
365
366   err = td_ta_map_lwp2thr_p (thread_agent, GET_LWP (ptid), &th);
367   if (err != TD_OK)
368     /* Cannot find user-level thread.  */
369     return 0;
370
371   err = td_thr_get_info_p (&th, &ti);
372   if (err != TD_OK)
373     {
374       warning (_("Cannot get thread info: %s"), thread_db_err_str (err));
375       return 0;
376     }
377
378   attach_thread (ptid, &th, &ti);
379   return 1;
380 }
381
382 void
383 thread_db_init (struct target_ops *target)
384 {
385   target_beneath = target;
386 }
387
388 static void *
389 verbose_dlsym (void *handle, const char *name)
390 {
391   void *sym = dlsym (handle, name);
392   if (sym == NULL)
393     warning (_("Symbol \"%s\" not found in libthread_db: %s"), name, dlerror ());
394   return sym;
395 }
396
397 static int
398 thread_db_load (void)
399 {
400   void *handle;
401   td_err_e err;
402
403   handle = dlopen (LIBTHREAD_DB_SO, RTLD_NOW);
404   if (handle == NULL)
405     {
406       fprintf_filtered (gdb_stderr, "\n\ndlopen failed on '%s' - %s\n",
407                         LIBTHREAD_DB_SO, dlerror ());
408       fprintf_filtered (gdb_stderr,
409                         "GDB will not be able to debug pthreads.\n\n");
410       return 0;
411     }
412
413   /* Initialize pointers to the dynamic library functions we will use.
414      Essential functions first.  */
415
416   td_init_p = verbose_dlsym (handle, "td_init");
417   if (td_init_p == NULL)
418     return 0;
419
420   td_ta_new_p = verbose_dlsym (handle, "td_ta_new");
421   if (td_ta_new_p == NULL)
422     return 0;
423
424   td_ta_map_id2thr_p = verbose_dlsym (handle, "td_ta_map_id2thr");
425   if (td_ta_map_id2thr_p == NULL)
426     return 0;
427
428   td_ta_map_lwp2thr_p = verbose_dlsym (handle, "td_ta_map_lwp2thr");
429   if (td_ta_map_lwp2thr_p == NULL)
430     return 0;
431
432   td_ta_thr_iter_p = verbose_dlsym (handle, "td_ta_thr_iter");
433   if (td_ta_thr_iter_p == NULL)
434     return 0;
435
436   td_thr_validate_p = verbose_dlsym (handle, "td_thr_validate");
437   if (td_thr_validate_p == NULL)
438     return 0;
439
440   td_thr_get_info_p = verbose_dlsym (handle, "td_thr_get_info");
441   if (td_thr_get_info_p == NULL)
442     return 0;
443
444   /* Initialize the library.  */
445   err = td_init_p ();
446   if (err != TD_OK)
447     {
448       warning (_("Cannot initialize libthread_db: %s"), thread_db_err_str (err));
449       return 0;
450     }
451
452   /* These are not essential.  */
453   td_ta_event_addr_p = dlsym (handle, "td_ta_event_addr");
454   td_ta_set_event_p = dlsym (handle, "td_ta_set_event");
455   td_ta_event_getmsg_p = dlsym (handle, "td_ta_event_getmsg");
456   td_thr_event_enable_p = dlsym (handle, "td_thr_event_enable");
457   td_thr_tls_get_addr_p = dlsym (handle, "td_thr_tls_get_addr");
458
459   return 1;
460 }
461
462 static td_err_e
463 enable_thread_event (td_thragent_t *thread_agent, int event, CORE_ADDR *bp)
464 {
465   td_notify_t notify;
466   td_err_e err;
467
468   /* Access an lwp we know is stopped.  */
469   proc_handle.pid = GET_LWP (inferior_ptid);
470
471   /* Get the breakpoint address for thread EVENT.  */
472   err = td_ta_event_addr_p (thread_agent, event, &notify);
473   if (err != TD_OK)
474     return err;
475
476   /* Set up the breakpoint.  */
477   gdb_assert (exec_bfd);
478   (*bp) = (gdbarch_convert_from_func_ptr_addr
479            (current_gdbarch,
480             /* Do proper sign extension for the target.  */
481             (bfd_get_sign_extend_vma (exec_bfd) > 0
482              ? (CORE_ADDR) (intptr_t) notify.u.bptaddr
483              : (CORE_ADDR) (uintptr_t) notify.u.bptaddr),
484             &current_target));
485   create_thread_event_breakpoint ((*bp));
486
487   return TD_OK;
488 }
489
490 static void
491 enable_thread_event_reporting (void)
492 {
493   td_thr_events_t events;
494   td_notify_t notify;
495   td_err_e err;
496 #ifdef HAVE_GNU_LIBC_VERSION_H
497   const char *libc_version;
498   int libc_major, libc_minor;
499 #endif
500
501   /* We cannot use the thread event reporting facility if these
502      functions aren't available.  */
503   if (td_ta_event_addr_p == NULL || td_ta_set_event_p == NULL
504       || td_ta_event_getmsg_p == NULL || td_thr_event_enable_p == NULL)
505     return;
506
507   /* Set the process wide mask saying which events we're interested in.  */
508   td_event_emptyset (&events);
509   td_event_addset (&events, TD_CREATE);
510
511 #ifdef HAVE_GNU_LIBC_VERSION_H
512   /* The event reporting facility is broken for TD_DEATH events in
513      glibc 2.1.3, so don't enable it if we have glibc but a lower
514      version.  */
515   libc_version = gnu_get_libc_version ();
516   if (sscanf (libc_version, "%d.%d", &libc_major, &libc_minor) == 2
517       && (libc_major > 2 || (libc_major == 2 && libc_minor > 1)))
518 #endif
519     td_event_addset (&events, TD_DEATH);
520
521   err = td_ta_set_event_p (thread_agent, &events);
522   if (err != TD_OK)
523     {
524       warning (_("Unable to set global thread event mask: %s"),
525                thread_db_err_str (err));
526       return;
527     }
528
529   /* Delete previous thread event breakpoints, if any.  */
530   remove_thread_event_breakpoints ();
531   td_create_bp_addr = 0;
532   td_death_bp_addr = 0;
533
534   /* Set up the thread creation event.  */
535   err = enable_thread_event (thread_agent, TD_CREATE, &td_create_bp_addr);
536   if (err != TD_OK)
537     {
538       warning (_("Unable to get location for thread creation breakpoint: %s"),
539                thread_db_err_str (err));
540       return;
541     }
542
543   /* Set up the thread death event.  */
544   err = enable_thread_event (thread_agent, TD_DEATH, &td_death_bp_addr);
545   if (err != TD_OK)
546     {
547       warning (_("Unable to get location for thread death breakpoint: %s"),
548                thread_db_err_str (err));
549       return;
550     }
551 }
552
553 static void
554 disable_thread_event_reporting (void)
555 {
556   td_thr_events_t events;
557
558   /* Set the process wide mask saying we aren't interested in any
559      events anymore.  */
560   td_event_emptyset (&events);
561   td_ta_set_event_p (thread_agent, &events);
562
563   /* Delete thread event breakpoints, if any.  */
564   remove_thread_event_breakpoints ();
565   td_create_bp_addr = 0;
566   td_death_bp_addr = 0;
567 }
568
569 static void
570 check_thread_signals (void)
571 {
572 #ifdef GET_THREAD_SIGNALS
573   if (!thread_signals)
574     {
575       sigset_t mask;
576       int i;
577
578       GET_THREAD_SIGNALS (&mask);
579       sigemptyset (&thread_stop_set);
580       sigemptyset (&thread_print_set);
581
582       for (i = 1; i < NSIG; i++)
583         {
584           if (sigismember (&mask, i))
585             {
586               if (signal_stop_update (target_signal_from_host (i), 0))
587                 sigaddset (&thread_stop_set, i);
588               if (signal_print_update (target_signal_from_host (i), 0))
589                 sigaddset (&thread_print_set, i);
590               thread_signals = 1;
591             }
592         }
593     }
594 #endif
595 }
596
597 /* Check whether thread_db is usable.  This function is called when
598    an inferior is created (or otherwise acquired, e.g. attached to)
599    and when new shared libraries are loaded into a running process.  */
600
601 void
602 check_for_thread_db (void)
603 {
604   td_err_e err;
605   static int already_loaded;
606
607   /* Do nothing if we couldn't load libthread_db.so.1.  */
608   if (td_ta_new_p == NULL)
609     return;
610
611   /* First time through, report that libthread_db was successfuly
612      loaded.  Can't print this in in thread_db_load as, at that stage,
613      the interpreter and it's console haven't started.  */
614
615   if (!already_loaded)
616     {
617       Dl_info info;
618       const char *library = NULL;
619       if (dladdr ((*td_ta_new_p), &info) != 0)
620         library = info.dli_fname;
621
622       /* Try dlinfo?  */
623
624       if (library == NULL)
625         /* Paranoid - don't let a NULL path slip through.  */
626         library = LIBTHREAD_DB_SO;
627
628       if (info_verbose)
629         printf_unfiltered (_("Using host libthread_db library \"%s\".\n"),
630                            library);
631       already_loaded = 1;
632     }
633
634   if (using_thread_db)
635     /* Nothing to do.  The thread library was already detected and the
636        target vector was already activated.  */
637     return;
638
639   /* Don't attempt to use thread_db on targets which can not run
640      (executables not running yet, core files) for now.  */
641   if (!target_has_execution)
642     return;
643
644   /* Don't attempt to use thread_db for remote targets.  */
645   if (!target_can_run (&current_target))
646     return;
647
648   /* Initialize the structure that identifies the child process.  */
649   proc_handle.pid = GET_PID (inferior_ptid);
650
651   /* Now attempt to open a connection to the thread library.  */
652   err = td_ta_new_p (&proc_handle, &thread_agent);
653   switch (err)
654     {
655     case TD_NOLIBTHREAD:
656       /* No thread library was detected.  */
657       break;
658
659     case TD_OK:
660       printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
661
662       /* The thread library was detected.  Activate the thread_db target.  */
663       push_target (&thread_db_ops);
664       using_thread_db = 1;
665
666       enable_thread_event_reporting ();
667       thread_db_find_new_threads ();
668       break;
669
670     default:
671       warning (_("Cannot initialize thread debugging library: %s"),
672                thread_db_err_str (err));
673       break;
674     }
675 }
676
677 static void
678 thread_db_new_objfile (struct objfile *objfile)
679 {
680   if (objfile != NULL)
681     check_for_thread_db ();
682 }
683
684 /* Attach to a new thread.  This function is called when we receive a
685    TD_CREATE event or when we iterate over all threads and find one
686    that wasn't already in our list.  */
687
688 static void
689 attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
690                const td_thrinfo_t *ti_p)
691 {
692   struct private_thread_info *private;
693   struct thread_info *tp = NULL;
694   td_err_e err;
695
696   /* If we're being called after a TD_CREATE event, we may already
697      know about this thread.  There are two ways this can happen.  We
698      may have iterated over all threads between the thread creation
699      and the TD_CREATE event, for instance when the user has issued
700      the `info threads' command before the SIGTRAP for hitting the
701      thread creation breakpoint was reported.  Alternatively, the
702      thread may have exited and a new one been created with the same
703      thread ID.  In the first case we don't need to do anything; in
704      the second case we should discard information about the dead
705      thread and attach to the new one.  */
706   if (in_thread_list (ptid))
707     {
708       tp = find_thread_pid (ptid);
709       gdb_assert (tp != NULL);
710
711       /* If tp->private is NULL, then GDB is already attached to this
712          thread, but we do not know anything about it.  We can learn
713          about it here.  This can only happen if we have some other
714          way besides libthread_db to notice new threads (i.e.
715          PTRACE_EVENT_CLONE); assume the same mechanism notices thread
716          exit, so this can not be a stale thread recreated with the
717          same ID.  */
718       if (tp->private != NULL)
719         {
720           if (!tp->private->dying)
721             return;
722
723           delete_thread (ptid);
724           tp = NULL;
725         }
726     }
727
728   check_thread_signals ();
729
730   if (ti_p->ti_state == TD_THR_UNKNOWN || ti_p->ti_state == TD_THR_ZOMBIE)
731     return;                     /* A zombie thread -- do not attach.  */
732
733   /* Under GNU/Linux, we have to attach to each and every thread.  */
734   if (tp == NULL
735       && lin_lwp_attach_lwp (BUILD_LWP (ti_p->ti_lid, GET_PID (ptid))) < 0)
736     return;
737
738   /* Construct the thread's private data.  */
739   private = xmalloc (sizeof (struct private_thread_info));
740   memset (private, 0, sizeof (struct private_thread_info));
741
742   /* A thread ID of zero may mean the thread library has not initialized
743      yet.  But we shouldn't even get here if that's the case.  FIXME:
744      if we change GDB to always have at least one thread in the thread
745      list this will have to go somewhere else; maybe private == NULL
746      until the thread_db target claims it.  */
747   gdb_assert (ti_p->ti_tid != 0);
748   private->th = *th_p;
749   private->tid = ti_p->ti_tid;
750
751   /* Add the thread to GDB's thread list.  */
752   if (tp == NULL)
753     tp = add_thread_with_info (ptid, private);
754   else
755     tp->private = private;
756
757   /* Enable thread event reporting for this thread.  */
758   err = td_thr_event_enable_p (th_p, 1);
759   if (err != TD_OK)
760     error (_("Cannot enable thread event reporting for %s: %s"),
761            target_pid_to_str (ptid), thread_db_err_str (err));
762 }
763
764 static void
765 detach_thread (ptid_t ptid)
766 {
767   struct thread_info *thread_info;
768
769   /* Don't delete the thread now, because it still reports as active
770      until it has executed a few instructions after the event
771      breakpoint - if we deleted it now, "info threads" would cause us
772      to re-attach to it.  Just mark it as having had a TD_DEATH
773      event.  This means that we won't delete it from our thread list
774      until we notice that it's dead (via prune_threads), or until
775      something re-uses its thread ID.  We'll report the thread exit
776      when the underlying LWP dies.  */
777   thread_info = find_thread_pid (ptid);
778   gdb_assert (thread_info != NULL && thread_info->private != NULL);
779   thread_info->private->dying = 1;
780 }
781
782 static void
783 thread_db_detach (struct target_ops *ops, char *args, int from_tty)
784 {
785   disable_thread_event_reporting ();
786
787   /* Forget about the child's process ID.  We shouldn't need it
788      anymore.  */
789   proc_handle.pid = 0;
790
791   /* Detach thread_db target ops.  */
792   unpush_target (&thread_db_ops);
793   using_thread_db = 0;
794
795   target_beneath->to_detach (target_beneath, args, from_tty);
796 }
797
798 /* Check if PID is currently stopped at the location of a thread event
799    breakpoint location.  If it is, read the event message and act upon
800    the event.  */
801
802 static void
803 check_event (ptid_t ptid)
804 {
805   struct regcache *regcache = get_thread_regcache (ptid);
806   struct gdbarch *gdbarch = get_regcache_arch (regcache);
807   td_event_msg_t msg;
808   td_thrinfo_t ti;
809   td_err_e err;
810   CORE_ADDR stop_pc;
811   int loop = 0;
812
813   /* Bail out early if we're not at a thread event breakpoint.  */
814   stop_pc = regcache_read_pc (regcache)
815             - gdbarch_decr_pc_after_break (gdbarch);
816   if (stop_pc != td_create_bp_addr && stop_pc != td_death_bp_addr)
817     return;
818
819   /* Access an lwp we know is stopped.  */
820   proc_handle.pid = GET_LWP (ptid);
821
822   /* If we have only looked at the first thread before libpthread was
823      initialized, we may not know its thread ID yet.  Make sure we do
824      before we add another thread to the list.  */
825   if (!have_threads ())
826     thread_db_find_new_threads ();
827
828   /* If we are at a create breakpoint, we do not know what new lwp
829      was created and cannot specifically locate the event message for it.
830      We have to call td_ta_event_getmsg() to get
831      the latest message.  Since we have no way of correlating whether
832      the event message we get back corresponds to our breakpoint, we must
833      loop and read all event messages, processing them appropriately.
834      This guarantees we will process the correct message before continuing
835      from the breakpoint.
836
837      Currently, death events are not enabled.  If they are enabled,
838      the death event can use the td_thr_event_getmsg() interface to
839      get the message specifically for that lwp and avoid looping
840      below.  */
841
842   loop = 1;
843
844   do
845     {
846       err = td_ta_event_getmsg_p (thread_agent, &msg);
847       if (err != TD_OK)
848         {
849           if (err == TD_NOMSG)
850             return;
851
852           error (_("Cannot get thread event message: %s"),
853                  thread_db_err_str (err));
854         }
855
856       err = td_thr_get_info_p (msg.th_p, &ti);
857       if (err != TD_OK)
858         error (_("Cannot get thread info: %s"), thread_db_err_str (err));
859
860       ptid = ptid_build (GET_PID (ptid), ti.ti_lid, 0);
861
862       switch (msg.event)
863         {
864         case TD_CREATE:
865           /* Call attach_thread whether or not we already know about a
866              thread with this thread ID.  */
867           attach_thread (ptid, msg.th_p, &ti);
868
869           break;
870
871         case TD_DEATH:
872
873           if (!in_thread_list (ptid))
874             error (_("Spurious thread death event."));
875
876           detach_thread (ptid);
877
878           break;
879
880         default:
881           error (_("Spurious thread event."));
882         }
883     }
884   while (loop);
885 }
886
887 static ptid_t
888 thread_db_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
889 {
890   ptid = target_beneath->to_wait (ptid, ourstatus);
891
892   if (ourstatus->kind == TARGET_WAITKIND_IGNORE)
893     return ptid;
894
895   if (ourstatus->kind == TARGET_WAITKIND_EXITED
896       || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
897     return ptid;
898
899   if (ourstatus->kind == TARGET_WAITKIND_EXECD)
900     {
901       remove_thread_event_breakpoints ();
902       unpush_target (&thread_db_ops);
903       using_thread_db = 0;
904
905       return ptid;
906     }
907
908   /* If we do not know about the main thread yet, this would be a good time to
909      find it.  */
910   if (ourstatus->kind == TARGET_WAITKIND_STOPPED && !have_threads ())
911     thread_db_find_new_threads ();
912
913   if (ourstatus->kind == TARGET_WAITKIND_STOPPED
914       && ourstatus->value.sig == TARGET_SIGNAL_TRAP)
915     /* Check for a thread event.  */
916     check_event (ptid);
917
918   if (have_threads ())
919     {
920       /* Change ptids back into the higher level PID + TID format.  If
921          the thread is dead and no longer on the thread list, we will
922          get back a dead ptid.  This can occur if the thread death
923          event gets postponed by other simultaneous events.  In such a
924          case, we want to just ignore the event and continue on.  */
925
926       ptid = thread_from_lwp (ptid);
927       if (GET_PID (ptid) == -1)
928         ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
929     }
930
931   return ptid;
932 }
933
934 static void
935 thread_db_mourn_inferior (struct target_ops *ops)
936 {
937   /* Forget about the child's process ID.  We shouldn't need it
938      anymore.  */
939   proc_handle.pid = 0;
940
941   target_beneath->to_mourn_inferior (target_beneath);
942
943   /* Delete the old thread event breakpoints.  Do this after mourning
944      the inferior, so that we don't try to uninsert them.  */
945   remove_thread_event_breakpoints ();
946
947   /* Detach thread_db target ops.  */
948   unpush_target (ops);
949   using_thread_db = 0;
950 }
951
952 static int
953 thread_db_can_async_p (void)
954 {
955   return target_beneath->to_can_async_p ();
956 }
957
958 static int
959 thread_db_is_async_p (void)
960 {
961   return target_beneath->to_is_async_p ();
962 }
963
964 static void
965 thread_db_async (void (*callback) (enum inferior_event_type event_type,
966                                    void *context), void *context)
967 {
968   return target_beneath->to_async (callback, context);
969 }
970
971 static int
972 thread_db_async_mask (int mask)
973 {
974   return target_beneath->to_async_mask (mask);
975 }
976
977 static int
978 find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
979 {
980   td_thrinfo_t ti;
981   td_err_e err;
982   ptid_t ptid;
983   struct thread_info *tp;
984
985   err = td_thr_get_info_p (th_p, &ti);
986   if (err != TD_OK)
987     error (_("find_new_threads_callback: cannot get thread info: %s"),
988            thread_db_err_str (err));
989
990   if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
991     return 0;                   /* A zombie -- ignore.  */
992
993   ptid = ptid_build (GET_PID (inferior_ptid), ti.ti_lid, 0);
994
995   if (ti.ti_tid == 0)
996     {
997       /* A thread ID of zero means that this is the main thread, but
998          glibc has not yet initialized thread-local storage and the
999          pthread library.  We do not know what the thread's TID will
1000          be yet.  Just enable event reporting and otherwise ignore
1001          it.  */
1002
1003       err = td_thr_event_enable_p (th_p, 1);
1004       if (err != TD_OK)
1005         error (_("Cannot enable thread event reporting for %s: %s"),
1006                target_pid_to_str (ptid), thread_db_err_str (err));
1007
1008       return 0;
1009     }
1010
1011   tp = find_thread_pid (ptid);
1012   if (tp == NULL || tp->private == NULL)
1013     attach_thread (ptid, th_p, &ti);
1014
1015   return 0;
1016 }
1017
1018 /* Search for new threads, accessing memory through stopped thread
1019    PTID.  */
1020
1021 static void
1022 thread_db_find_new_threads (void)
1023 {
1024   td_err_e err;
1025   struct lwp_info *lp;
1026   ptid_t ptid;
1027
1028   /* In linux, we can only read memory through a stopped lwp.  */
1029   ALL_LWPS (lp, ptid)
1030     if (lp->stopped)
1031       break;
1032
1033   if (!lp)
1034     /* There is no stopped thread.  Bail out.  */
1035     return;
1036
1037   /* Access an lwp we know is stopped.  */
1038   proc_handle.pid = GET_LWP (ptid);
1039   /* Iterate over all user-space threads to discover new threads.  */
1040   err = td_ta_thr_iter_p (thread_agent, find_new_threads_callback, NULL,
1041                           TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY,
1042                           TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS);
1043   if (err != TD_OK)
1044     error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1045 }
1046
1047 static char *
1048 thread_db_pid_to_str (ptid_t ptid)
1049 {
1050   struct thread_info *thread_info = find_thread_pid (ptid);
1051
1052   if (thread_info != NULL && thread_info->private != NULL)
1053     {
1054       static char buf[64];
1055       thread_t tid;
1056
1057       tid = thread_info->private->tid;
1058       thread_info = find_thread_pid (ptid);
1059       snprintf (buf, sizeof (buf), "Thread 0x%lx (LWP %ld)",
1060                 tid, GET_LWP (ptid));
1061
1062       return buf;
1063     }
1064
1065   if (target_beneath->to_pid_to_str (ptid))
1066     return target_beneath->to_pid_to_str (ptid);
1067
1068   return normal_pid_to_str (ptid);
1069 }
1070
1071 /* Return a string describing the state of the thread specified by
1072    INFO.  */
1073
1074 static char *
1075 thread_db_extra_thread_info (struct thread_info *info)
1076 {
1077   if (info->private == NULL)
1078     return NULL;
1079
1080   if (info->private->dying)
1081     return "Exiting";
1082
1083   return NULL;
1084 }
1085
1086 /* Get the address of the thread local variable in load module LM which
1087    is stored at OFFSET within the thread local storage for thread PTID.  */
1088
1089 static CORE_ADDR
1090 thread_db_get_thread_local_address (ptid_t ptid,
1091                                     CORE_ADDR lm,
1092                                     CORE_ADDR offset)
1093 {
1094   struct thread_info *thread_info;
1095
1096   /* If we have not discovered any threads yet, check now.  */
1097   if (!have_threads ())
1098     thread_db_find_new_threads ();
1099
1100   /* Find the matching thread.  */
1101   thread_info = find_thread_pid (ptid);
1102
1103   if (thread_info != NULL && thread_info->private != NULL)
1104     {
1105       td_err_e err;
1106       void *address;
1107
1108       /* glibc doesn't provide the needed interface.  */
1109       if (!td_thr_tls_get_addr_p)
1110         throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR,
1111                      _("No TLS library support"));
1112
1113       /* Caller should have verified that lm != 0.  */
1114       gdb_assert (lm != 0);
1115
1116       /* Finally, get the address of the variable.  */
1117       err = td_thr_tls_get_addr_p (&thread_info->private->th,
1118                                    (void *)(size_t) lm,
1119                                    offset, &address);
1120
1121 #ifdef THREAD_DB_HAS_TD_NOTALLOC
1122       /* The memory hasn't been allocated, yet.  */
1123       if (err == TD_NOTALLOC)
1124           /* Now, if libthread_db provided the initialization image's
1125              address, we *could* try to build a non-lvalue value from
1126              the initialization image.  */
1127         throw_error (TLS_NOT_ALLOCATED_YET_ERROR,
1128                      _("TLS not allocated yet"));
1129 #endif
1130
1131       /* Something else went wrong.  */
1132       if (err != TD_OK)
1133         throw_error (TLS_GENERIC_ERROR,
1134                      (("%s")), thread_db_err_str (err));
1135
1136       /* Cast assuming host == target.  Joy.  */
1137       /* Do proper sign extension for the target.  */
1138       gdb_assert (exec_bfd);
1139       return (bfd_get_sign_extend_vma (exec_bfd) > 0
1140               ? (CORE_ADDR) (intptr_t) address
1141               : (CORE_ADDR) (uintptr_t) address);
1142     }
1143
1144   if (target_beneath->to_get_thread_local_address)
1145     return target_beneath->to_get_thread_local_address (ptid, lm, offset);
1146   else
1147     throw_error (TLS_GENERIC_ERROR,
1148                  _("TLS not supported on this target"));
1149 }
1150
1151 /* Callback routine used to find a thread based on the TID part of
1152    its PTID.  */
1153
1154 static int
1155 thread_db_find_thread_from_tid (struct thread_info *thread, void *data)
1156 {
1157   long *tid = (long *) data;
1158
1159   if (thread->private->tid == *tid)
1160     return 1;
1161
1162   return 0;
1163 }
1164
1165 /* Implement the to_get_ada_task_ptid target method for this target.  */
1166
1167 static ptid_t
1168 thread_db_get_ada_task_ptid (long lwp, long thread)
1169 {
1170   struct thread_info *thread_info;
1171
1172   thread_db_find_new_threads ();
1173   thread_info = iterate_over_threads (thread_db_find_thread_from_tid, &thread);
1174
1175   gdb_assert (thread_info != NULL);
1176
1177   return (thread_info->ptid);
1178 }
1179
1180 static void
1181 init_thread_db_ops (void)
1182 {
1183   thread_db_ops.to_shortname = "multi-thread";
1184   thread_db_ops.to_longname = "multi-threaded child process.";
1185   thread_db_ops.to_doc = "Threads and pthreads support.";
1186   thread_db_ops.to_detach = thread_db_detach;
1187   thread_db_ops.to_wait = thread_db_wait;
1188   thread_db_ops.to_mourn_inferior = thread_db_mourn_inferior;
1189   thread_db_ops.to_find_new_threads = thread_db_find_new_threads;
1190   thread_db_ops.to_pid_to_str = thread_db_pid_to_str;
1191   thread_db_ops.to_stratum = thread_stratum;
1192   thread_db_ops.to_has_thread_control = tc_schedlock;
1193   thread_db_ops.to_get_thread_local_address
1194     = thread_db_get_thread_local_address;
1195   thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
1196   thread_db_ops.to_can_async_p = thread_db_can_async_p;
1197   thread_db_ops.to_is_async_p = thread_db_is_async_p;
1198   thread_db_ops.to_async = thread_db_async;
1199   thread_db_ops.to_async_mask = thread_db_async_mask;
1200   thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
1201   thread_db_ops.to_magic = OPS_MAGIC;
1202 }
1203
1204 void
1205 _initialize_thread_db (void)
1206 {
1207   /* Only initialize the module if we can load libthread_db.  */
1208   if (thread_db_load ())
1209     {
1210       init_thread_db_ops ();
1211       add_target (&thread_db_ops);
1212
1213       /* Add ourselves to objfile event chain.  */
1214       observer_attach_new_objfile (thread_db_new_objfile);
1215     }
1216 }