1 /* Handle shared libraries for GDB, the GNU Debugger. 2 3 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 4 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. 5 6 This file is part of GDB. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 59 Temple Place - Suite 330, 21 Boston, MA 02111-1307, USA. */ 22 23 #include "defs.h" 24 25 #include <sys/types.h> 26 #include <fcntl.h> 27 #include "gdb_string.h" 28 #include "symtab.h" 29 #include "bfd.h" 30 #include "symfile.h" 31 #include "objfiles.h" 32 #include "gdbcore.h" 33 #include "command.h" 34 #include "target.h" 35 #include "frame.h" 36 #include "gdb_regex.h" 37 #include "inferior.h" 38 #include "environ.h" 39 #include "language.h" 40 #include "gdbcmd.h" 41 #include "completer.h" 42 #include "filenames.h" /* for DOSish file names */ 43 #include "exec.h" 44 #include "solist.h" 45 #include "observer.h" 46 #include "readline/readline.h" 47 48 /* external data declarations */ 49 50 /* FIXME: gdbarch needs to control this variable */ 51 struct target_so_ops *current_target_so_ops; 52 53 /* local data declarations */ 54 55 static struct so_list *so_list_head; /* List of known shared objects */ 56 57 static int solib_cleanup_queued = 0; /* make_run_cleanup called */ 58 59 /* Local function prototypes */ 60 61 static void do_clear_solib (void *); 62 63 /* If non-zero, this is a prefix that will be added to the front of the name 64 shared libraries with an absolute filename for loading. */ 65 static char *solib_absolute_prefix = NULL; 66 67 /* If non-empty, this is a search path for loading non-absolute shared library 68 symbol files. This takes precedence over the environment variables PATH 69 and LD_LIBRARY_PATH. */ 70 static char *solib_search_path = NULL; 71 72 void add_to_target_sections (int, struct target_ops *, struct so_list *); 73 74 /* 75 76 GLOBAL FUNCTION 77 78 solib_open -- Find a shared library file and open it. 79 80 SYNOPSIS 81 82 int solib_open (char *in_patname, char **found_pathname); 83 84 DESCRIPTION 85 86 Global variable SOLIB_ABSOLUTE_PREFIX is used as a prefix directory 87 to search for shared libraries if they have an absolute path. 88 89 Global variable SOLIB_SEARCH_PATH is used as a prefix directory 90 (or set of directories, as in LD_LIBRARY_PATH) to search for all 91 shared libraries if not found in SOLIB_ABSOLUTE_PREFIX. 92 93 Search algorithm: 94 * If there is a solib_absolute_prefix and path is absolute: 95 * Search for solib_absolute_prefix/path. 96 * else 97 * Look for it literally (unmodified). 98 * Look in SOLIB_SEARCH_PATH. 99 * If available, use target defined search function. 100 * If solib_absolute_prefix is NOT set, perform the following two searches: 101 * Look in inferior's $PATH. 102 * Look in inferior's $LD_LIBRARY_PATH. 103 * 104 * The last check avoids doing this search when targetting remote 105 * machines since solib_absolute_prefix will almost always be set. 106 107 RETURNS 108 109 file handle for opened solib, or -1 for failure. */ 110 111 int 112 solib_open (char *in_pathname, char **found_pathname) 113 { 114 int found_file = -1; 115 char *temp_pathname = NULL; 116 char *p = in_pathname; 117 118 while (*p && !IS_DIR_SEPARATOR (*p)) 119 p++; 120 121 if (*p) 122 { 123 if (! IS_ABSOLUTE_PATH (in_pathname) || solib_absolute_prefix == NULL) 124 temp_pathname = in_pathname; 125 else 126 { 127 int prefix_len = strlen (solib_absolute_prefix); 128 129 /* Remove trailing slashes from absolute prefix. */ 130 while (prefix_len > 0 131 && IS_DIR_SEPARATOR (solib_absolute_prefix[prefix_len - 1])) 132 prefix_len--; 133 134 /* Cat the prefixed pathname together. */ 135 temp_pathname = alloca (prefix_len + strlen (in_pathname) + 1); 136 strncpy (temp_pathname, solib_absolute_prefix, prefix_len); 137 temp_pathname[prefix_len] = '\0'; 138 strcat (temp_pathname, in_pathname); 139 } 140 141 /* Now see if we can open it. */ 142 found_file = open (temp_pathname, O_RDONLY, 0); 143 } 144 145 /* If the search in solib_absolute_prefix failed, and the path name is 146 absolute at this point, make it relative. (openp will try and open the 147 file according to its absolute path otherwise, which is not what we want.) 148 Affects subsequent searches for this solib. */ 149 if (found_file < 0 && IS_ABSOLUTE_PATH (in_pathname)) 150 { 151 /* First, get rid of any drive letters etc. */ 152 while (!IS_DIR_SEPARATOR (*in_pathname)) 153 in_pathname++; 154 155 /* Next, get rid of all leading dir separators. */ 156 while (IS_DIR_SEPARATOR (*in_pathname)) 157 in_pathname++; 158 } 159 160 /* If not found, search the solib_search_path (if any). */ 161 if (found_file < 0 && solib_search_path != NULL) 162 found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST, 163 in_pathname, O_RDONLY, 0, &temp_pathname); 164 165 /* If not found, next search the solib_search_path (if any) for the basename 166 only (ignoring the path). This is to allow reading solibs from a path 167 that differs from the opened path. */ 168 if (found_file < 0 && solib_search_path != NULL) 169 found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST, 170 lbasename (in_pathname), O_RDONLY, 0, 171 &temp_pathname); 172 173 /* If not found, try to use target supplied solib search method */ 174 if (found_file < 0 && TARGET_SO_FIND_AND_OPEN_SOLIB != NULL) 175 found_file = TARGET_SO_FIND_AND_OPEN_SOLIB 176 (in_pathname, O_RDONLY, &temp_pathname); 177 178 /* If not found, next search the inferior's $PATH environment variable. */ 179 if (found_file < 0 && solib_absolute_prefix == NULL) 180 found_file = openp (get_in_environ (inferior_environ, "PATH"), 181 OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY, 0, 182 &temp_pathname); 183 184 /* If not found, next search the inferior's $LD_LIBRARY_PATH 185 environment variable. */ 186 if (found_file < 0 && solib_absolute_prefix == NULL) 187 found_file = openp (get_in_environ (inferior_environ, "LD_LIBRARY_PATH"), 188 OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY, 0, 189 &temp_pathname); 190 191 /* Done. If not found, tough luck. Return found_file and 192 (optionally) found_pathname. */ 193 if (found_pathname != NULL && temp_pathname != NULL) 194 *found_pathname = xstrdup (temp_pathname); 195 return found_file; 196 } 197 198 199 /* 200 201 LOCAL FUNCTION 202 203 solib_map_sections -- open bfd and build sections for shared lib 204 205 SYNOPSIS 206 207 static int solib_map_sections (struct so_list *so) 208 209 DESCRIPTION 210 211 Given a pointer to one of the shared objects in our list 212 of mapped objects, use the recorded name to open a bfd 213 descriptor for the object, build a section table, and then 214 relocate all the section addresses by the base address at 215 which the shared object was mapped. 216 217 FIXMES 218 219 In most (all?) cases the shared object file name recorded in the 220 dynamic linkage tables will be a fully qualified pathname. For 221 cases where it isn't, do we really mimic the systems search 222 mechanism correctly in the below code (particularly the tilde 223 expansion stuff?). 224 */ 225 226 static int 227 solib_map_sections (void *arg) 228 { 229 struct so_list *so = (struct so_list *) arg; /* catch_errors bogon */ 230 char *filename; 231 char *scratch_pathname; 232 int scratch_chan; 233 struct section_table *p; 234 struct cleanup *old_chain; 235 bfd *abfd; 236 237 filename = tilde_expand (so->so_name); 238 239 old_chain = make_cleanup (xfree, filename); 240 scratch_chan = solib_open (filename, &scratch_pathname); 241 242 if (scratch_chan < 0) 243 { 244 perror_with_name (filename); 245 } 246 247 /* Leave scratch_pathname allocated. abfd->name will point to it. */ 248 abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan); 249 if (!abfd) 250 { 251 close (scratch_chan); 252 error ("Could not open `%s' as an executable file: %s", 253 scratch_pathname, bfd_errmsg (bfd_get_error ())); 254 } 255 256 /* Leave bfd open, core_xfer_memory and "info files" need it. */ 257 so->abfd = abfd; 258 bfd_set_cacheable (abfd, 1); 259 260 /* copy full path name into so_name, so that later symbol_file_add 261 can find it */ 262 if (strlen (scratch_pathname) >= SO_NAME_MAX_PATH_SIZE) 263 error ("Full path name length of shared library exceeds SO_NAME_MAX_PATH_SIZE in so_list structure."); 264 strcpy (so->so_name, scratch_pathname); 265 266 if (!bfd_check_format (abfd, bfd_object)) 267 { 268 error ("\"%s\": not in executable format: %s.", 269 scratch_pathname, bfd_errmsg (bfd_get_error ())); 270 } 271 if (build_section_table (abfd, &so->sections, &so->sections_end)) 272 { 273 error ("Can't find the file sections in `%s': %s", 274 bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ())); 275 } 276 277 for (p = so->sections; p < so->sections_end; p++) 278 { 279 /* Relocate the section binding addresses as recorded in the shared 280 object's file by the base address to which the object was actually 281 mapped. */ 282 TARGET_SO_RELOCATE_SECTION_ADDRESSES (so, p); 283 if (strcmp (p->the_bfd_section->name, ".text") == 0) 284 { 285 so->textsection = p; 286 } 287 } 288 289 /* Free the file names, close the file now. */ 290 do_cleanups (old_chain); 291 292 return (1); 293 } 294 295 /* LOCAL FUNCTION 296 297 free_so --- free a `struct so_list' object 298 299 SYNOPSIS 300 301 void free_so (struct so_list *so) 302 303 DESCRIPTION 304 305 Free the storage associated with the `struct so_list' object SO. 306 If we have opened a BFD for SO, close it. 307 308 The caller is responsible for removing SO from whatever list it is 309 a member of. If we have placed SO's sections in some target's 310 section table, the caller is responsible for removing them. 311 312 This function doesn't mess with objfiles at all. If there is an 313 objfile associated with SO that needs to be removed, the caller is 314 responsible for taking care of that. */ 315 316 void 317 free_so (struct so_list *so) 318 { 319 char *bfd_filename = 0; 320 321 if (so->sections) 322 xfree (so->sections); 323 324 if (so->abfd) 325 { 326 bfd_filename = bfd_get_filename (so->abfd); 327 if (! bfd_close (so->abfd)) 328 warning ("cannot close \"%s\": %s", 329 bfd_filename, bfd_errmsg (bfd_get_error ())); 330 } 331 332 if (bfd_filename) 333 xfree (bfd_filename); 334 335 TARGET_SO_FREE_SO (so); 336 337 xfree (so); 338 } 339 340 341 /* Return address of first so_list entry in master shared object list. */ 342 struct so_list * 343 master_so_list (void) 344 { 345 return so_list_head; 346 } 347 348 349 /* A small stub to get us past the arg-passing pinhole of catch_errors. */ 350 351 static int 352 symbol_add_stub (void *arg) 353 { 354 struct so_list *so = (struct so_list *) arg; /* catch_errs bogon */ 355 struct section_addr_info *sap; 356 357 /* Have we already loaded this shared object? */ 358 ALL_OBJFILES (so->objfile) 359 { 360 /* Found an already loaded shared library. */ 361 if (strcmp (so->objfile->name, so->so_name) == 0 362 && !so->main) 363 return 1; 364 /* Found an already loaded main executable. This could happen in 365 two circumstances. 366 First case: the main file has already been read in 367 as the first thing that gdb does at startup, and the file 368 hasn't been relocated properly yet. Therefor we need to read 369 it in with the proper section info. 370 Second case: it has been read in with the correct relocation, 371 and therefore we need to skip it. */ 372 if (strcmp (so->objfile->name, so->so_name) == 0 373 && so->main 374 && so->main_relocated) 375 return 1; 376 } 377 378 sap = build_section_addr_info_from_section_table (so->sections, 379 so->sections_end); 380 381 if (so->main) 382 { 383 so->objfile = symbol_file_add (so->so_name, /*so->from_tty*/ 0, 384 sap, 1, 0); 385 so->main_relocated = 1; 386 } 387 else 388 so->objfile = symbol_file_add (so->so_name, so->from_tty, 389 sap, 0, OBJF_SHARED); 390 391 free_section_addr_info (sap); 392 393 return (1); 394 } 395 396 /* Read in symbols for shared object SO. If FROM_TTY is non-zero, be 397 chatty about it. Return non-zero if any symbols were actually 398 loaded. */ 399 400 int 401 solib_read_symbols (struct so_list *so, int from_tty) 402 { 403 if (so->symbols_loaded) 404 { 405 if (from_tty) 406 printf_unfiltered (_("Symbols already loaded for %s\n"), so->so_name); 407 } 408 else 409 { 410 if (catch_errors (symbol_add_stub, so, 411 "Error while reading shared library symbols:\n", 412 RETURN_MASK_ALL)) 413 { 414 if (from_tty) 415 printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name); 416 so->symbols_loaded = 1; 417 return 1; 418 } 419 } 420 421 return 0; 422 } 423 424 /* LOCAL FUNCTION 425 426 update_solib_list --- synchronize GDB's shared object list with inferior's 427 428 SYNOPSIS 429 430 void update_solib_list (int from_tty, struct target_ops *TARGET) 431 432 Extract the list of currently loaded shared objects from the 433 inferior, and compare it with the list of shared objects currently 434 in GDB's so_list_head list. Edit so_list_head to bring it in sync 435 with the inferior's new list. 436 437 If we notice that the inferior has unloaded some shared objects, 438 free any symbolic info GDB had read about those shared objects. 439 440 Don't load symbolic info for any new shared objects; just add them 441 to the list, and leave their symbols_loaded flag clear. 442 443 If FROM_TTY is non-null, feel free to print messages about what 444 we're doing. 445 446 If TARGET is non-null, add the sections of all new shared objects 447 to TARGET's section table. Note that this doesn't remove any 448 sections for shared objects that have been unloaded, and it 449 doesn't check to see if the new shared objects are already present in 450 the section table. But we only use this for core files and 451 processes we've just attached to, so that's okay. */ 452 453 static void 454 update_solib_list (int from_tty, struct target_ops *target) 455 { 456 struct so_list *inferior = TARGET_SO_CURRENT_SOS (); 457 struct so_list *gdb, **gdb_link; 458 459 /* If we are attaching to a running process for which we 460 have not opened a symbol file, we may be able to get its 461 symbols now! */ 462 if (attach_flag && 463 symfile_objfile == NULL) 464 catch_errors (TARGET_SO_OPEN_SYMBOL_FILE_OBJECT, &from_tty, 465 "Error reading attached process's symbol file.\n", 466 RETURN_MASK_ALL); 467 468 /* Since this function might actually add some elements to the 469 so_list_head list, arrange for it to be cleaned up when 470 appropriate. */ 471 if (!solib_cleanup_queued) 472 { 473 make_run_cleanup (do_clear_solib, NULL); 474 solib_cleanup_queued = 1; 475 } 476 477 /* GDB and the inferior's dynamic linker each maintain their own 478 list of currently loaded shared objects; we want to bring the 479 former in sync with the latter. Scan both lists, seeing which 480 shared objects appear where. There are three cases: 481 482 - A shared object appears on both lists. This means that GDB 483 knows about it already, and it's still loaded in the inferior. 484 Nothing needs to happen. 485 486 - A shared object appears only on GDB's list. This means that 487 the inferior has unloaded it. We should remove the shared 488 object from GDB's tables. 489 490 - A shared object appears only on the inferior's list. This 491 means that it's just been loaded. We should add it to GDB's 492 tables. 493 494 So we walk GDB's list, checking each entry to see if it appears 495 in the inferior's list too. If it does, no action is needed, and 496 we remove it from the inferior's list. If it doesn't, the 497 inferior has unloaded it, and we remove it from GDB's list. By 498 the time we're done walking GDB's list, the inferior's list 499 contains only the new shared objects, which we then add. */ 500 501 gdb = so_list_head; 502 gdb_link = &so_list_head; 503 while (gdb) 504 { 505 struct so_list *i = inferior; 506 struct so_list **i_link = &inferior; 507 508 /* Check to see whether the shared object *gdb also appears in 509 the inferior's current list. */ 510 while (i) 511 { 512 if (! strcmp (gdb->so_original_name, i->so_original_name)) 513 break; 514 515 i_link = &i->next; 516 i = *i_link; 517 } 518 519 /* If the shared object appears on the inferior's list too, then 520 it's still loaded, so we don't need to do anything. Delete 521 it from the inferior's list, and leave it on GDB's list. */ 522 if (i) 523 { 524 *i_link = i->next; 525 free_so (i); 526 gdb_link = &gdb->next; 527 gdb = *gdb_link; 528 } 529 530 /* If it's not on the inferior's list, remove it from GDB's tables. */ 531 else 532 { 533 /* Notify any observer that the SO has been unloaded 534 before we remove it from the gdb tables. */ 535 observer_notify_solib_unloaded (gdb); 536 537 *gdb_link = gdb->next; 538 539 /* Unless the user loaded it explicitly, free SO's objfile. */ 540 if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED)) 541 free_objfile (gdb->objfile); 542 543 /* Some targets' section tables might be referring to 544 sections from so->abfd; remove them. */ 545 remove_target_sections (gdb->abfd); 546 547 free_so (gdb); 548 gdb = *gdb_link; 549 } 550 } 551 552 /* Now the inferior's list contains only shared objects that don't 553 appear in GDB's list --- those that are newly loaded. Add them 554 to GDB's shared object list. */ 555 if (inferior) 556 { 557 struct so_list *i; 558 559 /* Add the new shared objects to GDB's list. */ 560 *gdb_link = inferior; 561 562 /* Fill in the rest of each of the `struct so_list' nodes. */ 563 for (i = inferior; i; i = i->next) 564 { 565 add_to_target_sections (from_tty, target, i); 566 } 567 } 568 } 569 570 void 571 add_to_target_sections (int from_tty, struct target_ops *target, struct so_list *solib) 572 { 573 /* If this is set, then the sections have been already added to the 574 target list. */ 575 if (solib->main) 576 return; 577 578 solib->from_tty = from_tty; 579 580 /* Fill in the rest of the `struct so_list' node. */ 581 catch_errors (solib_map_sections, solib, 582 "Error while mapping shared library sections:\n", 583 RETURN_MASK_ALL); 584 585 /* If requested, add the shared object's sections to the TARGET's 586 section table. Do this immediately after mapping the object so 587 that later nodes in the list can query this object, as is needed 588 in solib-osf.c. */ 589 if (target) 590 { 591 int count = (solib->sections_end - solib->sections); 592 if (count > 0) 593 { 594 int space = target_resize_to_sections (target, count); 595 memcpy (target->to_sections + space, 596 solib->sections, 597 count * sizeof (solib->sections[0])); 598 } 599 } 600 /* Notify any observer that the shared object has been 601 loaded now that we've added it to GDB's tables. */ 602 observer_notify_solib_loaded (solib); 603 } 604 605 606 /* GLOBAL FUNCTION 607 608 solib_add -- read in symbol info for newly added shared libraries 609 610 SYNOPSIS 611 612 void solib_add (char *pattern, int from_tty, struct target_ops 613 *TARGET, int readsyms) 614 615 DESCRIPTION 616 617 Read in symbolic information for any shared objects whose names 618 match PATTERN. (If we've already read a shared object's symbol 619 info, leave it alone.) If PATTERN is zero, read them all. 620 621 If READSYMS is 0, defer reading symbolic information until later 622 but still do any needed low level processing. 623 624 FROM_TTY and TARGET are as described for update_solib_list, above. */ 625 626 void 627 solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms) 628 { 629 struct so_list *gdb; 630 631 if (pattern) 632 { 633 char *re_err = re_comp (pattern); 634 635 if (re_err) 636 error ("Invalid regexp: %s", re_err); 637 } 638 639 update_solib_list (from_tty, target); 640 641 /* Walk the list of currently loaded shared libraries, and read 642 symbols for any that match the pattern --- or any whose symbols 643 aren't already loaded, if no pattern was given. */ 644 { 645 int any_matches = 0; 646 int loaded_any_symbols = 0; 647 648 for (gdb = so_list_head; gdb; gdb = gdb->next) 649 if (! pattern || re_exec (gdb->so_name)) 650 { 651 any_matches = 1; 652 if (readsyms && solib_read_symbols (gdb, from_tty)) 653 loaded_any_symbols = 1; 654 } 655 656 if (from_tty && pattern && ! any_matches) 657 printf_unfiltered 658 ("No loaded shared libraries match the pattern `%s'.\n", pattern); 659 660 if (loaded_any_symbols) 661 { 662 /* Getting new symbols may change our opinion about what is 663 frameless. */ 664 reinit_frame_cache (); 665 666 TARGET_SO_SPECIAL_SYMBOL_HANDLING (); 667 } 668 } 669 } 670 671 672 /* 673 674 LOCAL FUNCTION 675 676 info_sharedlibrary_command -- code for "info sharedlibrary" 677 678 SYNOPSIS 679 680 static void info_sharedlibrary_command () 681 682 DESCRIPTION 683 684 Walk through the shared library list and print information 685 about each attached library. 686 */ 687 688 static void 689 info_sharedlibrary_command (char *ignore, int from_tty) 690 { 691 struct so_list *so = NULL; /* link map state variable */ 692 int header_done = 0; 693 int addr_width; 694 695 if (TARGET_PTR_BIT == 32) 696 addr_width = 8 + 4; 697 else if (TARGET_PTR_BIT == 64) 698 addr_width = 16 + 4; 699 else 700 { 701 internal_error (__FILE__, __LINE__, 702 "TARGET_PTR_BIT returned unknown size %d", 703 TARGET_PTR_BIT); 704 } 705 706 update_solib_list (from_tty, 0); 707 708 for (so = so_list_head; so; so = so->next) 709 { 710 if (so->so_name[0]) 711 { 712 if (!header_done) 713 { 714 printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From", 715 addr_width, "To", "Syms Read", 716 "Shared Object Library"); 717 header_done++; 718 } 719 720 printf_unfiltered ("%-*s", addr_width, 721 so->textsection != NULL 722 ? hex_string_custom ( 723 (LONGEST) so->textsection->addr, 724 addr_width - 4) 725 : ""); 726 printf_unfiltered ("%-*s", addr_width, 727 so->textsection != NULL 728 ? hex_string_custom ( 729 (LONGEST) so->textsection->endaddr, 730 addr_width - 4) 731 : ""); 732 printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No"); 733 printf_unfiltered ("%s\n", so->so_name); 734 } 735 } 736 if (so_list_head == NULL) 737 { 738 printf_unfiltered ("No shared libraries loaded at this time.\n"); 739 } 740 } 741 742 /* 743 744 GLOBAL FUNCTION 745 746 solib_address -- check to see if an address is in a shared lib 747 748 SYNOPSIS 749 750 char * solib_address (CORE_ADDR address) 751 752 DESCRIPTION 753 754 Provides a hook for other gdb routines to discover whether or 755 not a particular address is within the mapped address space of 756 a shared library. 757 758 For example, this routine is called at one point to disable 759 breakpoints which are in shared libraries that are not currently 760 mapped in. 761 */ 762 763 char * 764 solib_address (CORE_ADDR address) 765 { 766 struct so_list *so = 0; /* link map state variable */ 767 768 for (so = so_list_head; so; so = so->next) 769 { 770 struct section_table *p; 771 772 for (p = so->sections; p < so->sections_end; p++) 773 { 774 if (p->addr <= address && address < p->endaddr) 775 return (so->so_name); 776 } 777 } 778 779 return (0); 780 } 781 782 /* Called by free_all_symtabs */ 783 784 void 785 clear_solib (void) 786 { 787 /* This function is expected to handle ELF shared libraries. It is 788 also used on Solaris, which can run either ELF or a.out binaries 789 (for compatibility with SunOS 4), both of which can use shared 790 libraries. So we don't know whether we have an ELF executable or 791 an a.out executable until the user chooses an executable file. 792 793 ELF shared libraries don't get mapped into the address space 794 until after the program starts, so we'd better not try to insert 795 breakpoints in them immediately. We have to wait until the 796 dynamic linker has loaded them; we'll hit a bp_shlib_event 797 breakpoint (look for calls to create_solib_event_breakpoint) when 798 it's ready. 799 800 SunOS shared libraries seem to be different --- they're present 801 as soon as the process begins execution, so there's no need to 802 put off inserting breakpoints. There's also nowhere to put a 803 bp_shlib_event breakpoint, so if we put it off, we'll never get 804 around to it. 805 806 So: disable breakpoints only if we're using ELF shared libs. */ 807 if (exec_bfd != NULL 808 && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour) 809 disable_breakpoints_in_shlibs (1); 810 811 while (so_list_head) 812 { 813 struct so_list *so = so_list_head; 814 so_list_head = so->next; 815 if (so->abfd) 816 remove_target_sections (so->abfd); 817 free_so (so); 818 } 819 820 TARGET_SO_CLEAR_SOLIB (); 821 } 822 823 static void 824 do_clear_solib (void *dummy) 825 { 826 solib_cleanup_queued = 0; 827 clear_solib (); 828 } 829 830 /* GLOBAL FUNCTION 831 832 solib_create_inferior_hook -- shared library startup support 833 834 SYNOPSIS 835 836 void solib_create_inferior_hook() 837 838 DESCRIPTION 839 840 When gdb starts up the inferior, it nurses it along (through the 841 shell) until it is ready to execute it's first instruction. At this 842 point, this function gets called via expansion of the macro 843 SOLIB_CREATE_INFERIOR_HOOK. */ 844 845 void 846 solib_create_inferior_hook (void) 847 { 848 TARGET_SO_SOLIB_CREATE_INFERIOR_HOOK (); 849 } 850 851 /* GLOBAL FUNCTION 852 853 in_solib_dynsym_resolve_code -- check to see if an address is in 854 dynamic loader's dynamic symbol 855 resolution code 856 857 SYNOPSIS 858 859 int in_solib_dynsym_resolve_code (CORE_ADDR pc) 860 861 DESCRIPTION 862 863 Determine if PC is in the dynamic linker's symbol resolution 864 code. Return 1 if so, 0 otherwise. 865 */ 866 867 int 868 in_solib_dynsym_resolve_code (CORE_ADDR pc) 869 { 870 return TARGET_SO_IN_DYNSYM_RESOLVE_CODE (pc); 871 } 872 873 /* 874 875 LOCAL FUNCTION 876 877 sharedlibrary_command -- handle command to explicitly add library 878 879 SYNOPSIS 880 881 static void sharedlibrary_command (char *args, int from_tty) 882 883 DESCRIPTION 884 885 */ 886 887 static void 888 sharedlibrary_command (char *args, int from_tty) 889 { 890 dont_repeat (); 891 solib_add (args, from_tty, (struct target_ops *) 0, 1); 892 } 893 894 /* LOCAL FUNCTION 895 896 no_shared_libraries -- handle command to explicitly discard symbols 897 from shared libraries. 898 899 DESCRIPTION 900 901 Implements the command "nosharedlibrary", which discards symbols 902 that have been auto-loaded from shared libraries. Symbols from 903 shared libraries that were added by explicit request of the user 904 are not discarded. Also called from remote.c. */ 905 906 void 907 no_shared_libraries (char *ignored, int from_tty) 908 { 909 objfile_purge_solibs (); 910 do_clear_solib (NULL); 911 } 912 913 static void 914 reload_shared_libraries (char *ignored, int from_tty) 915 { 916 no_shared_libraries (NULL, from_tty); 917 solib_add (NULL, from_tty, NULL, auto_solib_add); 918 } 919 920 extern initialize_file_ftype _initialize_solib; /* -Wmissing-prototypes */ 921 922 void 923 _initialize_solib (void) 924 { 925 struct cmd_list_element *c; 926 927 add_com ("sharedlibrary", class_files, sharedlibrary_command, 928 "Load shared object library symbols for files matching REGEXP."); 929 add_info ("sharedlibrary", info_sharedlibrary_command, 930 "Status of loaded shared object libraries."); 931 add_com ("nosharedlibrary", class_files, no_shared_libraries, 932 "Unload all shared object library symbols."); 933 934 deprecated_add_show_from_set 935 (add_set_cmd ("auto-solib-add", class_support, var_boolean, 936 (char *) &auto_solib_add, 937 "Set autoloading of shared library symbols.\n\ 938 If \"on\", symbols from all shared object libraries will be loaded\n\ 939 automatically when the inferior begins execution, when the dynamic linker\n\ 940 informs gdb that a new library has been loaded, or when attaching to the\n\ 941 inferior. Otherwise, symbols must be loaded manually, using `sharedlibrary'.", 942 &setlist), 943 &showlist); 944 945 c = add_set_cmd ("solib-absolute-prefix", class_support, var_filename, 946 (char *) &solib_absolute_prefix, 947 "Set prefix for loading absolute shared library symbol files.\n\ 948 For other (relative) files, you can add values using `set solib-search-path'.", 949 &setlist); 950 deprecated_add_show_from_set (c, &showlist); 951 set_cmd_cfunc (c, reload_shared_libraries); 952 set_cmd_completer (c, filename_completer); 953 954 /* Set the default value of "solib-absolute-prefix" from the sysroot, if 955 one is set. */ 956 solib_absolute_prefix = xstrdup (gdb_sysroot); 957 958 c = add_set_cmd ("solib-search-path", class_support, var_string, 959 (char *) &solib_search_path, 960 "Set the search path for loading non-absolute shared library symbol files.\n\ 961 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.", 962 &setlist); 963 deprecated_add_show_from_set (c, &showlist); 964 set_cmd_cfunc (c, reload_shared_libraries); 965 set_cmd_completer (c, filename_completer); 966 } 967