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