*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / linux-thread-db.c
CommitLineData
fb0e1ba7 1/* libthread_db assisted debugging support, generic parts.
1bac305b 2
4c38e0a4
JB
3 Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
4 2010 Free Software Foundation, Inc.
fb0e1ba7
MK
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
fb0e1ba7
MK
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
fb0e1ba7
MK
20
21#include "defs.h"
22
23#include "gdb_assert.h"
24#include <dlfcn.h>
25#include "gdb_proc_service.h"
26#include "gdb_thread_db.h"
27
bda9cb72 28#include "bfd.h"
17a37d48 29#include "command.h"
93ad78a7 30#include "exceptions.h"
17a37d48 31#include "gdbcmd.h"
fb0e1ba7
MK
32#include "gdbthread.h"
33#include "inferior.h"
bda9cb72
MK
34#include "symfile.h"
35#include "objfiles.h"
fb0e1ba7 36#include "target.h"
4e052eda 37#include "regcache.h"
17a37d48 38#include "solib.h"
3f47be5c 39#include "solib-svr4.h"
16451949 40#include "gdbcore.h"
06d3b283 41#include "observer.h"
0ec9a092 42#include "linux-nat.h"
fb0e1ba7 43
979894f2
NR
44#include <signal.h>
45
a2f23071
DJ
46#ifdef HAVE_GNU_LIBC_VERSION_H
47#include <gnu/libc-version.h>
48#endif
49
17faa917
DJ
50/* GNU/Linux libthread_db support.
51
52 libthread_db is a library, provided along with libpthread.so, which
53 exposes the internals of the thread library to a debugger. It
54 allows GDB to find existing threads, new threads as they are
55 created, thread IDs (usually, the result of pthread_self), and
56 thread-local variables.
57
58 The libthread_db interface originates on Solaris, where it is
59 both more powerful and more complicated. This implementation
60 only works for LinuxThreads and NPTL, the two glibc threading
61 libraries. It assumes that each thread is permanently assigned
62 to a single light-weight process (LWP).
63
64 libthread_db-specific information is stored in the "private" field
65 of struct thread_info. When the field is NULL we do not yet have
66 information about the new thread; this could be temporary (created,
67 but the thread library's data structures do not reflect it yet)
68 or permanent (created using clone instead of pthread_create).
69
70 Process IDs managed by linux-thread-db.c match those used by
71 linux-nat.c: a common PID for all processes, an LWP ID for each
72 thread, and no TID. We save the TID in private. Keeping it out
73 of the ptid_t prevents thread IDs changing when libpthread is
74 loaded or unloaded. */
75
17a37d48
PP
76static char *libthread_db_search_path;
77
02d868e8
PP
78/* If non-zero, print details of libthread_db processing. */
79
80static int libthread_db_debug;
81
82static void
83show_libthread_db_debug (struct ui_file *file, int from_tty,
84 struct cmd_list_element *c, const char *value)
85{
86 fprintf_filtered (file, _("libthread-db debugging is %s.\n"), value);
87}
88
89
8605d56e
AC
90/* If we're running on GNU/Linux, we must explicitly attach to any new
91 threads. */
fb0e1ba7 92
fb0e1ba7
MK
93/* This module's target vector. */
94static struct target_ops thread_db_ops;
95
fb0e1ba7
MK
96/* Non-zero if we have determined the signals used by the threads
97 library. */
98static int thread_signals;
99static sigset_t thread_stop_set;
100static sigset_t thread_print_set;
101
d90e17a7
PA
102struct thread_db_info
103{
104 struct thread_db_info *next;
105
106 /* Process id this object refers to. */
107 int pid;
108
109 /* Handle from dlopen for libthread_db.so. */
110 void *handle;
111
112 /* Structure that identifies the child process for the
113 <proc_service.h> interface. */
114 struct ps_prochandle proc_handle;
115
116 /* Connection to the libthread_db library. */
117 td_thragent_t *thread_agent;
118
4d062f1a
PA
119 /* True if we need to apply the workaround for glibc/BZ5983. When
120 we catch a PTRACE_O_TRACEFORK, and go query the child's thread
121 list, nptl_db returns the parent's threads in addition to the new
122 (single) child thread. If this flag is set, we do extra work to
123 be able to ignore such stale entries. */
124 int need_stale_parent_threads_check;
125
d90e17a7
PA
126 /* Location of the thread creation event breakpoint. The code at
127 this location in the child process will be called by the pthread
128 library whenever a new thread is created. By setting a special
129 breakpoint at this location, GDB can detect when a new thread is
130 created. We obtain this location via the td_ta_event_addr
131 call. */
132 CORE_ADDR td_create_bp_addr;
fb0e1ba7 133
d90e17a7
PA
134 /* Location of the thread death event breakpoint. */
135 CORE_ADDR td_death_bp_addr;
fb0e1ba7 136
d90e17a7 137 /* Pointers to the libthread_db functions. */
fb0e1ba7 138
d90e17a7 139 td_err_e (*td_init_p) (void);
fb0e1ba7 140
d90e17a7 141 td_err_e (*td_ta_new_p) (struct ps_prochandle * ps,
b4acd559 142 td_thragent_t **ta);
d90e17a7
PA
143 td_err_e (*td_ta_map_id2thr_p) (const td_thragent_t *ta, thread_t pt,
144 td_thrhandle_t *__th);
145 td_err_e (*td_ta_map_lwp2thr_p) (const td_thragent_t *ta,
146 lwpid_t lwpid, td_thrhandle_t *th);
147 td_err_e (*td_ta_thr_iter_p) (const td_thragent_t *ta,
148 td_thr_iter_f *callback, void *cbdata_p,
149 td_thr_state_e state, int ti_pri,
150 sigset_t *ti_sigmask_p,
151 unsigned int ti_user_flags);
152 td_err_e (*td_ta_event_addr_p) (const td_thragent_t *ta,
153 td_event_e event, td_notify_t *ptr);
154 td_err_e (*td_ta_set_event_p) (const td_thragent_t *ta,
155 td_thr_events_t *event);
21e1bee4
PP
156 td_err_e (*td_ta_clear_event_p) (const td_thragent_t *ta,
157 td_thr_events_t *event);
d90e17a7
PA
158 td_err_e (*td_ta_event_getmsg_p) (const td_thragent_t *ta,
159 td_event_msg_t *msg);
160
161 td_err_e (*td_thr_validate_p) (const td_thrhandle_t *th);
162 td_err_e (*td_thr_get_info_p) (const td_thrhandle_t *th,
163 td_thrinfo_t *infop);
164 td_err_e (*td_thr_event_enable_p) (const td_thrhandle_t *th,
165 int event);
166
167 td_err_e (*td_thr_tls_get_addr_p) (const td_thrhandle_t *th,
00f515da
DE
168 psaddr_t map_address,
169 size_t offset, psaddr_t *address);
d90e17a7
PA
170};
171
172/* List of known processes using thread_db, and the required
173 bookkeeping. */
174struct thread_db_info *thread_db_list;
175
176static void thread_db_find_new_threads_1 (ptid_t ptid);
02c6c942 177static void thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new);
d90e17a7
PA
178
179/* Add the current inferior to the list of processes using libpthread.
180 Return a pointer to the newly allocated object that was added to
181 THREAD_DB_LIST. HANDLE is the handle returned by dlopen'ing
182 LIBTHREAD_DB_SO. */
183
184static struct thread_db_info *
185add_thread_db_info (void *handle)
186{
d90e17a7
PA
187 struct thread_db_info *info;
188
189 info = xcalloc (1, sizeof (*info));
190 info->pid = ptid_get_pid (inferior_ptid);
191 info->handle = handle;
4d062f1a 192 info->need_stale_parent_threads_check = 1;
d90e17a7
PA
193
194 info->next = thread_db_list;
195 thread_db_list = info;
196
197 return info;
198}
199
200/* Return the thread_db_info object representing the bookkeeping
201 related to process PID, if any; NULL otherwise. */
202
203static struct thread_db_info *
204get_thread_db_info (int pid)
205{
206 struct thread_db_info *info;
207
208 for (info = thread_db_list; info; info = info->next)
209 if (pid == info->pid)
210 return info;
211
212 return NULL;
213}
214
215/* When PID has exited or has been detached, we no longer want to keep
216 track of it as using libpthread. Call this function to discard
217 thread_db related info related to PID. Note that this closes
218 LIBTHREAD_DB_SO's dlopen'ed handle. */
219
220static void
221delete_thread_db_info (int pid)
222{
223 struct thread_db_info *info, *info_prev;
224
225 info_prev = NULL;
226
227 for (info = thread_db_list; info; info_prev = info, info = info->next)
228 if (pid == info->pid)
229 break;
230
231 if (info == NULL)
232 return;
233
234 if (info->handle != NULL)
235 dlclose (info->handle);
236
237 if (info_prev)
238 info_prev->next = info->next;
239 else
240 thread_db_list = info->next;
241
242 xfree (info);
243}
fb0e1ba7
MK
244
245/* Prototypes for local functions. */
02c6c942
PP
246static int attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
247 const td_thrinfo_t *ti_p);
17faa917 248static void detach_thread (ptid_t ptid);
fb0e1ba7
MK
249\f
250
5365276c
DJ
251/* Use "struct private_thread_info" to cache thread state. This is
252 a substantial optimization. */
253
fb0e1ba7
MK
254struct private_thread_info
255{
a2f23071
DJ
256 /* Flag set when we see a TD_DEATH event for this thread. */
257 unsigned int dying:1;
258
5365276c 259 /* Cached thread state. */
5365276c 260 td_thrhandle_t th;
17faa917 261 thread_t tid;
fb0e1ba7 262};
fb0e1ba7 263\f
21bf60fe 264
fb0e1ba7
MK
265static char *
266thread_db_err_str (td_err_e err)
267{
268 static char buf[64];
269
270 switch (err)
271 {
272 case TD_OK:
273 return "generic 'call succeeded'";
274 case TD_ERR:
275 return "generic error";
276 case TD_NOTHR:
277 return "no thread to satisfy query";
278 case TD_NOSV:
279 return "no sync handle to satisfy query";
280 case TD_NOLWP:
281 return "no LWP to satisfy query";
282 case TD_BADPH:
283 return "invalid process handle";
284 case TD_BADTH:
285 return "invalid thread handle";
286 case TD_BADSH:
287 return "invalid synchronization handle";
288 case TD_BADTA:
289 return "invalid thread agent";
290 case TD_BADKEY:
291 return "invalid key";
292 case TD_NOMSG:
293 return "no event message for getmsg";
294 case TD_NOFPREGS:
295 return "FPU register set not available";
296 case TD_NOLIBTHREAD:
297 return "application not linked with libthread";
298 case TD_NOEVENT:
299 return "requested event is not supported";
300 case TD_NOCAPAB:
301 return "capability not available";
302 case TD_DBERR:
303 return "debugger service failed";
304 case TD_NOAPLIC:
305 return "operation not applicable to";
306 case TD_NOTSD:
307 return "no thread-specific data for this thread";
308 case TD_MALLOC:
309 return "malloc failed";
310 case TD_PARTIALREG:
311 return "only part of register set was written/read";
312 case TD_NOXREGS:
313 return "X register set not available for this thread";
59f80f10
DJ
314#ifdef THREAD_DB_HAS_TD_NOTALLOC
315 case TD_NOTALLOC:
316 return "thread has not yet allocated TLS for given module";
317#endif
318#ifdef THREAD_DB_HAS_TD_VERSION
319 case TD_VERSION:
320 return "versions of libpthread and libthread_db do not match";
321#endif
322#ifdef THREAD_DB_HAS_TD_NOTLS
323 case TD_NOTLS:
324 return "there is no TLS segment in the given module";
325#endif
fb0e1ba7
MK
326 default:
327 snprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err);
328 return buf;
329 }
330}
fb0e1ba7 331\f
4105de34
DJ
332/* Return 1 if any threads have been registered. There may be none if
333 the threading library is not fully initialized yet. */
334
335static int
d90e17a7 336have_threads_callback (struct thread_info *thread, void *args)
4105de34 337{
d90e17a7 338 int pid = * (int *) args;
e0881a8e 339
d90e17a7
PA
340 if (ptid_get_pid (thread->ptid) != pid)
341 return 0;
342
e3bc4218 343 return thread->private != NULL;
4105de34
DJ
344}
345
346static int
d90e17a7 347have_threads (ptid_t ptid)
4105de34 348{
d90e17a7
PA
349 int pid = ptid_get_pid (ptid);
350
351 return iterate_over_threads (have_threads_callback, &pid) != NULL;
4105de34
DJ
352}
353
d90e17a7
PA
354struct thread_get_info_inout
355{
356 struct thread_info *thread_info;
357 struct thread_db_info *thread_db_info;
358};
359
5365276c 360/* A callback function for td_ta_thr_iter, which we use to map all
cdbc0b18 361 threads to LWPs.
5365276c
DJ
362
363 THP is a handle to the current thread; if INFOP is not NULL, the
364 struct thread_info associated with this thread is returned in
b9b5d7ea
JJ
365 *INFOP.
366
367 If the thread is a zombie, TD_THR_ZOMBIE is returned. Otherwise,
368 zero is returned to indicate success. */
5365276c
DJ
369
370static int
d90e17a7 371thread_get_info_callback (const td_thrhandle_t *thp, void *argp)
5365276c
DJ
372{
373 td_thrinfo_t ti;
374 td_err_e err;
5365276c 375 ptid_t thread_ptid;
d90e17a7
PA
376 struct thread_get_info_inout *inout;
377 struct thread_db_info *info;
378
379 inout = argp;
380 info = inout->thread_db_info;
5365276c 381
d90e17a7 382 err = info->td_thr_get_info_p (thp, &ti);
5365276c 383 if (err != TD_OK)
8a3fe4f8 384 error (_("thread_get_info_callback: cannot get thread info: %s"),
5365276c
DJ
385 thread_db_err_str (err));
386
387 /* Fill the cache. */
d90e17a7 388 thread_ptid = ptid_build (info->pid, ti.ti_lid, 0);
e09875d4 389 inout->thread_info = find_thread_ptid (thread_ptid);
5365276c 390
b9b5d7ea 391 /* In the case of a zombie thread, don't continue. We don't want to
f90ef764 392 attach to it thinking it is a new thread. */
b9b5d7ea 393 if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
d90e17a7 394 return TD_THR_ZOMBIE;
b9b5d7ea 395
d90e17a7 396 if (inout->thread_info == NULL)
5365276c
DJ
397 {
398 /* New thread. Attach to it now (why wait?). */
d90e17a7
PA
399 if (!have_threads (thread_ptid))
400 thread_db_find_new_threads_1 (thread_ptid);
4c28f408
PA
401 else
402 attach_thread (thread_ptid, thp, &ti);
e09875d4 403 inout->thread_info = find_thread_ptid (thread_ptid);
d90e17a7 404 gdb_assert (inout->thread_info != NULL);
5365276c
DJ
405 }
406
5365276c
DJ
407 return 0;
408}
5365276c 409\f
fb0e1ba7
MK
410/* Convert between user-level thread ids and LWP ids. */
411
39f77062
KB
412static ptid_t
413thread_from_lwp (ptid_t ptid)
fb0e1ba7 414{
fb0e1ba7
MK
415 td_thrhandle_t th;
416 td_err_e err;
d90e17a7
PA
417 struct thread_db_info *info;
418 struct thread_get_info_inout io = {0};
fb0e1ba7 419
17faa917
DJ
420 /* This ptid comes from linux-nat.c, which should always fill in the
421 LWP. */
422 gdb_assert (GET_LWP (ptid) != 0);
fb0e1ba7 423
d90e17a7
PA
424 info = get_thread_db_info (GET_PID (ptid));
425
4c28f408 426 /* Access an lwp we know is stopped. */
d90e17a7
PA
427 info->proc_handle.ptid = ptid;
428 err = info->td_ta_map_lwp2thr_p (info->thread_agent, GET_LWP (ptid), &th);
fb0e1ba7 429 if (err != TD_OK)
8a3fe4f8 430 error (_("Cannot find user-level thread for LWP %ld: %s"),
39f77062 431 GET_LWP (ptid), thread_db_err_str (err));
fb0e1ba7 432
b9b5d7ea
JJ
433 /* Fetch the thread info. If we get back TD_THR_ZOMBIE, then the
434 event thread has already died. If another gdb interface has called
435 thread_alive() previously, the thread won't be found on the thread list
436 anymore. In that case, we don't want to process this ptid anymore
437 to avoid the possibility of later treating it as a newly
438 discovered thread id that we should add to the list. Thus,
439 we return a -1 ptid which is also how the thread list marks a
440 dead thread. */
d90e17a7
PA
441 io.thread_db_info = info;
442 io.thread_info = NULL;
443 if (thread_get_info_callback (&th, &io) == TD_THR_ZOMBIE
444 && io.thread_info == NULL)
445 return minus_one_ptid;
b9b5d7ea 446
17faa917
DJ
447 gdb_assert (ptid_get_tid (ptid) == 0);
448 return ptid;
fb0e1ba7
MK
449}
450\f
451
4c28f408
PA
452/* Attach to lwp PTID, doing whatever else is required to have this
453 LWP under the debugger's control --- e.g., enabling event
454 reporting. Returns true on success. */
455int
456thread_db_attach_lwp (ptid_t ptid)
457{
458 td_thrhandle_t th;
459 td_thrinfo_t ti;
460 td_err_e err;
d90e17a7 461 struct thread_db_info *info;
4c28f408 462
d90e17a7
PA
463 info = get_thread_db_info (GET_PID (ptid));
464
465 if (info == NULL)
4c28f408
PA
466 return 0;
467
468 /* This ptid comes from linux-nat.c, which should always fill in the
469 LWP. */
470 gdb_assert (GET_LWP (ptid) != 0);
471
472 /* Access an lwp we know is stopped. */
d90e17a7 473 info->proc_handle.ptid = ptid;
4c28f408
PA
474
475 /* If we have only looked at the first thread before libpthread was
476 initialized, we may not know its thread ID yet. Make sure we do
477 before we add another thread to the list. */
d90e17a7
PA
478 if (!have_threads (ptid))
479 thread_db_find_new_threads_1 (ptid);
4c28f408 480
d90e17a7 481 err = info->td_ta_map_lwp2thr_p (info->thread_agent, GET_LWP (ptid), &th);
4c28f408
PA
482 if (err != TD_OK)
483 /* Cannot find user-level thread. */
484 return 0;
485
d90e17a7 486 err = info->td_thr_get_info_p (&th, &ti);
4c28f408
PA
487 if (err != TD_OK)
488 {
489 warning (_("Cannot get thread info: %s"), thread_db_err_str (err));
490 return 0;
491 }
492
493 attach_thread (ptid, &th, &ti);
494 return 1;
495}
496
5220ea4c
AC
497static void *
498verbose_dlsym (void *handle, const char *name)
499{
500 void *sym = dlsym (handle, name);
501 if (sym == NULL)
8a3fe4f8 502 warning (_("Symbol \"%s\" not found in libthread_db: %s"), name, dlerror ());
5220ea4c
AC
503 return sym;
504}
505
cdbc0b18 506static td_err_e
d90e17a7 507enable_thread_event (int event, CORE_ADDR *bp)
24557e30
AC
508{
509 td_notify_t notify;
cdbc0b18 510 td_err_e err;
d90e17a7
PA
511 struct thread_db_info *info;
512
513 info = get_thread_db_info (GET_PID (inferior_ptid));
24557e30 514
4c28f408 515 /* Access an lwp we know is stopped. */
d90e17a7 516 info->proc_handle.ptid = inferior_ptid;
4c28f408 517
24557e30 518 /* Get the breakpoint address for thread EVENT. */
d90e17a7 519 err = info->td_ta_event_addr_p (info->thread_agent, event, &notify);
24557e30 520 if (err != TD_OK)
cdbc0b18 521 return err;
24557e30
AC
522
523 /* Set up the breakpoint. */
16451949
AS
524 gdb_assert (exec_bfd);
525 (*bp) = (gdbarch_convert_from_func_ptr_addr
a97b0ac8 526 (target_gdbarch,
16451949
AS
527 /* Do proper sign extension for the target. */
528 (bfd_get_sign_extend_vma (exec_bfd) > 0
529 ? (CORE_ADDR) (intptr_t) notify.u.bptaddr
530 : (CORE_ADDR) (uintptr_t) notify.u.bptaddr),
531 &current_target));
a6d9a66e 532 create_thread_event_breakpoint (target_gdbarch, *bp);
24557e30 533
cdbc0b18 534 return TD_OK;
24557e30
AC
535}
536
fb0e1ba7
MK
537static void
538enable_thread_event_reporting (void)
539{
540 td_thr_events_t events;
fb0e1ba7 541 td_err_e err;
a2f23071
DJ
542#ifdef HAVE_GNU_LIBC_VERSION_H
543 const char *libc_version;
544 int libc_major, libc_minor;
545#endif
d90e17a7
PA
546 struct thread_db_info *info;
547
548 info = get_thread_db_info (GET_PID (inferior_ptid));
fb0e1ba7
MK
549
550 /* We cannot use the thread event reporting facility if these
551 functions aren't available. */
d90e17a7
PA
552 if (info->td_ta_event_addr_p == NULL
553 || info->td_ta_set_event_p == NULL
554 || info->td_ta_event_getmsg_p == NULL
555 || info->td_thr_event_enable_p == NULL)
fb0e1ba7
MK
556 return;
557
558 /* Set the process wide mask saying which events we're interested in. */
559 td_event_emptyset (&events);
560 td_event_addset (&events, TD_CREATE);
a2f23071
DJ
561
562#ifdef HAVE_GNU_LIBC_VERSION_H
34091d9b 563 /* The event reporting facility is broken for TD_DEATH events in
2ef52e77 564 glibc 2.1.3, so don't enable it if we have glibc but a lower
34091d9b 565 version. */
a2f23071
DJ
566 libc_version = gnu_get_libc_version ();
567 if (sscanf (libc_version, "%d.%d", &libc_major, &libc_minor) == 2
568 && (libc_major > 2 || (libc_major == 2 && libc_minor > 1)))
fb0e1ba7 569#endif
a2f23071 570 td_event_addset (&events, TD_DEATH);
fb0e1ba7 571
d90e17a7 572 err = info->td_ta_set_event_p (info->thread_agent, &events);
fb0e1ba7
MK
573 if (err != TD_OK)
574 {
8a3fe4f8 575 warning (_("Unable to set global thread event mask: %s"),
fb0e1ba7
MK
576 thread_db_err_str (err));
577 return;
578 }
579
580 /* Delete previous thread event breakpoints, if any. */
581 remove_thread_event_breakpoints ();
d90e17a7
PA
582 info->td_create_bp_addr = 0;
583 info->td_death_bp_addr = 0;
fb0e1ba7 584
24557e30 585 /* Set up the thread creation event. */
d90e17a7 586 err = enable_thread_event (TD_CREATE, &info->td_create_bp_addr);
cdbc0b18 587 if (err != TD_OK)
fb0e1ba7 588 {
8a3fe4f8 589 warning (_("Unable to get location for thread creation breakpoint: %s"),
fb0e1ba7
MK
590 thread_db_err_str (err));
591 return;
592 }
593
24557e30 594 /* Set up the thread death event. */
d90e17a7 595 err = enable_thread_event (TD_DEATH, &info->td_death_bp_addr);
cdbc0b18 596 if (err != TD_OK)
fb0e1ba7 597 {
8a3fe4f8 598 warning (_("Unable to get location for thread death breakpoint: %s"),
fb0e1ba7
MK
599 thread_db_err_str (err));
600 return;
601 }
fb0e1ba7
MK
602}
603
456b0e24
PP
604/* Same as thread_db_find_new_threads_1, but silently ignore errors. */
605
606static void
607thread_db_find_new_threads_silently (ptid_t ptid)
608{
609 volatile struct gdb_exception except;
610
611 TRY_CATCH (except, RETURN_MASK_ERROR)
612 {
02c6c942 613 thread_db_find_new_threads_2 (ptid, 1);
456b0e24
PP
614 }
615
02d868e8 616 if (except.reason < 0 && libthread_db_debug)
e0881a8e
MS
617 {
618 exception_fprintf (gdb_stderr, except,
619 "Warning: thread_db_find_new_threads_silently: ");
620 }
456b0e24
PP
621}
622
d90e17a7
PA
623/* Lookup a library in which given symbol resides.
624 Note: this is looking in GDB process, not in the inferior.
625 Returns library name, or NULL. */
626
627static const char *
628dladdr_to_soname (const void *addr)
629{
630 Dl_info info;
631
632 if (dladdr (addr, &info) != 0)
633 return info.dli_fname;
634 return NULL;
635}
636
17a37d48
PP
637/* Attempt to initialize dlopen()ed libthread_db, described by HANDLE.
638 Return 1 on success.
639 Failure could happen if libthread_db does not have symbols we expect,
640 or when it refuses to work with the current inferior (e.g. due to
641 version mismatch between libthread_db and libpthread). */
642
643static int
d90e17a7 644try_thread_db_load_1 (struct thread_db_info *info)
17a37d48
PP
645{
646 td_err_e err;
647
648 /* Initialize pointers to the dynamic library functions we will use.
649 Essential functions first. */
650
d90e17a7
PA
651 info->td_init_p = verbose_dlsym (info->handle, "td_init");
652 if (info->td_init_p == NULL)
17a37d48
PP
653 return 0;
654
d90e17a7 655 err = info->td_init_p ();
17a37d48
PP
656 if (err != TD_OK)
657 {
658 warning (_("Cannot initialize libthread_db: %s"), thread_db_err_str (err));
659 return 0;
660 }
661
d90e17a7
PA
662 info->td_ta_new_p = verbose_dlsym (info->handle, "td_ta_new");
663 if (info->td_ta_new_p == NULL)
17a37d48
PP
664 return 0;
665
666 /* Initialize the structure that identifies the child process. */
d90e17a7 667 info->proc_handle.ptid = inferior_ptid;
17a37d48
PP
668
669 /* Now attempt to open a connection to the thread library. */
d90e17a7 670 err = info->td_ta_new_p (&info->proc_handle, &info->thread_agent);
17a37d48
PP
671 if (err != TD_OK)
672 {
02d868e8 673 if (libthread_db_debug)
17a37d48
PP
674 printf_unfiltered (_("td_ta_new failed: %s\n"),
675 thread_db_err_str (err));
676 else
677 switch (err)
678 {
679 case TD_NOLIBTHREAD:
680#ifdef THREAD_DB_HAS_TD_VERSION
681 case TD_VERSION:
682#endif
683 /* The errors above are not unexpected and silently ignored:
684 they just mean we haven't found correct version of
685 libthread_db yet. */
686 break;
687 default:
688 warning (_("td_ta_new failed: %s"), thread_db_err_str (err));
689 }
690 return 0;
691 }
692
d90e17a7
PA
693 info->td_ta_map_id2thr_p = verbose_dlsym (info->handle, "td_ta_map_id2thr");
694 if (info->td_ta_map_id2thr_p == NULL)
17a37d48
PP
695 return 0;
696
d90e17a7
PA
697 info->td_ta_map_lwp2thr_p = verbose_dlsym (info->handle, "td_ta_map_lwp2thr");
698 if (info->td_ta_map_lwp2thr_p == NULL)
17a37d48
PP
699 return 0;
700
d90e17a7
PA
701 info->td_ta_thr_iter_p = verbose_dlsym (info->handle, "td_ta_thr_iter");
702 if (info->td_ta_thr_iter_p == NULL)
17a37d48
PP
703 return 0;
704
d90e17a7
PA
705 info->td_thr_validate_p = verbose_dlsym (info->handle, "td_thr_validate");
706 if (info->td_thr_validate_p == NULL)
17a37d48
PP
707 return 0;
708
d90e17a7
PA
709 info->td_thr_get_info_p = verbose_dlsym (info->handle, "td_thr_get_info");
710 if (info->td_thr_get_info_p == NULL)
17a37d48
PP
711 return 0;
712
713 /* These are not essential. */
d90e17a7
PA
714 info->td_ta_event_addr_p = dlsym (info->handle, "td_ta_event_addr");
715 info->td_ta_set_event_p = dlsym (info->handle, "td_ta_set_event");
21e1bee4 716 info->td_ta_clear_event_p = dlsym (info->handle, "td_ta_clear_event");
d90e17a7
PA
717 info->td_ta_event_getmsg_p = dlsym (info->handle, "td_ta_event_getmsg");
718 info->td_thr_event_enable_p = dlsym (info->handle, "td_thr_event_enable");
719 info->td_thr_tls_get_addr_p = dlsym (info->handle, "td_thr_tls_get_addr");
17a37d48
PP
720
721 printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
722
02d868e8 723 if (libthread_db_debug || *libthread_db_search_path)
d90e17a7
PA
724 {
725 const char *library;
17a37d48 726
d90e17a7
PA
727 library = dladdr_to_soname (*info->td_ta_new_p);
728 if (library == NULL)
729 library = LIBTHREAD_DB_SO;
17a37d48 730
d90e17a7
PA
731 printf_unfiltered (_("Using host libthread_db library \"%s\".\n"),
732 library);
733 }
17a37d48 734
d90e17a7
PA
735 /* The thread library was detected. Activate the thread_db target
736 if this is the first process using it. */
737 if (thread_db_list->next == NULL)
738 push_target (&thread_db_ops);
17a37d48 739
d90e17a7 740 enable_thread_event_reporting ();
456b0e24 741
099cb4fb 742 /* There appears to be a bug in glibc-2.3.6: calls to td_thr_get_info fail
456b0e24
PP
743 with TD_ERR for statically linked executables if td_thr_get_info is
744 called before glibc has initialized itself. Silently ignore such
099cb4fb 745 errors, and let gdb enumerate threads again later. */
456b0e24 746 thread_db_find_new_threads_silently (inferior_ptid);
099cb4fb 747
d90e17a7 748 return 1;
17a37d48
PP
749}
750
751/* Attempt to use LIBRARY as libthread_db. LIBRARY could be absolute,
752 relative, or just LIBTHREAD_DB. */
753
754static int
755try_thread_db_load (const char *library)
756{
757 void *handle;
d90e17a7 758 struct thread_db_info *info;
17a37d48 759
02d868e8 760 if (libthread_db_debug)
17a37d48
PP
761 printf_unfiltered (_("Trying host libthread_db library: %s.\n"),
762 library);
763 handle = dlopen (library, RTLD_NOW);
764 if (handle == NULL)
765 {
02d868e8 766 if (libthread_db_debug)
17a37d48
PP
767 printf_unfiltered (_("dlopen failed: %s.\n"), dlerror ());
768 return 0;
769 }
770
02d868e8 771 if (libthread_db_debug && strchr (library, '/') == NULL)
17a37d48
PP
772 {
773 void *td_init;
774
775 td_init = dlsym (handle, "td_init");
776 if (td_init != NULL)
777 {
778 const char *const libpath = dladdr_to_soname (td_init);
779
780 if (libpath != NULL)
781 printf_unfiltered (_("Host %s resolved to: %s.\n"),
782 library, libpath);
783 }
784 }
785
d90e17a7
PA
786 info = add_thread_db_info (handle);
787
788 if (try_thread_db_load_1 (info))
17a37d48
PP
789 return 1;
790
791 /* This library "refused" to work on current inferior. */
d90e17a7 792 delete_thread_db_info (GET_PID (inferior_ptid));
17a37d48
PP
793 return 0;
794}
795
796
797/* Search libthread_db_search_path for libthread_db which "agrees"
798 to work on current inferior. */
799
800static int
801thread_db_load_search (void)
802{
803 char path[PATH_MAX];
804 const char *search_path = libthread_db_search_path;
805 int rc = 0;
806
807 while (*search_path)
808 {
809 const char *end = strchr (search_path, ':');
e0881a8e 810
17a37d48
PP
811 if (end)
812 {
813 size_t len = end - search_path;
e0881a8e 814
17a37d48
PP
815 if (len + 1 + strlen (LIBTHREAD_DB_SO) + 1 > sizeof (path))
816 {
817 char *cp = xmalloc (len + 1);
e0881a8e 818
17a37d48
PP
819 memcpy (cp, search_path, len);
820 cp[len] = '\0';
821 warning (_("libthread_db_search_path component too long,"
822 " ignored: %s."), cp);
823 xfree (cp);
824 search_path += len + 1;
825 continue;
826 }
827 memcpy (path, search_path, len);
828 path[len] = '\0';
829 search_path += len + 1;
830 }
831 else
832 {
833 size_t len = strlen (search_path);
834
835 if (len + 1 + strlen (LIBTHREAD_DB_SO) + 1 > sizeof (path))
836 {
837 warning (_("libthread_db_search_path component too long,"
838 " ignored: %s."), search_path);
839 break;
840 }
841 memcpy (path, search_path, len + 1);
842 search_path += len;
843 }
844 strcat (path, "/");
845 strcat (path, LIBTHREAD_DB_SO);
846 if (try_thread_db_load (path))
847 {
848 rc = 1;
849 break;
850 }
851 }
852 if (rc == 0)
853 rc = try_thread_db_load (LIBTHREAD_DB_SO);
854 return rc;
855}
856
857/* Attempt to load and initialize libthread_db.
858 Return 1 on success.
859 */
860
861static int
862thread_db_load (void)
863{
864 struct objfile *obj;
d90e17a7 865 struct thread_db_info *info;
17a37d48 866
d90e17a7
PA
867 info = get_thread_db_info (GET_PID (inferior_ptid));
868
869 if (info != NULL)
17a37d48
PP
870 return 1;
871
872 /* Don't attempt to use thread_db on targets which can not run
873 (executables not running yet, core files) for now. */
874 if (!target_has_execution)
875 return 0;
876
877 /* Don't attempt to use thread_db for remote targets. */
878 if (!target_can_run (&current_target))
879 return 0;
880
881 if (thread_db_load_search ())
882 return 1;
883
884 /* None of the libthread_db's on our search path, not the system default
885 ones worked. If the executable is dynamically linked against
886 libpthread, try loading libthread_db from the same directory. */
887
888 ALL_OBJFILES (obj)
889 if (libpthread_name_p (obj->name))
890 {
891 char path[PATH_MAX], *cp;
892
893 gdb_assert (strlen (obj->name) < sizeof (path));
894 strcpy (path, obj->name);
895 cp = strrchr (path, '/');
896
897 if (cp == NULL)
898 {
899 warning (_("Expected absolute pathname for libpthread in the"
900 " inferior, but got %s."), path);
901 }
902 else if (cp + 1 + strlen (LIBTHREAD_DB_SO) + 1 > path + sizeof (path))
903 {
904 warning (_("Unexpected: path to libpthread in the inferior is"
905 " too long: %s"), path);
906 }
907 else
908 {
909 strcpy (cp + 1, LIBTHREAD_DB_SO);
910 if (try_thread_db_load (path))
911 return 1;
912 }
913 warning (_("Unable to find libthread_db matching inferior's thread"
914 " library, thread debugging will not be available."));
915 return 0;
916 }
917 /* Either this executable isn't using libpthread at all, or it is
918 statically linked. Since we can't easily distinguish these two cases,
919 no warning is issued. */
920 return 0;
921}
922
fb0e1ba7 923static void
12b6a110 924disable_thread_event_reporting (struct thread_db_info *info)
fb0e1ba7 925{
21e1bee4 926 if (info->td_ta_clear_event_p != NULL)
12b6a110
PP
927 {
928 td_thr_events_t events;
fb0e1ba7 929
12b6a110
PP
930 /* Set the process wide mask saying we aren't interested in any
931 events anymore. */
21e1bee4
PP
932 td_event_fillset (&events);
933 info->td_ta_clear_event_p (info->thread_agent, &events);
12b6a110 934 }
fb0e1ba7 935
d90e17a7
PA
936 info->td_create_bp_addr = 0;
937 info->td_death_bp_addr = 0;
fb0e1ba7
MK
938}
939
940static void
941check_thread_signals (void)
942{
21bf60fe 943 if (!thread_signals)
fb0e1ba7
MK
944 {
945 sigset_t mask;
946 int i;
947
669211f5 948 lin_thread_get_thread_signals (&mask);
fb0e1ba7
MK
949 sigemptyset (&thread_stop_set);
950 sigemptyset (&thread_print_set);
951
b9569773 952 for (i = 1; i < NSIG; i++)
fb0e1ba7
MK
953 {
954 if (sigismember (&mask, i))
955 {
956 if (signal_stop_update (target_signal_from_host (i), 0))
957 sigaddset (&thread_stop_set, i);
958 if (signal_print_update (target_signal_from_host (i), 0))
959 sigaddset (&thread_print_set, i);
960 thread_signals = 1;
961 }
962 }
963 }
fb0e1ba7
MK
964}
965
0ec9a092
DJ
966/* Check whether thread_db is usable. This function is called when
967 an inferior is created (or otherwise acquired, e.g. attached to)
968 and when new shared libraries are loaded into a running process. */
969
970void
971check_for_thread_db (void)
fb0e1ba7 972{
b5057acd 973 /* Do nothing if we couldn't load libthread_db.so.1. */
17a37d48 974 if (!thread_db_load ())
b5057acd 975 return;
0ec9a092
DJ
976}
977
978static void
979thread_db_new_objfile (struct objfile *objfile)
980{
d90e17a7
PA
981 /* This observer must always be called with inferior_ptid set
982 correctly. */
983
0ec9a092
DJ
984 if (objfile != NULL)
985 check_for_thread_db ();
fb0e1ba7
MK
986}
987
a2f23071
DJ
988/* Attach to a new thread. This function is called when we receive a
989 TD_CREATE event or when we iterate over all threads and find one
02c6c942 990 that wasn't already in our list. Returns true on success. */
a2f23071 991
02c6c942 992static int
39f77062 993attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
93815fbf 994 const td_thrinfo_t *ti_p)
fb0e1ba7 995{
17faa917
DJ
996 struct private_thread_info *private;
997 struct thread_info *tp = NULL;
fb0e1ba7 998 td_err_e err;
d90e17a7 999 struct thread_db_info *info;
fb0e1ba7 1000
a2f23071
DJ
1001 /* If we're being called after a TD_CREATE event, we may already
1002 know about this thread. There are two ways this can happen. We
1003 may have iterated over all threads between the thread creation
1004 and the TD_CREATE event, for instance when the user has issued
1005 the `info threads' command before the SIGTRAP for hitting the
1006 thread creation breakpoint was reported. Alternatively, the
1007 thread may have exited and a new one been created with the same
1008 thread ID. In the first case we don't need to do anything; in
1009 the second case we should discard information about the dead
1010 thread and attach to the new one. */
1011 if (in_thread_list (ptid))
1012 {
e09875d4 1013 tp = find_thread_ptid (ptid);
a2f23071
DJ
1014 gdb_assert (tp != NULL);
1015
17faa917
DJ
1016 /* If tp->private is NULL, then GDB is already attached to this
1017 thread, but we do not know anything about it. We can learn
1018 about it here. This can only happen if we have some other
1019 way besides libthread_db to notice new threads (i.e.
1020 PTRACE_EVENT_CLONE); assume the same mechanism notices thread
1021 exit, so this can not be a stale thread recreated with the
1022 same ID. */
1023 if (tp->private != NULL)
1024 {
1025 if (!tp->private->dying)
02c6c942 1026 return 0;
a2f23071 1027
17faa917
DJ
1028 delete_thread (ptid);
1029 tp = NULL;
1030 }
a2f23071
DJ
1031 }
1032
fb0e1ba7
MK
1033 check_thread_signals ();
1034
9ee57c33 1035 if (ti_p->ti_state == TD_THR_UNKNOWN || ti_p->ti_state == TD_THR_ZOMBIE)
02c6c942 1036 return 0; /* A zombie thread -- do not attach. */
9ee57c33
DJ
1037
1038 /* Under GNU/Linux, we have to attach to each and every thread. */
17faa917
DJ
1039 if (tp == NULL
1040 && lin_lwp_attach_lwp (BUILD_LWP (ti_p->ti_lid, GET_PID (ptid))) < 0)
02c6c942 1041 return 0;
9ee57c33 1042
17faa917
DJ
1043 /* Construct the thread's private data. */
1044 private = xmalloc (sizeof (struct private_thread_info));
1045 memset (private, 0, sizeof (struct private_thread_info));
1046
1047 /* A thread ID of zero may mean the thread library has not initialized
1048 yet. But we shouldn't even get here if that's the case. FIXME:
1049 if we change GDB to always have at least one thread in the thread
1050 list this will have to go somewhere else; maybe private == NULL
1051 until the thread_db target claims it. */
1052 gdb_assert (ti_p->ti_tid != 0);
1053 private->th = *th_p;
1054 private->tid = ti_p->ti_tid;
1055
fb0e1ba7 1056 /* Add the thread to GDB's thread list. */
17faa917
DJ
1057 if (tp == NULL)
1058 tp = add_thread_with_info (ptid, private);
1059 else
1060 tp->private = private;
5365276c 1061
d90e17a7
PA
1062 info = get_thread_db_info (GET_PID (ptid));
1063
fb0e1ba7 1064 /* Enable thread event reporting for this thread. */
d90e17a7 1065 err = info->td_thr_event_enable_p (th_p, 1);
fb0e1ba7 1066 if (err != TD_OK)
8a3fe4f8 1067 error (_("Cannot enable thread event reporting for %s: %s"),
39f77062 1068 target_pid_to_str (ptid), thread_db_err_str (err));
02c6c942 1069 return 1;
fb0e1ba7
MK
1070}
1071
1072static void
17faa917 1073detach_thread (ptid_t ptid)
fb0e1ba7 1074{
a2f23071
DJ
1075 struct thread_info *thread_info;
1076
a2f23071
DJ
1077 /* Don't delete the thread now, because it still reports as active
1078 until it has executed a few instructions after the event
1079 breakpoint - if we deleted it now, "info threads" would cause us
1080 to re-attach to it. Just mark it as having had a TD_DEATH
1081 event. This means that we won't delete it from our thread list
1082 until we notice that it's dead (via prune_threads), or until
17faa917
DJ
1083 something re-uses its thread ID. We'll report the thread exit
1084 when the underlying LWP dies. */
e09875d4 1085 thread_info = find_thread_ptid (ptid);
17faa917 1086 gdb_assert (thread_info != NULL && thread_info->private != NULL);
a2f23071 1087 thread_info->private->dying = 1;
fb0e1ba7
MK
1088}
1089
1090static void
136d6dae 1091thread_db_detach (struct target_ops *ops, char *args, int from_tty)
fb0e1ba7 1092{
117de6a9 1093 struct target_ops *target_beneath = find_target_beneath (ops);
d90e17a7 1094 struct thread_db_info *info;
117de6a9 1095
d90e17a7 1096 info = get_thread_db_info (GET_PID (inferior_ptid));
c194fbe1 1097
d90e17a7
PA
1098 if (info)
1099 {
12b6a110 1100 disable_thread_event_reporting (info);
7a7d3353 1101
d90e17a7
PA
1102 /* Delete the old thread event breakpoints. Note that unlike
1103 when mourning, we can remove them here because there's still
1104 a live inferior to poke at. In any case, GDB will not try to
1105 insert anything in the inferior when removing a
1106 breakpoint. */
1107 remove_thread_event_breakpoints ();
1108
1109 delete_thread_db_info (GET_PID (inferior_ptid));
1110 }
4105de34 1111
7a7d3353 1112 target_beneath->to_detach (target_beneath, args, from_tty);
d90e17a7
PA
1113
1114 /* NOTE: From this point on, inferior_ptid is null_ptid. */
1115
1116 /* If there are no more processes using libpthread, detach the
1117 thread_db target ops. */
1118 if (!thread_db_list)
1119 unpush_target (&thread_db_ops);
fb0e1ba7
MK
1120}
1121
fb0e1ba7
MK
1122/* Check if PID is currently stopped at the location of a thread event
1123 breakpoint location. If it is, read the event message and act upon
1124 the event. */
1125
1126static void
39f77062 1127check_event (ptid_t ptid)
fb0e1ba7 1128{
515630c5
UW
1129 struct regcache *regcache = get_thread_regcache (ptid);
1130 struct gdbarch *gdbarch = get_regcache_arch (regcache);
fb0e1ba7
MK
1131 td_event_msg_t msg;
1132 td_thrinfo_t ti;
1133 td_err_e err;
1134 CORE_ADDR stop_pc;
4d9850d3 1135 int loop = 0;
d90e17a7
PA
1136 struct thread_db_info *info;
1137
1138 info = get_thread_db_info (GET_PID (ptid));
fb0e1ba7
MK
1139
1140 /* Bail out early if we're not at a thread event breakpoint. */
515630c5
UW
1141 stop_pc = regcache_read_pc (regcache)
1142 - gdbarch_decr_pc_after_break (gdbarch);
d90e17a7
PA
1143 if (stop_pc != info->td_create_bp_addr
1144 && stop_pc != info->td_death_bp_addr)
fb0e1ba7
MK
1145 return;
1146
4c28f408 1147 /* Access an lwp we know is stopped. */
d90e17a7 1148 info->proc_handle.ptid = ptid;
4c28f408
PA
1149
1150 /* If we have only looked at the first thread before libpthread was
1151 initialized, we may not know its thread ID yet. Make sure we do
1152 before we add another thread to the list. */
d90e17a7
PA
1153 if (!have_threads (ptid))
1154 thread_db_find_new_threads_1 (ptid);
4c28f408 1155
4d9850d3
JJ
1156 /* If we are at a create breakpoint, we do not know what new lwp
1157 was created and cannot specifically locate the event message for it.
1158 We have to call td_ta_event_getmsg() to get
1159 the latest message. Since we have no way of correlating whether
cdbc0b18 1160 the event message we get back corresponds to our breakpoint, we must
4d9850d3 1161 loop and read all event messages, processing them appropriately.
cdbc0b18
RM
1162 This guarantees we will process the correct message before continuing
1163 from the breakpoint.
4d9850d3
JJ
1164
1165 Currently, death events are not enabled. If they are enabled,
1166 the death event can use the td_thr_event_getmsg() interface to
1167 get the message specifically for that lwp and avoid looping
1168 below. */
1169
1170 loop = 1;
1171
1172 do
fb0e1ba7 1173 {
d90e17a7 1174 err = info->td_ta_event_getmsg_p (info->thread_agent, &msg);
4d9850d3
JJ
1175 if (err != TD_OK)
1176 {
1177 if (err == TD_NOMSG)
1178 return;
fb0e1ba7 1179
8a3fe4f8 1180 error (_("Cannot get thread event message: %s"),
4d9850d3
JJ
1181 thread_db_err_str (err));
1182 }
fb0e1ba7 1183
d90e17a7 1184 err = info->td_thr_get_info_p (msg.th_p, &ti);
4d9850d3 1185 if (err != TD_OK)
8a3fe4f8 1186 error (_("Cannot get thread info: %s"), thread_db_err_str (err));
fb0e1ba7 1187
17faa917 1188 ptid = ptid_build (GET_PID (ptid), ti.ti_lid, 0);
fb0e1ba7 1189
4d9850d3
JJ
1190 switch (msg.event)
1191 {
1192 case TD_CREATE:
a2f23071
DJ
1193 /* Call attach_thread whether or not we already know about a
1194 thread with this thread ID. */
93815fbf 1195 attach_thread (ptid, msg.th_p, &ti);
fb0e1ba7 1196
4d9850d3 1197 break;
fb0e1ba7 1198
4d9850d3 1199 case TD_DEATH:
fb0e1ba7 1200
4d9850d3 1201 if (!in_thread_list (ptid))
8a3fe4f8 1202 error (_("Spurious thread death event."));
fb0e1ba7 1203
17faa917 1204 detach_thread (ptid);
fb0e1ba7 1205
4d9850d3 1206 break;
fb0e1ba7 1207
4d9850d3 1208 default:
8a3fe4f8 1209 error (_("Spurious thread event."));
4d9850d3 1210 }
fb0e1ba7 1211 }
4d9850d3 1212 while (loop);
fb0e1ba7
MK
1213}
1214
39f77062 1215static ptid_t
117de6a9 1216thread_db_wait (struct target_ops *ops,
47608cb1
PA
1217 ptid_t ptid, struct target_waitstatus *ourstatus,
1218 int options)
fb0e1ba7 1219{
d90e17a7 1220 struct thread_db_info *info;
117de6a9
PA
1221 struct target_ops *beneath = find_target_beneath (ops);
1222
47608cb1 1223 ptid = beneath->to_wait (beneath, ptid, ourstatus, options);
fb0e1ba7 1224
b84876c2
PA
1225 if (ourstatus->kind == TARGET_WAITKIND_IGNORE)
1226 return ptid;
1227
1111f4aa 1228 if (ourstatus->kind == TARGET_WAITKIND_EXITED
fb66883a
PA
1229 || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
1230 return ptid;
fb0e1ba7 1231
d90e17a7
PA
1232 info = get_thread_db_info (GET_PID (ptid));
1233
1234 /* If this process isn't using thread_db, we're done. */
1235 if (info == NULL)
1236 return ptid;
1237
3f64f7b1
DJ
1238 if (ourstatus->kind == TARGET_WAITKIND_EXECD)
1239 {
d90e17a7
PA
1240 /* New image, it may or may not end up using thread_db. Assume
1241 not unless we find otherwise. */
1242 delete_thread_db_info (GET_PID (ptid));
1243 if (!thread_db_list)
1244 unpush_target (&thread_db_ops);
3f64f7b1 1245
6c95b8df
PA
1246 /* Thread event breakpoints are deleted by
1247 update_breakpoints_after_exec. */
1248
49fd4a42 1249 return ptid;
3f64f7b1
DJ
1250 }
1251
4105de34
DJ
1252 /* If we do not know about the main thread yet, this would be a good time to
1253 find it. */
d90e17a7
PA
1254 if (ourstatus->kind == TARGET_WAITKIND_STOPPED && !have_threads (ptid))
1255 thread_db_find_new_threads_1 (ptid);
4105de34 1256
fb0e1ba7
MK
1257 if (ourstatus->kind == TARGET_WAITKIND_STOPPED
1258 && ourstatus->value.sig == TARGET_SIGNAL_TRAP)
1259 /* Check for a thread event. */
39f77062 1260 check_event (ptid);
fb0e1ba7 1261
d90e17a7 1262 if (have_threads (ptid))
4105de34
DJ
1263 {
1264 /* Change ptids back into the higher level PID + TID format. If
1265 the thread is dead and no longer on the thread list, we will
1266 get back a dead ptid. This can occur if the thread death
1267 event gets postponed by other simultaneous events. In such a
1268 case, we want to just ignore the event and continue on. */
1269
4105de34
DJ
1270 ptid = thread_from_lwp (ptid);
1271 if (GET_PID (ptid) == -1)
1272 ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
1273 }
fb0e1ba7 1274
b9b5d7ea 1275 return ptid;
fb0e1ba7
MK
1276}
1277
fb0e1ba7 1278static void
136d6dae 1279thread_db_mourn_inferior (struct target_ops *ops)
fb0e1ba7 1280{
117de6a9
PA
1281 struct target_ops *target_beneath = find_target_beneath (ops);
1282
d90e17a7 1283 delete_thread_db_info (GET_PID (inferior_ptid));
fb0e1ba7 1284
d90e17a7
PA
1285 target_beneath->to_mourn_inferior (target_beneath);
1286
6c95b8df
PA
1287 /* Delete the old thread event breakpoints. Do this after mourning
1288 the inferior, so that we don't try to uninsert them. */
1289 remove_thread_event_breakpoints ();
1290
b26a6851 1291 /* Detach thread_db target ops. */
d90e17a7
PA
1292 if (!thread_db_list)
1293 unpush_target (ops);
fb0e1ba7
MK
1294}
1295
02c6c942
PP
1296struct callback_data
1297{
1298 struct thread_db_info *info;
1299 int new_threads;
1300};
1301
fb0e1ba7
MK
1302static int
1303find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
1304{
1305 td_thrinfo_t ti;
1306 td_err_e err;
39f77062 1307 ptid_t ptid;
403fe197 1308 struct thread_info *tp;
02c6c942
PP
1309 struct callback_data *cb_data = data;
1310 struct thread_db_info *info = cb_data->info;
fb0e1ba7 1311
d90e17a7 1312 err = info->td_thr_get_info_p (th_p, &ti);
fb0e1ba7 1313 if (err != TD_OK)
8a3fe4f8 1314 error (_("find_new_threads_callback: cannot get thread info: %s"),
3197744f 1315 thread_db_err_str (err));
fb0e1ba7 1316
21bf60fe
MK
1317 if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
1318 return 0; /* A zombie -- ignore. */
5fd913cc 1319
4105de34
DJ
1320 if (ti.ti_tid == 0)
1321 {
1322 /* A thread ID of zero means that this is the main thread, but
1323 glibc has not yet initialized thread-local storage and the
1324 pthread library. We do not know what the thread's TID will
1325 be yet. Just enable event reporting and otherwise ignore
1326 it. */
1327
4d062f1a
PA
1328 /* In that case, we're not stopped in a fork syscall and don't
1329 need this glibc bug workaround. */
1330 info->need_stale_parent_threads_check = 0;
1331
d90e17a7 1332 err = info->td_thr_event_enable_p (th_p, 1);
4105de34 1333 if (err != TD_OK)
4d062f1a
PA
1334 error (_("Cannot enable thread event reporting for LWP %d: %s"),
1335 (int) ti.ti_lid, thread_db_err_str (err));
4105de34
DJ
1336
1337 return 0;
1338 }
1339
4d062f1a
PA
1340 /* Ignore stale parent threads, caused by glibc/BZ5983. This is a
1341 bit expensive, as it needs to open /proc/pid/status, so try to
1342 avoid doing the work if we know we don't have to. */
1343 if (info->need_stale_parent_threads_check)
1344 {
1345 int tgid = linux_proc_get_tgid (ti.ti_lid);
e0881a8e 1346
4d062f1a
PA
1347 if (tgid != -1 && tgid != info->pid)
1348 return 0;
1349 }
1350
1351 ptid = ptid_build (info->pid, ti.ti_lid, 0);
e09875d4 1352 tp = find_thread_ptid (ptid);
403fe197 1353 if (tp == NULL || tp->private == NULL)
02c6c942
PP
1354 {
1355 if (attach_thread (ptid, th_p, &ti))
1356 cb_data->new_threads += 1;
1357 else
1358 /* Problem attaching this thread; perhaps it exited before we
1359 could attach it?
1360 This could mean that the thread list inside glibc itself is in
1361 inconsistent state, and libthread_db could go on looping forever
1362 (observed with glibc-2.3.6). To prevent that, terminate
1363 iteration: thread_db_find_new_threads_2 will retry. */
1364 return 1;
1365 }
fb0e1ba7
MK
1366
1367 return 0;
1368}
1369
02c6c942
PP
1370/* Helper for thread_db_find_new_threads_2.
1371 Returns number of new threads found. */
1372
1373static int
1374find_new_threads_once (struct thread_db_info *info, int iteration,
fb169834 1375 td_err_e *errp)
02c6c942
PP
1376{
1377 volatile struct gdb_exception except;
1378 struct callback_data data;
fb169834 1379 td_err_e err = TD_ERR;
02c6c942
PP
1380
1381 data.info = info;
1382 data.new_threads = 0;
1383
1384 TRY_CATCH (except, RETURN_MASK_ERROR)
1385 {
1386 /* Iterate over all user-space threads to discover new threads. */
1387 err = info->td_ta_thr_iter_p (info->thread_agent,
1388 find_new_threads_callback,
1389 &data,
1390 TD_THR_ANY_STATE,
1391 TD_THR_LOWEST_PRIORITY,
1392 TD_SIGNO_MASK,
1393 TD_THR_ANY_USER_FLAGS);
1394 }
1395
02d868e8 1396 if (libthread_db_debug)
02c6c942
PP
1397 {
1398 if (except.reason < 0)
1399 exception_fprintf (gdb_stderr, except,
1400 "Warning: find_new_threads_once: ");
1401
1402 printf_filtered (_("Found %d new threads in iteration %d.\n"),
1403 data.new_threads, iteration);
1404 }
1405
1406 if (errp != NULL)
1407 *errp = err;
1408
1409 return data.new_threads;
1410}
1411
4c28f408 1412/* Search for new threads, accessing memory through stopped thread
02c6c942
PP
1413 PTID. If UNTIL_NO_NEW is true, repeat searching until several
1414 searches in a row do not discover any new threads. */
4c28f408 1415
fb0e1ba7 1416static void
02c6c942 1417thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
fb0e1ba7
MK
1418{
1419 td_err_e err;
4c28f408 1420 struct lwp_info *lp;
d90e17a7
PA
1421 struct thread_db_info *info;
1422 int pid = ptid_get_pid (ptid);
02c6c942 1423 int i, loop;
4c28f408
PA
1424
1425 /* In linux, we can only read memory through a stopped lwp. */
1426 ALL_LWPS (lp, ptid)
d90e17a7 1427 if (lp->stopped && ptid_get_pid (lp->ptid) == pid)
4c28f408
PA
1428 break;
1429
1430 if (!lp)
1431 /* There is no stopped thread. Bail out. */
1432 return;
fb0e1ba7 1433
d90e17a7
PA
1434 info = get_thread_db_info (GET_PID (ptid));
1435
4c28f408 1436 /* Access an lwp we know is stopped. */
d90e17a7 1437 info->proc_handle.ptid = ptid;
02c6c942
PP
1438
1439 if (until_no_new)
1440 {
1441 /* Require 4 successive iterations which do not find any new threads.
1442 The 4 is a heuristic: there is an inherent race here, and I have
1443 seen that 2 iterations in a row are not always sufficient to
1444 "capture" all threads. */
1445 for (i = 0, loop = 0; loop < 4; ++i, ++loop)
1446 if (find_new_threads_once (info, i, NULL) != 0)
1447 /* Found some new threads. Restart the loop from beginning. */
1448 loop = -1;
1449 }
1450 else
1451 {
02c6c942
PP
1452 find_new_threads_once (info, 0, &err);
1453 if (err != TD_OK)
1454 error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1455 }
fb0e1ba7
MK
1456}
1457
02c6c942
PP
1458static void
1459thread_db_find_new_threads_1 (ptid_t ptid)
1460{
1461 thread_db_find_new_threads_2 (ptid, 0);
1462}
1463
dc146f7c
VP
1464static int
1465update_thread_core (struct lwp_info *info, void *closure)
1466{
1467 info->core = linux_nat_core_of_thread_1 (info->ptid);
1468 return 0;
1469}
02c6c942 1470
28439f5e
PA
1471static void
1472thread_db_find_new_threads (struct target_ops *ops)
1473{
d90e17a7
PA
1474 struct thread_db_info *info;
1475
1476 info = get_thread_db_info (GET_PID (inferior_ptid));
1477
1478 if (info == NULL)
1479 return;
1480
1481 thread_db_find_new_threads_1 (inferior_ptid);
dc146f7c
VP
1482
1483 iterate_over_lwps (minus_one_ptid /* iterate over all */,
1484 update_thread_core, NULL);
28439f5e
PA
1485}
1486
fb0e1ba7 1487static char *
117de6a9 1488thread_db_pid_to_str (struct target_ops *ops, ptid_t ptid)
fb0e1ba7 1489{
e09875d4 1490 struct thread_info *thread_info = find_thread_ptid (ptid);
117de6a9 1491 struct target_ops *beneath;
17faa917
DJ
1492
1493 if (thread_info != NULL && thread_info->private != NULL)
fb0e1ba7
MK
1494 {
1495 static char buf[64];
17faa917 1496 thread_t tid;
fb0e1ba7 1497
17faa917 1498 tid = thread_info->private->tid;
17faa917
DJ
1499 snprintf (buf, sizeof (buf), "Thread 0x%lx (LWP %ld)",
1500 tid, GET_LWP (ptid));
fb0e1ba7
MK
1501
1502 return buf;
1503 }
1504
117de6a9
PA
1505 beneath = find_target_beneath (ops);
1506 if (beneath->to_pid_to_str (beneath, ptid))
1507 return beneath->to_pid_to_str (beneath, ptid);
fb0e1ba7 1508
39f77062 1509 return normal_pid_to_str (ptid);
fb0e1ba7
MK
1510}
1511
28b17333
DJ
1512/* Return a string describing the state of the thread specified by
1513 INFO. */
1514
1515static char *
1516thread_db_extra_thread_info (struct thread_info *info)
1517{
17faa917
DJ
1518 if (info->private == NULL)
1519 return NULL;
1520
28b17333
DJ
1521 if (info->private->dying)
1522 return "Exiting";
1523
1524 return NULL;
1525}
1526
b2756930
KB
1527/* Get the address of the thread local variable in load module LM which
1528 is stored at OFFSET within the thread local storage for thread PTID. */
3f47be5c
EZ
1529
1530static CORE_ADDR
117de6a9
PA
1531thread_db_get_thread_local_address (struct target_ops *ops,
1532 ptid_t ptid,
b2756930 1533 CORE_ADDR lm,
b4acd559 1534 CORE_ADDR offset)
3f47be5c 1535{
17faa917 1536 struct thread_info *thread_info;
117de6a9 1537 struct target_ops *beneath;
17faa917 1538
4105de34 1539 /* If we have not discovered any threads yet, check now. */
d90e17a7
PA
1540 if (!have_threads (ptid))
1541 thread_db_find_new_threads_1 (ptid);
4105de34 1542
17faa917 1543 /* Find the matching thread. */
e09875d4 1544 thread_info = find_thread_ptid (ptid);
4105de34 1545
17faa917 1546 if (thread_info != NULL && thread_info->private != NULL)
3f47be5c 1547 {
3f47be5c 1548 td_err_e err;
00f515da 1549 psaddr_t address;
d90e17a7
PA
1550 struct thread_db_info *info;
1551
1552 info = get_thread_db_info (GET_PID (ptid));
3f47be5c
EZ
1553
1554 /* glibc doesn't provide the needed interface. */
d90e17a7 1555 if (!info->td_thr_tls_get_addr_p)
109c3e39
AC
1556 throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR,
1557 _("No TLS library support"));
3f47be5c 1558
b2756930
KB
1559 /* Caller should have verified that lm != 0. */
1560 gdb_assert (lm != 0);
3f47be5c 1561
3f47be5c 1562 /* Finally, get the address of the variable. */
00f515da
DE
1563 /* Note the cast through uintptr_t: this interface only works if
1564 a target address fits in a psaddr_t, which is a host pointer.
1565 So a 32-bit debugger can not access 64-bit TLS through this. */
d90e17a7 1566 err = info->td_thr_tls_get_addr_p (&thread_info->private->th,
00f515da 1567 (psaddr_t)(uintptr_t) lm,
d90e17a7 1568 offset, &address);
3f47be5c
EZ
1569
1570#ifdef THREAD_DB_HAS_TD_NOTALLOC
1571 /* The memory hasn't been allocated, yet. */
1572 if (err == TD_NOTALLOC)
b4acd559
JJ
1573 /* Now, if libthread_db provided the initialization image's
1574 address, we *could* try to build a non-lvalue value from
1575 the initialization image. */
109c3e39
AC
1576 throw_error (TLS_NOT_ALLOCATED_YET_ERROR,
1577 _("TLS not allocated yet"));
3f47be5c
EZ
1578#endif
1579
1580 /* Something else went wrong. */
1581 if (err != TD_OK)
109c3e39
AC
1582 throw_error (TLS_GENERIC_ERROR,
1583 (("%s")), thread_db_err_str (err));
3f47be5c
EZ
1584
1585 /* Cast assuming host == target. Joy. */
16451949
AS
1586 /* Do proper sign extension for the target. */
1587 gdb_assert (exec_bfd);
1588 return (bfd_get_sign_extend_vma (exec_bfd) > 0
1589 ? (CORE_ADDR) (intptr_t) address
1590 : (CORE_ADDR) (uintptr_t) address);
3f47be5c
EZ
1591 }
1592
117de6a9
PA
1593 beneath = find_target_beneath (ops);
1594 if (beneath->to_get_thread_local_address)
1595 return beneath->to_get_thread_local_address (beneath, ptid, lm, offset);
93ad78a7 1596 else
109c3e39
AC
1597 throw_error (TLS_GENERIC_ERROR,
1598 _("TLS not supported on this target"));
3f47be5c
EZ
1599}
1600
0ef643c8
JB
1601/* Callback routine used to find a thread based on the TID part of
1602 its PTID. */
1603
1604static int
1605thread_db_find_thread_from_tid (struct thread_info *thread, void *data)
1606{
1607 long *tid = (long *) data;
1608
1609 if (thread->private->tid == *tid)
1610 return 1;
1611
1612 return 0;
1613}
1614
1615/* Implement the to_get_ada_task_ptid target method for this target. */
1616
1617static ptid_t
1618thread_db_get_ada_task_ptid (long lwp, long thread)
1619{
1620 struct thread_info *thread_info;
1621
d90e17a7 1622 thread_db_find_new_threads_1 (inferior_ptid);
0ef643c8
JB
1623 thread_info = iterate_over_threads (thread_db_find_thread_from_tid, &thread);
1624
1625 gdb_assert (thread_info != NULL);
1626
1627 return (thread_info->ptid);
1628}
1629
4d062f1a
PA
1630static void
1631thread_db_resume (struct target_ops *ops,
1632 ptid_t ptid, int step, enum target_signal signo)
1633{
1634 struct target_ops *beneath = find_target_beneath (ops);
1635 struct thread_db_info *info;
1636
1637 if (ptid_equal (ptid, minus_one_ptid))
1638 info = get_thread_db_info (GET_PID (inferior_ptid));
1639 else
1640 info = get_thread_db_info (GET_PID (ptid));
1641
1642 /* This workaround is only needed for child fork lwps stopped in a
1643 PTRACE_O_TRACEFORK event. When the inferior is resumed, the
1644 workaround can be disabled. */
1645 if (info)
1646 info->need_stale_parent_threads_check = 0;
1647
1648 beneath->to_resume (beneath, ptid, step, signo);
1649}
1650
fb0e1ba7
MK
1651static void
1652init_thread_db_ops (void)
1653{
1654 thread_db_ops.to_shortname = "multi-thread";
1655 thread_db_ops.to_longname = "multi-threaded child process.";
1656 thread_db_ops.to_doc = "Threads and pthreads support.";
1657 thread_db_ops.to_detach = thread_db_detach;
fb0e1ba7 1658 thread_db_ops.to_wait = thread_db_wait;
4d062f1a 1659 thread_db_ops.to_resume = thread_db_resume;
fb0e1ba7 1660 thread_db_ops.to_mourn_inferior = thread_db_mourn_inferior;
fb0e1ba7
MK
1661 thread_db_ops.to_find_new_threads = thread_db_find_new_threads;
1662 thread_db_ops.to_pid_to_str = thread_db_pid_to_str;
1663 thread_db_ops.to_stratum = thread_stratum;
1664 thread_db_ops.to_has_thread_control = tc_schedlock;
3f47be5c
EZ
1665 thread_db_ops.to_get_thread_local_address
1666 = thread_db_get_thread_local_address;
28b17333 1667 thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
0ef643c8 1668 thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
fb0e1ba7
MK
1669 thread_db_ops.to_magic = OPS_MAGIC;
1670}
1671
2c0b251b
PA
1672/* Provide a prototype to silence -Wmissing-prototypes. */
1673extern initialize_file_ftype _initialize_thread_db;
1674
fb0e1ba7
MK
1675void
1676_initialize_thread_db (void)
1677{
17a37d48
PP
1678 init_thread_db_ops ();
1679 add_target (&thread_db_ops);
1680
1681 /* Defer loading of libthread_db.so until inferior is running.
1682 This allows gdb to load correct libthread_db for a given
1683 executable -- there could be mutiple versions of glibc,
1684 compiled with LinuxThreads or NPTL, and until there is
1685 a running inferior, we can't tell which libthread_db is
1686 the correct one to load. */
1687
1688 libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
1689
1690 add_setshow_optional_filename_cmd ("libthread-db-search-path",
1691 class_support,
1692 &libthread_db_search_path, _("\
1693Set search path for libthread_db."), _("\
1694Show the current search path or libthread_db."), _("\
1695This path is used to search for libthread_db to be loaded into \
1696gdb itself."),
1697 NULL,
1698 NULL,
1699 &setlist, &showlist);
02d868e8
PP
1700
1701 add_setshow_zinteger_cmd ("libthread-db", class_maintenance,
1702 &libthread_db_debug, _("\
1703Set libthread-db debugging."), _("\
1704Show libthread-db debugging."), _("\
1705When non-zero, libthread-db debugging is enabled."),
1706 NULL,
1707 show_libthread_db_debug,
1708 &setdebuglist, &showdebuglist);
1709
17a37d48
PP
1710 /* Add ourselves to objfile event chain. */
1711 observer_attach_new_objfile (thread_db_new_objfile);
fb0e1ba7 1712}
This page took 1.06164 seconds and 4 git commands to generate.