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