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