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