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