Kill pthread_ops_hack
[platform/upstream/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   target_beneath->to_detach (target_beneath, args, from_tty);
788
789   /* Should this be done by detach_command?  */
790   target_mourn_inferior ();
791 }
792
793 /* Check if PID is currently stopped at the location of a thread event
794    breakpoint location.  If it is, read the event message and act upon
795    the event.  */
796
797 static void
798 check_event (ptid_t ptid)
799 {
800   struct regcache *regcache = get_thread_regcache (ptid);
801   struct gdbarch *gdbarch = get_regcache_arch (regcache);
802   td_event_msg_t msg;
803   td_thrinfo_t ti;
804   td_err_e err;
805   CORE_ADDR stop_pc;
806   int loop = 0;
807
808   /* Bail out early if we're not at a thread event breakpoint.  */
809   stop_pc = regcache_read_pc (regcache)
810             - gdbarch_decr_pc_after_break (gdbarch);
811   if (stop_pc != td_create_bp_addr && stop_pc != td_death_bp_addr)
812     return;
813
814   /* Access an lwp we know is stopped.  */
815   proc_handle.pid = GET_LWP (ptid);
816
817   /* If we have only looked at the first thread before libpthread was
818      initialized, we may not know its thread ID yet.  Make sure we do
819      before we add another thread to the list.  */
820   if (!have_threads ())
821     thread_db_find_new_threads ();
822
823   /* If we are at a create breakpoint, we do not know what new lwp
824      was created and cannot specifically locate the event message for it.
825      We have to call td_ta_event_getmsg() to get
826      the latest message.  Since we have no way of correlating whether
827      the event message we get back corresponds to our breakpoint, we must
828      loop and read all event messages, processing them appropriately.
829      This guarantees we will process the correct message before continuing
830      from the breakpoint.
831
832      Currently, death events are not enabled.  If they are enabled,
833      the death event can use the td_thr_event_getmsg() interface to
834      get the message specifically for that lwp and avoid looping
835      below.  */
836
837   loop = 1;
838
839   do
840     {
841       err = td_ta_event_getmsg_p (thread_agent, &msg);
842       if (err != TD_OK)
843         {
844           if (err == TD_NOMSG)
845             return;
846
847           error (_("Cannot get thread event message: %s"),
848                  thread_db_err_str (err));
849         }
850
851       err = td_thr_get_info_p (msg.th_p, &ti);
852       if (err != TD_OK)
853         error (_("Cannot get thread info: %s"), thread_db_err_str (err));
854
855       ptid = ptid_build (GET_PID (ptid), ti.ti_lid, 0);
856
857       switch (msg.event)
858         {
859         case TD_CREATE:
860           /* Call attach_thread whether or not we already know about a
861              thread with this thread ID.  */
862           attach_thread (ptid, msg.th_p, &ti);
863
864           break;
865
866         case TD_DEATH:
867
868           if (!in_thread_list (ptid))
869             error (_("Spurious thread death event."));
870
871           detach_thread (ptid);
872
873           break;
874
875         default:
876           error (_("Spurious thread event."));
877         }
878     }
879   while (loop);
880 }
881
882 static ptid_t
883 thread_db_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
884 {
885   ptid = target_beneath->to_wait (ptid, ourstatus);
886
887   if (ourstatus->kind == TARGET_WAITKIND_IGNORE)
888     return ptid;
889
890   if (ourstatus->kind == TARGET_WAITKIND_EXITED
891     || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
892     return pid_to_ptid (-1);
893
894   if (ourstatus->kind == TARGET_WAITKIND_EXECD)
895     {
896       remove_thread_event_breakpoints ();
897       unpush_target (&thread_db_ops);
898       using_thread_db = 0;
899
900       return ptid;
901     }
902
903   /* If we do not know about the main thread yet, this would be a good time to
904      find it.  */
905   if (ourstatus->kind == TARGET_WAITKIND_STOPPED && !have_threads ())
906     thread_db_find_new_threads ();
907
908   if (ourstatus->kind == TARGET_WAITKIND_STOPPED
909       && ourstatus->value.sig == TARGET_SIGNAL_TRAP)
910     /* Check for a thread event.  */
911     check_event (ptid);
912
913   if (have_threads ())
914     {
915       /* Change ptids back into the higher level PID + TID format.  If
916          the thread is dead and no longer on the thread list, we will
917          get back a dead ptid.  This can occur if the thread death
918          event gets postponed by other simultaneous events.  In such a
919          case, we want to just ignore the event and continue on.  */
920
921       ptid = thread_from_lwp (ptid);
922       if (GET_PID (ptid) == -1)
923         ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
924     }
925
926   return ptid;
927 }
928
929 static void
930 thread_db_mourn_inferior (struct target_ops *ops)
931 {
932   /* Forget about the child's process ID.  We shouldn't need it
933      anymore.  */
934   proc_handle.pid = 0;
935
936   target_beneath->to_mourn_inferior (target_beneath);
937
938   /* Delete the old thread event breakpoints.  Do this after mourning
939      the inferior, so that we don't try to uninsert them.  */
940   remove_thread_event_breakpoints ();
941
942   /* Detach thread_db target ops.  */
943   unpush_target (ops);
944   using_thread_db = 0;
945 }
946
947 static int
948 thread_db_can_async_p (void)
949 {
950   return target_beneath->to_can_async_p ();
951 }
952
953 static int
954 thread_db_is_async_p (void)
955 {
956   return target_beneath->to_is_async_p ();
957 }
958
959 static void
960 thread_db_async (void (*callback) (enum inferior_event_type event_type,
961                                    void *context), void *context)
962 {
963   return target_beneath->to_async (callback, context);
964 }
965
966 static int
967 thread_db_async_mask (int mask)
968 {
969   return target_beneath->to_async_mask (mask);
970 }
971
972 static int
973 find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
974 {
975   td_thrinfo_t ti;
976   td_err_e err;
977   ptid_t ptid;
978   struct thread_info *tp;
979
980   err = td_thr_get_info_p (th_p, &ti);
981   if (err != TD_OK)
982     error (_("find_new_threads_callback: cannot get thread info: %s"),
983            thread_db_err_str (err));
984
985   if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
986     return 0;                   /* A zombie -- ignore.  */
987
988   ptid = ptid_build (GET_PID (inferior_ptid), ti.ti_lid, 0);
989
990   if (ti.ti_tid == 0)
991     {
992       /* A thread ID of zero means that this is the main thread, but
993          glibc has not yet initialized thread-local storage and the
994          pthread library.  We do not know what the thread's TID will
995          be yet.  Just enable event reporting and otherwise ignore
996          it.  */
997
998       err = td_thr_event_enable_p (th_p, 1);
999       if (err != TD_OK)
1000         error (_("Cannot enable thread event reporting for %s: %s"),
1001                target_pid_to_str (ptid), thread_db_err_str (err));
1002
1003       return 0;
1004     }
1005
1006   tp = find_thread_pid (ptid);
1007   if (tp == NULL || tp->private == NULL)
1008     attach_thread (ptid, th_p, &ti);
1009
1010   return 0;
1011 }
1012
1013 /* Search for new threads, accessing memory through stopped thread
1014    PTID.  */
1015
1016 static void
1017 thread_db_find_new_threads (void)
1018 {
1019   td_err_e err;
1020   struct lwp_info *lp;
1021   ptid_t ptid;
1022
1023   /* In linux, we can only read memory through a stopped lwp.  */
1024   ALL_LWPS (lp, ptid)
1025     if (lp->stopped)
1026       break;
1027
1028   if (!lp)
1029     /* There is no stopped thread.  Bail out.  */
1030     return;
1031
1032   /* Access an lwp we know is stopped.  */
1033   proc_handle.pid = GET_LWP (ptid);
1034   /* Iterate over all user-space threads to discover new threads.  */
1035   err = td_ta_thr_iter_p (thread_agent, find_new_threads_callback, NULL,
1036                           TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY,
1037                           TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS);
1038   if (err != TD_OK)
1039     error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1040 }
1041
1042 static char *
1043 thread_db_pid_to_str (ptid_t ptid)
1044 {
1045   struct thread_info *thread_info = find_thread_pid (ptid);
1046
1047   if (thread_info != NULL && thread_info->private != NULL)
1048     {
1049       static char buf[64];
1050       thread_t tid;
1051
1052       tid = thread_info->private->tid;
1053       thread_info = find_thread_pid (ptid);
1054       snprintf (buf, sizeof (buf), "Thread 0x%lx (LWP %ld)",
1055                 tid, GET_LWP (ptid));
1056
1057       return buf;
1058     }
1059
1060   if (target_beneath->to_pid_to_str (ptid))
1061     return target_beneath->to_pid_to_str (ptid);
1062
1063   return normal_pid_to_str (ptid);
1064 }
1065
1066 /* Return a string describing the state of the thread specified by
1067    INFO.  */
1068
1069 static char *
1070 thread_db_extra_thread_info (struct thread_info *info)
1071 {
1072   if (info->private == NULL)
1073     return NULL;
1074
1075   if (info->private->dying)
1076     return "Exiting";
1077
1078   return NULL;
1079 }
1080
1081 /* Get the address of the thread local variable in load module LM which
1082    is stored at OFFSET within the thread local storage for thread PTID.  */
1083
1084 static CORE_ADDR
1085 thread_db_get_thread_local_address (ptid_t ptid,
1086                                     CORE_ADDR lm,
1087                                     CORE_ADDR offset)
1088 {
1089   struct thread_info *thread_info;
1090
1091   /* If we have not discovered any threads yet, check now.  */
1092   if (!have_threads ())
1093     thread_db_find_new_threads ();
1094
1095   /* Find the matching thread.  */
1096   thread_info = find_thread_pid (ptid);
1097
1098   if (thread_info != NULL && thread_info->private != NULL)
1099     {
1100       td_err_e err;
1101       void *address;
1102
1103       /* glibc doesn't provide the needed interface.  */
1104       if (!td_thr_tls_get_addr_p)
1105         throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR,
1106                      _("No TLS library support"));
1107
1108       /* Caller should have verified that lm != 0.  */
1109       gdb_assert (lm != 0);
1110
1111       /* Finally, get the address of the variable.  */
1112       err = td_thr_tls_get_addr_p (&thread_info->private->th,
1113                                    (void *)(size_t) lm,
1114                                    offset, &address);
1115
1116 #ifdef THREAD_DB_HAS_TD_NOTALLOC
1117       /* The memory hasn't been allocated, yet.  */
1118       if (err == TD_NOTALLOC)
1119           /* Now, if libthread_db provided the initialization image's
1120              address, we *could* try to build a non-lvalue value from
1121              the initialization image.  */
1122         throw_error (TLS_NOT_ALLOCATED_YET_ERROR,
1123                      _("TLS not allocated yet"));
1124 #endif
1125
1126       /* Something else went wrong.  */
1127       if (err != TD_OK)
1128         throw_error (TLS_GENERIC_ERROR,
1129                      (("%s")), thread_db_err_str (err));
1130
1131       /* Cast assuming host == target.  Joy.  */
1132       /* Do proper sign extension for the target.  */
1133       gdb_assert (exec_bfd);
1134       return (bfd_get_sign_extend_vma (exec_bfd) > 0
1135               ? (CORE_ADDR) (intptr_t) address
1136               : (CORE_ADDR) (uintptr_t) address);
1137     }
1138
1139   if (target_beneath->to_get_thread_local_address)
1140     return target_beneath->to_get_thread_local_address (ptid, lm, offset);
1141   else
1142     throw_error (TLS_GENERIC_ERROR,
1143                  _("TLS not supported on this target"));
1144 }
1145
1146 /* Callback routine used to find a thread based on the TID part of
1147    its PTID.  */
1148
1149 static int
1150 thread_db_find_thread_from_tid (struct thread_info *thread, void *data)
1151 {
1152   long *tid = (long *) data;
1153
1154   if (thread->private->tid == *tid)
1155     return 1;
1156
1157   return 0;
1158 }
1159
1160 /* Implement the to_get_ada_task_ptid target method for this target.  */
1161
1162 static ptid_t
1163 thread_db_get_ada_task_ptid (long lwp, long thread)
1164 {
1165   struct thread_info *thread_info;
1166
1167   thread_db_find_new_threads ();
1168   thread_info = iterate_over_threads (thread_db_find_thread_from_tid, &thread);
1169
1170   gdb_assert (thread_info != NULL);
1171
1172   return (thread_info->ptid);
1173 }
1174
1175 static void
1176 init_thread_db_ops (void)
1177 {
1178   thread_db_ops.to_shortname = "multi-thread";
1179   thread_db_ops.to_longname = "multi-threaded child process.";
1180   thread_db_ops.to_doc = "Threads and pthreads support.";
1181   thread_db_ops.to_detach = thread_db_detach;
1182   thread_db_ops.to_wait = thread_db_wait;
1183   thread_db_ops.to_mourn_inferior = thread_db_mourn_inferior;
1184   thread_db_ops.to_find_new_threads = thread_db_find_new_threads;
1185   thread_db_ops.to_pid_to_str = thread_db_pid_to_str;
1186   thread_db_ops.to_stratum = thread_stratum;
1187   thread_db_ops.to_has_thread_control = tc_schedlock;
1188   thread_db_ops.to_get_thread_local_address
1189     = thread_db_get_thread_local_address;
1190   thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
1191   thread_db_ops.to_can_async_p = thread_db_can_async_p;
1192   thread_db_ops.to_is_async_p = thread_db_is_async_p;
1193   thread_db_ops.to_async = thread_db_async;
1194   thread_db_ops.to_async_mask = thread_db_async_mask;
1195   thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
1196   thread_db_ops.to_magic = OPS_MAGIC;
1197 }
1198
1199 void
1200 _initialize_thread_db (void)
1201 {
1202   /* Only initialize the module if we can load libthread_db.  */
1203   if (thread_db_load ())
1204     {
1205       init_thread_db_ops ();
1206       add_target (&thread_db_ops);
1207
1208       /* Add ourselves to objfile event chain.  */
1209       observer_attach_new_objfile (thread_db_new_objfile);
1210     }
1211 }