1 /* Handle shared libraries for GDB, the GNU Debugger. 2 3 Copyright (C) 1990-2016 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 3 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, see <http://www.gnu.org/licenses/>. */ 19 20 #include "defs.h" 21 22 #include <sys/types.h> 23 #include <fcntl.h> 24 #include "symtab.h" 25 #include "bfd.h" 26 #include "symfile.h" 27 #include "objfiles.h" 28 #include "gdbcore.h" 29 #include "command.h" 30 #include "target.h" 31 #include "frame.h" 32 #include "gdb_regex.h" 33 #include "inferior.h" 34 #include "environ.h" 35 #include "language.h" 36 #include "gdbcmd.h" 37 #include "completer.h" 38 #include "filenames.h" /* for DOSish file names */ 39 #include "exec.h" 40 #include "solist.h" 41 #include "observer.h" 42 #include "readline/readline.h" 43 #include "remote.h" 44 #include "solib.h" 45 #include "interps.h" 46 #include "filesystem.h" 47 #include "gdb_bfd.h" 48 #include "filestuff.h" 49 50 /* Architecture-specific operations. */ 51 52 /* Per-architecture data key. */ 53 static struct gdbarch_data *solib_data; 54 55 static void * 56 solib_init (struct obstack *obstack) 57 { 58 struct target_so_ops **ops; 59 60 ops = OBSTACK_ZALLOC (obstack, struct target_so_ops *); 61 *ops = current_target_so_ops; 62 return ops; 63 } 64 65 static const struct target_so_ops * 66 solib_ops (struct gdbarch *gdbarch) 67 { 68 const struct target_so_ops **ops 69 = (const struct target_so_ops **) gdbarch_data (gdbarch, solib_data); 70 71 return *ops; 72 } 73 74 /* Set the solib operations for GDBARCH to NEW_OPS. */ 75 76 void 77 set_solib_ops (struct gdbarch *gdbarch, const struct target_so_ops *new_ops) 78 { 79 const struct target_so_ops **ops 80 = (const struct target_so_ops **) gdbarch_data (gdbarch, solib_data); 81 82 *ops = new_ops; 83 } 84 85 86 /* external data declarations */ 87 88 /* FIXME: gdbarch needs to control this variable, or else every 89 configuration needs to call set_solib_ops. */ 90 struct target_so_ops *current_target_so_ops; 91 92 /* List of known shared objects */ 93 #define so_list_head current_program_space->so_list 94 95 /* Local function prototypes */ 96 97 /* If non-empty, this is a search path for loading non-absolute shared library 98 symbol files. This takes precedence over the environment variables PATH 99 and LD_LIBRARY_PATH. */ 100 static char *solib_search_path = NULL; 101 static void 102 show_solib_search_path (struct ui_file *file, int from_tty, 103 struct cmd_list_element *c, const char *value) 104 { 105 fprintf_filtered (file, _("The search path for loading non-absolute " 106 "shared library symbol files is %s.\n"), 107 value); 108 } 109 110 /* Same as HAVE_DOS_BASED_FILE_SYSTEM, but useable as an rvalue. */ 111 #if (HAVE_DOS_BASED_FILE_SYSTEM) 112 # define DOS_BASED_FILE_SYSTEM 1 113 #else 114 # define DOS_BASED_FILE_SYSTEM 0 115 #endif 116 117 /* Return the full pathname of a binary file (the main executable 118 or a shared library file), or NULL if not found. The returned 119 pathname is malloc'ed and must be freed by the caller. If FD 120 is non-NULL, *FD is set to either -1 or an open file handle for 121 the binary file. 122 123 Global variable GDB_SYSROOT is used as a prefix directory 124 to search for binary files if they have an absolute path. 125 If GDB_SYSROOT starts with "target:" and target filesystem 126 is the local filesystem then the "target:" prefix will be 127 stripped before the search starts. This ensures that the 128 same search algorithm is used for local files regardless of 129 whether a "target:" prefix was used. 130 131 Global variable SOLIB_SEARCH_PATH is used as a prefix directory 132 (or set of directories, as in LD_LIBRARY_PATH) to search for all 133 shared libraries if not found in either the sysroot (if set) or 134 the local filesystem. SOLIB_SEARCH_PATH is not used when searching 135 for the main executable. 136 137 Search algorithm: 138 * If a sysroot is set and path is absolute: 139 * Search for sysroot/path. 140 * else 141 * Look for it literally (unmodified). 142 * If IS_SOLIB is non-zero: 143 * Look in SOLIB_SEARCH_PATH. 144 * If available, use target defined search function. 145 * If NO sysroot is set, perform the following two searches: 146 * Look in inferior's $PATH. 147 * If IS_SOLIB is non-zero: 148 * Look in inferior's $LD_LIBRARY_PATH. 149 * 150 * The last check avoids doing this search when targetting remote 151 * machines since a sysroot will almost always be set. 152 */ 153 154 static char * 155 solib_find_1 (char *in_pathname, int *fd, int is_solib) 156 { 157 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 158 int found_file = -1; 159 char *temp_pathname = NULL; 160 const char *fskind = effective_target_file_system_kind (); 161 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL); 162 char *sysroot = gdb_sysroot; 163 int prefix_len, orig_prefix_len; 164 165 /* If the absolute prefix starts with "target:" but the filesystem 166 accessed by the target_fileio_* methods is the local filesystem 167 then we strip the "target:" prefix now and work with the local 168 filesystem. This ensures that the same search algorithm is used 169 for all local files regardless of whether a "target:" prefix was 170 used. */ 171 if (is_target_filename (sysroot) && target_filesystem_is_local ()) 172 sysroot += strlen (TARGET_SYSROOT_PREFIX); 173 174 /* Strip any trailing slashes from the absolute prefix. */ 175 prefix_len = orig_prefix_len = strlen (sysroot); 176 177 while (prefix_len > 0 && IS_DIR_SEPARATOR (sysroot[prefix_len - 1])) 178 prefix_len--; 179 180 if (prefix_len == 0) 181 sysroot = NULL; 182 else if (prefix_len != orig_prefix_len) 183 { 184 sysroot = savestring (sysroot, prefix_len); 185 make_cleanup (xfree, sysroot); 186 } 187 188 /* If we're on a non-DOS-based system, backslashes won't be 189 understood as directory separator, so, convert them to forward 190 slashes, iff we're supposed to handle DOS-based file system 191 semantics for target paths. */ 192 if (!DOS_BASED_FILE_SYSTEM && fskind == file_system_kind_dos_based) 193 { 194 char *p; 195 196 /* Avoid clobbering our input. */ 197 p = (char *) alloca (strlen (in_pathname) + 1); 198 strcpy (p, in_pathname); 199 in_pathname = p; 200 201 for (; *p; p++) 202 { 203 if (*p == '\\') 204 *p = '/'; 205 } 206 } 207 208 /* Note, we're interested in IS_TARGET_ABSOLUTE_PATH, not 209 IS_ABSOLUTE_PATH. The latter is for host paths only, while 210 IN_PATHNAME is a target path. For example, if we're supposed to 211 be handling DOS-like semantics we want to consider a 212 'c:/foo/bar.dll' path as an absolute path, even on a Unix box. 213 With such a path, before giving up on the sysroot, we'll try: 214 215 1st attempt, c:/foo/bar.dll ==> /sysroot/c:/foo/bar.dll 216 2nd attempt, c:/foo/bar.dll ==> /sysroot/c/foo/bar.dll 217 3rd attempt, c:/foo/bar.dll ==> /sysroot/foo/bar.dll 218 */ 219 220 if (!IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname) || sysroot == NULL) 221 temp_pathname = xstrdup (in_pathname); 222 else 223 { 224 int need_dir_separator; 225 226 /* Concatenate the sysroot and the target reported filename. We 227 may need to glue them with a directory separator. Cases to 228 consider: 229 230 | sysroot | separator | in_pathname | 231 |-----------------+-----------+----------------| 232 | /some/dir | / | c:/foo/bar.dll | 233 | /some/dir | | /foo/bar.dll | 234 | target: | | c:/foo/bar.dll | 235 | target: | | /foo/bar.dll | 236 | target:some/dir | / | c:/foo/bar.dll | 237 | target:some/dir | | /foo/bar.dll | 238 239 IOW, we don't need to add a separator if IN_PATHNAME already 240 has one, or when the the sysroot is exactly "target:". 241 There's no need to check for drive spec explicitly, as we only 242 get here if IN_PATHNAME is considered an absolute path. */ 243 need_dir_separator = !(IS_DIR_SEPARATOR (in_pathname[0]) 244 || strcmp (TARGET_SYSROOT_PREFIX, sysroot) == 0); 245 246 /* Cat the prefixed pathname together. */ 247 temp_pathname = concat (sysroot, 248 need_dir_separator ? SLASH_STRING : "", 249 in_pathname, (char *) NULL); 250 } 251 252 /* Handle files to be accessed via the target. */ 253 if (is_target_filename (temp_pathname)) 254 { 255 if (fd != NULL) 256 *fd = -1; 257 do_cleanups (old_chain); 258 return temp_pathname; 259 } 260 261 /* Now see if we can open it. */ 262 found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0); 263 if (found_file < 0) 264 xfree (temp_pathname); 265 266 /* If the search in gdb_sysroot failed, and the path name has a 267 drive spec (e.g, c:/foo), try stripping ':' from the drive spec, 268 and retrying in the sysroot: 269 c:/foo/bar.dll ==> /sysroot/c/foo/bar.dll. */ 270 271 if (found_file < 0 272 && sysroot != NULL 273 && HAS_TARGET_DRIVE_SPEC (fskind, in_pathname)) 274 { 275 int need_dir_separator = !IS_DIR_SEPARATOR (in_pathname[2]); 276 char *drive = savestring (in_pathname, 1); 277 278 temp_pathname = concat (sysroot, 279 SLASH_STRING, 280 drive, 281 need_dir_separator ? SLASH_STRING : "", 282 in_pathname + 2, (char *) NULL); 283 xfree (drive); 284 285 found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0); 286 if (found_file < 0) 287 { 288 xfree (temp_pathname); 289 290 /* If the search in gdb_sysroot still failed, try fully 291 stripping the drive spec, and trying once more in the 292 sysroot before giving up. 293 294 c:/foo/bar.dll ==> /sysroot/foo/bar.dll. */ 295 296 temp_pathname = concat (sysroot, 297 need_dir_separator ? SLASH_STRING : "", 298 in_pathname + 2, (char *) NULL); 299 300 found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0); 301 if (found_file < 0) 302 xfree (temp_pathname); 303 } 304 } 305 306 do_cleanups (old_chain); 307 308 /* We try to find the library in various ways. After each attempt, 309 either found_file >= 0 and temp_pathname is a malloc'd string, or 310 found_file < 0 and temp_pathname does not point to storage that 311 needs to be freed. */ 312 313 if (found_file < 0) 314 temp_pathname = NULL; 315 316 /* If the search in gdb_sysroot failed, and the path name is 317 absolute at this point, make it relative. (openp will try and open the 318 file according to its absolute path otherwise, which is not what we want.) 319 Affects subsequent searches for this solib. */ 320 if (found_file < 0 && IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname)) 321 { 322 /* First, get rid of any drive letters etc. */ 323 while (!IS_TARGET_DIR_SEPARATOR (fskind, *in_pathname)) 324 in_pathname++; 325 326 /* Next, get rid of all leading dir separators. */ 327 while (IS_TARGET_DIR_SEPARATOR (fskind, *in_pathname)) 328 in_pathname++; 329 } 330 331 /* If not found, and we're looking for a solib, search the 332 solib_search_path (if any). */ 333 if (is_solib && found_file < 0 && solib_search_path != NULL) 334 found_file = openp (solib_search_path, 335 OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, 336 in_pathname, O_RDONLY | O_BINARY, &temp_pathname); 337 338 /* If not found, and we're looking for a solib, next search the 339 solib_search_path (if any) for the basename only (ignoring the 340 path). This is to allow reading solibs from a path that differs 341 from the opened path. */ 342 if (is_solib && found_file < 0 && solib_search_path != NULL) 343 found_file = openp (solib_search_path, 344 OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, 345 target_lbasename (fskind, in_pathname), 346 O_RDONLY | O_BINARY, &temp_pathname); 347 348 /* If not found, and we're looking for a solib, try to use target 349 supplied solib search method. */ 350 if (is_solib && found_file < 0 && ops->find_and_open_solib) 351 found_file = ops->find_and_open_solib (in_pathname, O_RDONLY | O_BINARY, 352 &temp_pathname); 353 354 /* If not found, next search the inferior's $PATH environment variable. */ 355 if (found_file < 0 && sysroot == NULL) 356 found_file = openp (get_in_environ (current_inferior ()->environment, 357 "PATH"), 358 OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname, 359 O_RDONLY | O_BINARY, &temp_pathname); 360 361 /* If not found, and we're looking for a solib, next search the 362 inferior's $LD_LIBRARY_PATH environment variable. */ 363 if (is_solib && found_file < 0 && sysroot == NULL) 364 found_file = openp (get_in_environ (current_inferior ()->environment, 365 "LD_LIBRARY_PATH"), 366 OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname, 367 O_RDONLY | O_BINARY, &temp_pathname); 368 369 if (fd == NULL) 370 { 371 if (found_file >= 0) 372 close (found_file); 373 } 374 else 375 *fd = found_file; 376 377 return temp_pathname; 378 } 379 380 /* Return the full pathname of the main executable, or NULL if not 381 found. The returned pathname is malloc'ed and must be freed by 382 the caller. If FD is non-NULL, *FD is set to either -1 or an open 383 file handle for the main executable. 384 385 The search algorithm used is described in solib_find_1's comment 386 above. */ 387 388 char * 389 exec_file_find (char *in_pathname, int *fd) 390 { 391 char *result = solib_find_1 (in_pathname, fd, 0); 392 393 if (result == NULL) 394 { 395 const char *fskind = effective_target_file_system_kind (); 396 397 if (fskind == file_system_kind_dos_based) 398 { 399 char *new_pathname; 400 401 new_pathname = (char *) alloca (strlen (in_pathname) + 5); 402 strcpy (new_pathname, in_pathname); 403 strcat (new_pathname, ".exe"); 404 405 result = solib_find_1 (new_pathname, fd, 0); 406 } 407 } 408 409 return result; 410 } 411 412 /* Return the full pathname of a shared library file, or NULL if not 413 found. The returned pathname is malloc'ed and must be freed by 414 the caller. If FD is non-NULL, *FD is set to either -1 or an open 415 file handle for the shared library. 416 417 The search algorithm used is described in solib_find_1's comment 418 above. */ 419 420 char * 421 solib_find (char *in_pathname, int *fd) 422 { 423 const char *solib_symbols_extension 424 = gdbarch_solib_symbols_extension (target_gdbarch ()); 425 426 /* If solib_symbols_extension is set, replace the file's 427 extension. */ 428 if (solib_symbols_extension != NULL) 429 { 430 char *p = in_pathname + strlen (in_pathname); 431 432 while (p > in_pathname && *p != '.') 433 p--; 434 435 if (*p == '.') 436 { 437 char *new_pathname; 438 439 new_pathname 440 = (char *) alloca (p - in_pathname + 1 441 + strlen (solib_symbols_extension) + 1); 442 memcpy (new_pathname, in_pathname, p - in_pathname + 1); 443 strcpy (new_pathname + (p - in_pathname) + 1, 444 solib_symbols_extension); 445 446 in_pathname = new_pathname; 447 } 448 } 449 450 return solib_find_1 (in_pathname, fd, 1); 451 } 452 453 /* Open and return a BFD for the shared library PATHNAME. If FD is not -1, 454 it is used as file handle to open the file. Throws an error if the file 455 could not be opened. Handles both local and remote file access. 456 457 PATHNAME must be malloc'ed by the caller. It will be freed by this 458 function. If unsuccessful, the FD will be closed (unless FD was 459 -1). */ 460 461 bfd * 462 solib_bfd_fopen (char *pathname, int fd) 463 { 464 bfd *abfd = gdb_bfd_open (pathname, gnutarget, fd); 465 466 if (abfd != NULL && !gdb_bfd_has_target_filename (abfd)) 467 bfd_set_cacheable (abfd, 1); 468 469 if (!abfd) 470 { 471 make_cleanup (xfree, pathname); 472 error (_("Could not open `%s' as an executable file: %s"), 473 pathname, bfd_errmsg (bfd_get_error ())); 474 } 475 476 xfree (pathname); 477 478 return abfd; 479 } 480 481 /* Find shared library PATHNAME and open a BFD for it. */ 482 483 static bfd * 484 solib_bfd_open1 (char *pathname) 485 { 486 char *found_pathname; 487 int found_file; 488 bfd *abfd; 489 490 /* Search for shared library file. */ 491 found_pathname = solib_find (pathname, &found_file); 492 if (found_pathname == NULL) 493 { 494 /* Return failure if the file could not be found, so that we can 495 accumulate messages about missing libraries. */ 496 if (errno == ENOENT) 497 return NULL; 498 499 perror_with_name (pathname); 500 } 501 502 /* Open bfd for shared library. */ 503 abfd = solib_bfd_fopen (found_pathname, found_file); 504 505 /* Check bfd format. */ 506 if (!bfd_check_format (abfd, bfd_object)) 507 { 508 make_cleanup_bfd_unref (abfd); 509 error (_("`%s': not in executable format: %s"), 510 bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ())); 511 } 512 return abfd; 513 } 514 515 bfd * 516 solib_bfd_open (char *pathname) 517 { 518 bfd *abfd, *bbfd; 519 const struct bfd_arch_info *b; 520 char pname[PATH_MAX]; 521 522 abfd = solib_bfd_open1 (pathname); 523 if (abfd == NULL) 524 return NULL; 525 526 /* Check bfd arch. */ 527 b = gdbarch_bfd_arch_info (target_gdbarch ()); 528 if (b->compatible (b, bfd_get_arch_info (abfd))) 529 return abfd; 530 531 snprintf (pname, sizeof(pname), "%s-%s", pathname, b->printable_name); 532 bbfd = solib_bfd_open1 (pname); 533 if (bbfd == NULL) 534 goto out; 535 536 gdb_bfd_unref (abfd); 537 abfd = bbfd; 538 539 /* Check bfd arch. */ 540 if (b->compatible (b, bfd_get_arch_info (abfd))) 541 return abfd; 542 543 out: 544 warning (_("`%s': Shared library architecture %s is not compatible " 545 "with target architecture %s."), bfd_get_filename (abfd), 546 bfd_get_arch_info (abfd)->printable_name, b->printable_name); 547 548 return abfd; 549 } 550 551 /* Given a pointer to one of the shared objects in our list of mapped 552 objects, use the recorded name to open a bfd descriptor for the 553 object, build a section table, relocate all the section addresses 554 by the base address at which the shared object was mapped, and then 555 add the sections to the target's section table. 556 557 FIXME: In most (all?) cases the shared object file name recorded in 558 the dynamic linkage tables will be a fully qualified pathname. For 559 cases where it isn't, do we really mimic the systems search 560 mechanism correctly in the below code (particularly the tilde 561 expansion stuff?). */ 562 563 static int 564 solib_map_sections (struct so_list *so) 565 { 566 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 567 char *filename; 568 struct target_section *p; 569 struct cleanup *old_chain; 570 bfd *abfd; 571 572 filename = tilde_expand (so->so_name); 573 old_chain = make_cleanup (xfree, filename); 574 abfd = ops->bfd_open (filename); 575 do_cleanups (old_chain); 576 577 if (abfd == NULL) 578 return 0; 579 580 /* Leave bfd open, core_xfer_memory and "info files" need it. */ 581 so->abfd = abfd; 582 583 /* Copy the full path name into so_name, allowing symbol_file_add 584 to find it later. This also affects the =library-loaded GDB/MI 585 event, and in particular the part of that notification providing 586 the library's host-side path. If we let the target dictate 587 that objfile's path, and the target is different from the host, 588 GDB/MI will not provide the correct host-side path. */ 589 if (strlen (bfd_get_filename (abfd)) >= SO_NAME_MAX_PATH_SIZE) 590 error (_("Shared library file name is too long.")); 591 strcpy (so->so_name, bfd_get_filename (abfd)); 592 593 if (build_section_table (abfd, &so->sections, &so->sections_end)) 594 { 595 error (_("Can't find the file sections in `%s': %s"), 596 bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ())); 597 } 598 599 for (p = so->sections; p < so->sections_end; p++) 600 { 601 /* Relocate the section binding addresses as recorded in the shared 602 object's file by the base address to which the object was actually 603 mapped. */ 604 ops->relocate_section_addresses (so, p); 605 606 /* If the target didn't provide information about the address 607 range of the shared object, assume we want the location of 608 the .text section. */ 609 if (so->addr_low == 0 && so->addr_high == 0 610 && strcmp (p->the_bfd_section->name, ".text") == 0) 611 { 612 so->addr_low = p->addr; 613 so->addr_high = p->endaddr; 614 } 615 } 616 617 /* Add the shared object's sections to the current set of file 618 section tables. Do this immediately after mapping the object so 619 that later nodes in the list can query this object, as is needed 620 in solib-osf.c. */ 621 add_target_sections (so, so->sections, so->sections_end); 622 623 return 1; 624 } 625 626 /* Free symbol-file related contents of SO and reset for possible reloading 627 of SO. If we have opened a BFD for SO, close it. If we have placed SO's 628 sections in some target's section table, the caller is responsible for 629 removing them. 630 631 This function doesn't mess with objfiles at all. If there is an 632 objfile associated with SO that needs to be removed, the caller is 633 responsible for taking care of that. */ 634 635 static void 636 clear_so (struct so_list *so) 637 { 638 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 639 640 if (so->sections) 641 { 642 xfree (so->sections); 643 so->sections = so->sections_end = NULL; 644 } 645 646 gdb_bfd_unref (so->abfd); 647 so->abfd = NULL; 648 649 /* Our caller closed the objfile, possibly via objfile_purge_solibs. */ 650 so->symbols_loaded = 0; 651 so->objfile = NULL; 652 653 so->addr_low = so->addr_high = 0; 654 655 /* Restore the target-supplied file name. SO_NAME may be the path 656 of the symbol file. */ 657 strcpy (so->so_name, so->so_original_name); 658 659 /* Do the same for target-specific data. */ 660 if (ops->clear_so != NULL) 661 ops->clear_so (so); 662 } 663 664 /* Free the storage associated with the `struct so_list' object SO. 665 If we have opened a BFD for SO, close it. 666 667 The caller is responsible for removing SO from whatever list it is 668 a member of. If we have placed SO's sections in some target's 669 section table, the caller is responsible for removing them. 670 671 This function doesn't mess with objfiles at all. If there is an 672 objfile associated with SO that needs to be removed, the caller is 673 responsible for taking care of that. */ 674 675 void 676 free_so (struct so_list *so) 677 { 678 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 679 680 clear_so (so); 681 ops->free_so (so); 682 683 xfree (so); 684 } 685 686 687 /* Return address of first so_list entry in master shared object list. */ 688 struct so_list * 689 master_so_list (void) 690 { 691 return so_list_head; 692 } 693 694 /* Read in symbols for shared object SO. If SYMFILE_VERBOSE is set in FLAGS, 695 be chatty about it. Return non-zero if any symbols were actually 696 loaded. */ 697 698 int 699 solib_read_symbols (struct so_list *so, int flags) 700 { 701 if (so->symbols_loaded) 702 { 703 /* If needed, we've already warned in our caller. */ 704 } 705 else if (so->abfd == NULL) 706 { 707 /* We've already warned about this library, when trying to open 708 it. */ 709 } 710 else 711 { 712 713 flags |= current_inferior ()->symfile_flags; 714 715 TRY 716 { 717 struct section_addr_info *sap; 718 719 /* Have we already loaded this shared object? */ 720 ALL_OBJFILES (so->objfile) 721 { 722 if (filename_cmp (objfile_name (so->objfile), so->so_name) == 0 723 && so->objfile->addr_low == so->addr_low) 724 break; 725 } 726 if (so->objfile == NULL) 727 { 728 sap = build_section_addr_info_from_section_table (so->sections, 729 so->sections_end); 730 so->objfile = symbol_file_add_from_bfd (so->abfd, so->so_name, 731 flags, sap, OBJF_SHARED, 732 NULL); 733 so->objfile->addr_low = so->addr_low; 734 free_section_addr_info (sap); 735 } 736 737 so->symbols_loaded = 1; 738 } 739 CATCH (e, RETURN_MASK_ERROR) 740 { 741 exception_fprintf (gdb_stderr, e, _("Error while reading shared" 742 " library symbols for %s:\n"), 743 so->so_name); 744 } 745 END_CATCH 746 747 return 1; 748 } 749 750 return 0; 751 } 752 753 /* Return 1 if KNOWN->objfile is used by any other so_list object in the 754 SO_LIST_HEAD list. Return 0 otherwise. */ 755 756 static int 757 solib_used (const struct so_list *const known) 758 { 759 const struct so_list *pivot; 760 761 for (pivot = so_list_head; pivot != NULL; pivot = pivot->next) 762 if (pivot != known && pivot->objfile == known->objfile) 763 return 1; 764 return 0; 765 } 766 767 /* Synchronize GDB's shared object list with inferior's. 768 769 Extract the list of currently loaded shared objects from the 770 inferior, and compare it with the list of shared objects currently 771 in GDB's so_list_head list. Edit so_list_head to bring it in sync 772 with the inferior's new list. 773 774 If we notice that the inferior has unloaded some shared objects, 775 free any symbolic info GDB had read about those shared objects. 776 777 Don't load symbolic info for any new shared objects; just add them 778 to the list, and leave their symbols_loaded flag clear. 779 780 If FROM_TTY is non-null, feel free to print messages about what 781 we're doing. 782 783 If TARGET is non-null, add the sections of all new shared objects 784 to TARGET's section table. Note that this doesn't remove any 785 sections for shared objects that have been unloaded, and it 786 doesn't check to see if the new shared objects are already present in 787 the section table. But we only use this for core files and 788 processes we've just attached to, so that's okay. */ 789 790 static void 791 update_solib_list (int from_tty, struct target_ops *target) 792 { 793 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 794 struct so_list *inferior = ops->current_sos(); 795 struct so_list *gdb, **gdb_link; 796 797 /* We can reach here due to changing solib-search-path or the 798 sysroot, before having any inferior. */ 799 if (target_has_execution && !ptid_equal (inferior_ptid, null_ptid)) 800 { 801 struct inferior *inf = current_inferior (); 802 803 /* If we are attaching to a running process for which we 804 have not opened a symbol file, we may be able to get its 805 symbols now! */ 806 if (inf->attach_flag && symfile_objfile == NULL) 807 catch_errors (ops->open_symbol_file_object, &from_tty, 808 "Error reading attached process's symbol file.\n", 809 RETURN_MASK_ALL); 810 } 811 812 /* GDB and the inferior's dynamic linker each maintain their own 813 list of currently loaded shared objects; we want to bring the 814 former in sync with the latter. Scan both lists, seeing which 815 shared objects appear where. There are three cases: 816 817 - A shared object appears on both lists. This means that GDB 818 knows about it already, and it's still loaded in the inferior. 819 Nothing needs to happen. 820 821 - A shared object appears only on GDB's list. This means that 822 the inferior has unloaded it. We should remove the shared 823 object from GDB's tables. 824 825 - A shared object appears only on the inferior's list. This 826 means that it's just been loaded. We should add it to GDB's 827 tables. 828 829 So we walk GDB's list, checking each entry to see if it appears 830 in the inferior's list too. If it does, no action is needed, and 831 we remove it from the inferior's list. If it doesn't, the 832 inferior has unloaded it, and we remove it from GDB's list. By 833 the time we're done walking GDB's list, the inferior's list 834 contains only the new shared objects, which we then add. */ 835 836 gdb = so_list_head; 837 gdb_link = &so_list_head; 838 while (gdb) 839 { 840 struct so_list *i = inferior; 841 struct so_list **i_link = &inferior; 842 843 /* Check to see whether the shared object *gdb also appears in 844 the inferior's current list. */ 845 while (i) 846 { 847 if (ops->same) 848 { 849 if (ops->same (gdb, i)) 850 break; 851 } 852 else 853 { 854 if (! filename_cmp (gdb->so_original_name, i->so_original_name)) 855 break; 856 } 857 858 i_link = &i->next; 859 i = *i_link; 860 } 861 862 /* If the shared object appears on the inferior's list too, then 863 it's still loaded, so we don't need to do anything. Delete 864 it from the inferior's list, and leave it on GDB's list. */ 865 if (i) 866 { 867 *i_link = i->next; 868 free_so (i); 869 gdb_link = &gdb->next; 870 gdb = *gdb_link; 871 } 872 873 /* If it's not on the inferior's list, remove it from GDB's tables. */ 874 else 875 { 876 /* Notify any observer that the shared object has been 877 unloaded before we remove it from GDB's tables. */ 878 observer_notify_solib_unloaded (gdb); 879 880 VEC_safe_push (char_ptr, current_program_space->deleted_solibs, 881 xstrdup (gdb->so_name)); 882 883 *gdb_link = gdb->next; 884 885 /* Unless the user loaded it explicitly, free SO's objfile. */ 886 if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED) 887 && !solib_used (gdb)) 888 free_objfile (gdb->objfile); 889 890 /* Some targets' section tables might be referring to 891 sections from so->abfd; remove them. */ 892 remove_target_sections (gdb); 893 894 free_so (gdb); 895 gdb = *gdb_link; 896 } 897 } 898 899 /* Now the inferior's list contains only shared objects that don't 900 appear in GDB's list --- those that are newly loaded. Add them 901 to GDB's shared object list. */ 902 if (inferior) 903 { 904 int not_found = 0; 905 const char *not_found_filename = NULL; 906 907 struct so_list *i; 908 909 /* Add the new shared objects to GDB's list. */ 910 *gdb_link = inferior; 911 912 /* Fill in the rest of each of the `struct so_list' nodes. */ 913 for (i = inferior; i; i = i->next) 914 { 915 916 i->pspace = current_program_space; 917 VEC_safe_push (so_list_ptr, current_program_space->added_solibs, i); 918 919 TRY 920 { 921 /* Fill in the rest of the `struct so_list' node. */ 922 if (!solib_map_sections (i)) 923 { 924 not_found++; 925 if (not_found_filename == NULL) 926 not_found_filename = i->so_original_name; 927 } 928 } 929 930 CATCH (e, RETURN_MASK_ERROR) 931 { 932 exception_fprintf (gdb_stderr, e, 933 _("Error while mapping shared " 934 "library sections:\n")); 935 } 936 END_CATCH 937 938 /* Notify any observer that the shared object has been 939 loaded now that we've added it to GDB's tables. */ 940 observer_notify_solib_loaded (i); 941 } 942 943 /* If a library was not found, issue an appropriate warning 944 message. We have to use a single call to warning in case the 945 front end does something special with warnings, e.g., pop up 946 a dialog box. It Would Be Nice if we could get a "warning: " 947 prefix on each line in the CLI front end, though - it doesn't 948 stand out well. */ 949 950 if (not_found == 1) 951 warning (_("Could not load shared library symbols for %s.\n" 952 "Do you need \"set solib-search-path\" " 953 "or \"set sysroot\"?"), 954 not_found_filename); 955 else if (not_found > 1) 956 warning (_("\ 957 Could not load shared library symbols for %d libraries, e.g. %s.\n\ 958 Use the \"info sharedlibrary\" command to see the complete listing.\n\ 959 Do you need \"set solib-search-path\" or \"set sysroot\"?"), 960 not_found, not_found_filename); 961 } 962 } 963 964 965 /* Return non-zero if NAME is the libpthread shared library. 966 967 Uses a fairly simplistic heuristic approach where we check 968 the file name against "/libpthread". This can lead to false 969 positives, but this should be good enough in practice. */ 970 971 int 972 libpthread_name_p (const char *name) 973 { 974 return (strstr (name, "/libpthread") != NULL); 975 } 976 977 /* Return non-zero if SO is the libpthread shared library. */ 978 979 static int 980 libpthread_solib_p (struct so_list *so) 981 { 982 return libpthread_name_p (so->so_name); 983 } 984 985 /* Read in symbolic information for any shared objects whose names 986 match PATTERN. (If we've already read a shared object's symbol 987 info, leave it alone.) If PATTERN is zero, read them all. 988 989 If READSYMS is 0, defer reading symbolic information until later 990 but still do any needed low level processing. 991 992 FROM_TTY and TARGET are as described for update_solib_list, above. */ 993 994 void 995 solib_add (const char *pattern, int from_tty, 996 struct target_ops *target, int readsyms) 997 { 998 struct so_list *gdb; 999 1000 if (print_symbol_loading_p (from_tty, 0, 0)) 1001 { 1002 if (pattern != NULL) 1003 { 1004 printf_unfiltered (_("Loading symbols for shared libraries: %s\n"), 1005 pattern); 1006 } 1007 else 1008 printf_unfiltered (_("Loading symbols for shared libraries.\n")); 1009 } 1010 1011 current_program_space->solib_add_generation++; 1012 1013 if (pattern) 1014 { 1015 char *re_err = re_comp (pattern); 1016 1017 if (re_err) 1018 error (_("Invalid regexp: %s"), re_err); 1019 } 1020 1021 update_solib_list (from_tty, target); 1022 1023 /* Walk the list of currently loaded shared libraries, and read 1024 symbols for any that match the pattern --- or any whose symbols 1025 aren't already loaded, if no pattern was given. */ 1026 { 1027 int any_matches = 0; 1028 int loaded_any_symbols = 0; 1029 const int flags = 1030 SYMFILE_DEFER_BP_RESET | (from_tty ? SYMFILE_VERBOSE : 0); 1031 1032 for (gdb = so_list_head; gdb; gdb = gdb->next) 1033 if (! pattern || re_exec (gdb->so_name)) 1034 { 1035 /* Normally, we would read the symbols from that library 1036 only if READSYMS is set. However, we're making a small 1037 exception for the pthread library, because we sometimes 1038 need the library symbols to be loaded in order to provide 1039 thread support (x86-linux for instance). */ 1040 const int add_this_solib = 1041 (readsyms || libpthread_solib_p (gdb)); 1042 1043 any_matches = 1; 1044 if (add_this_solib) 1045 { 1046 if (gdb->symbols_loaded) 1047 { 1048 /* If no pattern was given, be quiet for shared 1049 libraries we have already loaded. */ 1050 if (pattern && (from_tty || info_verbose)) 1051 printf_unfiltered (_("Symbols already loaded for %s\n"), 1052 gdb->so_name); 1053 } 1054 else if (solib_read_symbols (gdb, flags)) 1055 loaded_any_symbols = 1; 1056 } 1057 } 1058 1059 if (loaded_any_symbols) 1060 breakpoint_re_set (); 1061 1062 if (from_tty && pattern && ! any_matches) 1063 printf_unfiltered 1064 ("No loaded shared libraries match the pattern `%s'.\n", pattern); 1065 1066 if (loaded_any_symbols) 1067 { 1068 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 1069 1070 /* Getting new symbols may change our opinion about what is 1071 frameless. */ 1072 reinit_frame_cache (); 1073 1074 ops->special_symbol_handling (); 1075 } 1076 } 1077 } 1078 1079 /* Implement the "info sharedlibrary" command. Walk through the 1080 shared library list and print information about each attached 1081 library matching PATTERN. If PATTERN is elided, print them 1082 all. */ 1083 1084 static void 1085 info_sharedlibrary_command (char *pattern, int from_tty) 1086 { 1087 struct so_list *so = NULL; /* link map state variable */ 1088 int so_missing_debug_info = 0; 1089 int addr_width; 1090 int nr_libs; 1091 struct cleanup *table_cleanup; 1092 struct gdbarch *gdbarch = target_gdbarch (); 1093 struct ui_out *uiout = current_uiout; 1094 1095 if (pattern) 1096 { 1097 char *re_err = re_comp (pattern); 1098 1099 if (re_err) 1100 error (_("Invalid regexp: %s"), re_err); 1101 } 1102 1103 /* "0x", a little whitespace, and two hex digits per byte of pointers. */ 1104 addr_width = 4 + (gdbarch_ptr_bit (gdbarch) / 4); 1105 1106 update_solib_list (from_tty, 0); 1107 1108 /* make_cleanup_ui_out_table_begin_end needs to know the number of 1109 rows, so we need to make two passes over the libs. */ 1110 1111 for (nr_libs = 0, so = so_list_head; so; so = so->next) 1112 { 1113 if (so->so_name[0]) 1114 { 1115 if (pattern && ! re_exec (so->so_name)) 1116 continue; 1117 ++nr_libs; 1118 } 1119 } 1120 1121 table_cleanup = 1122 make_cleanup_ui_out_table_begin_end (uiout, 4, nr_libs, 1123 "SharedLibraryTable"); 1124 1125 /* The "- 1" is because ui_out adds one space between columns. */ 1126 ui_out_table_header (uiout, addr_width - 1, ui_left, "from", "From"); 1127 ui_out_table_header (uiout, addr_width - 1, ui_left, "to", "To"); 1128 ui_out_table_header (uiout, 12 - 1, ui_left, "syms-read", "Syms Read"); 1129 ui_out_table_header (uiout, 0, ui_noalign, 1130 "name", "Shared Object Library"); 1131 1132 ui_out_table_body (uiout); 1133 1134 for (so = so_list_head; so; so = so->next) 1135 { 1136 struct cleanup *lib_cleanup; 1137 1138 if (! so->so_name[0]) 1139 continue; 1140 if (pattern && ! re_exec (so->so_name)) 1141 continue; 1142 1143 lib_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "lib"); 1144 1145 if (so->addr_high != 0) 1146 { 1147 ui_out_field_core_addr (uiout, "from", gdbarch, so->addr_low); 1148 ui_out_field_core_addr (uiout, "to", gdbarch, so->addr_high); 1149 } 1150 else 1151 { 1152 ui_out_field_skip (uiout, "from"); 1153 ui_out_field_skip (uiout, "to"); 1154 } 1155 1156 if (! ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())) 1157 && so->symbols_loaded 1158 && !objfile_has_symbols (so->objfile)) 1159 { 1160 so_missing_debug_info = 1; 1161 ui_out_field_string (uiout, "syms-read", "Yes (*)"); 1162 } 1163 else 1164 ui_out_field_string (uiout, "syms-read", 1165 so->symbols_loaded ? "Yes" : "No"); 1166 1167 ui_out_field_string (uiout, "name", so->so_name); 1168 1169 ui_out_text (uiout, "\n"); 1170 1171 do_cleanups (lib_cleanup); 1172 } 1173 1174 do_cleanups (table_cleanup); 1175 1176 if (nr_libs == 0) 1177 { 1178 if (pattern) 1179 ui_out_message (uiout, 0, 1180 _("No shared libraries matched.\n")); 1181 else 1182 ui_out_message (uiout, 0, 1183 _("No shared libraries loaded at this time.\n")); 1184 } 1185 else 1186 { 1187 if (so_missing_debug_info) 1188 ui_out_message (uiout, 0, 1189 _("(*): Shared library is missing " 1190 "debugging information.\n")); 1191 } 1192 } 1193 1194 /* Return 1 if ADDRESS lies within SOLIB. */ 1195 1196 int 1197 solib_contains_address_p (const struct so_list *const solib, 1198 CORE_ADDR address) 1199 { 1200 struct target_section *p; 1201 1202 for (p = solib->sections; p < solib->sections_end; p++) 1203 if (p->addr <= address && address < p->endaddr) 1204 return 1; 1205 1206 return 0; 1207 } 1208 1209 /* If ADDRESS is in a shared lib in program space PSPACE, return its 1210 name. 1211 1212 Provides a hook for other gdb routines to discover whether or not a 1213 particular address is within the mapped address space of a shared 1214 library. 1215 1216 For example, this routine is called at one point to disable 1217 breakpoints which are in shared libraries that are not currently 1218 mapped in. */ 1219 1220 char * 1221 solib_name_from_address (struct program_space *pspace, CORE_ADDR address) 1222 { 1223 struct so_list *so = NULL; 1224 1225 for (so = pspace->so_list; so; so = so->next) 1226 if (solib_contains_address_p (so, address)) 1227 return (so->so_name); 1228 1229 return (0); 1230 } 1231 1232 /* Return whether the data starting at VADDR, size SIZE, must be kept 1233 in a core file for shared libraries loaded before "gcore" is used 1234 to be handled correctly when the core file is loaded. This only 1235 applies when the section would otherwise not be kept in the core 1236 file (in particular, for readonly sections). */ 1237 1238 int 1239 solib_keep_data_in_core (CORE_ADDR vaddr, unsigned long size) 1240 { 1241 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 1242 1243 if (ops->keep_data_in_core) 1244 return ops->keep_data_in_core (vaddr, size); 1245 else 1246 return 0; 1247 } 1248 1249 /* Called by free_all_symtabs */ 1250 1251 void 1252 clear_solib (void) 1253 { 1254 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 1255 1256 /* This function is expected to handle ELF shared libraries. It is 1257 also used on Solaris, which can run either ELF or a.out binaries 1258 (for compatibility with SunOS 4), both of which can use shared 1259 libraries. So we don't know whether we have an ELF executable or 1260 an a.out executable until the user chooses an executable file. 1261 1262 ELF shared libraries don't get mapped into the address space 1263 until after the program starts, so we'd better not try to insert 1264 breakpoints in them immediately. We have to wait until the 1265 dynamic linker has loaded them; we'll hit a bp_shlib_event 1266 breakpoint (look for calls to create_solib_event_breakpoint) when 1267 it's ready. 1268 1269 SunOS shared libraries seem to be different --- they're present 1270 as soon as the process begins execution, so there's no need to 1271 put off inserting breakpoints. There's also nowhere to put a 1272 bp_shlib_event breakpoint, so if we put it off, we'll never get 1273 around to it. 1274 1275 So: disable breakpoints only if we're using ELF shared libs. */ 1276 if (exec_bfd != NULL 1277 && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour) 1278 disable_breakpoints_in_shlibs (); 1279 1280 while (so_list_head) 1281 { 1282 struct so_list *so = so_list_head; 1283 1284 so_list_head = so->next; 1285 observer_notify_solib_unloaded (so); 1286 remove_target_sections (so); 1287 free_so (so); 1288 } 1289 1290 ops->clear_solib (); 1291 } 1292 1293 /* Shared library startup support. When GDB starts up the inferior, 1294 it nurses it along (through the shell) until it is ready to execute 1295 its first instruction. At this point, this function gets 1296 called. */ 1297 1298 void 1299 solib_create_inferior_hook (int from_tty) 1300 { 1301 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 1302 1303 ops->solib_create_inferior_hook (from_tty); 1304 } 1305 1306 /* Check to see if an address is in the dynamic loader's dynamic 1307 symbol resolution code. Return 1 if so, 0 otherwise. */ 1308 1309 int 1310 in_solib_dynsym_resolve_code (CORE_ADDR pc) 1311 { 1312 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 1313 1314 return ops->in_dynsym_resolve_code (pc); 1315 } 1316 1317 /* Implements the "sharedlibrary" command. */ 1318 1319 static void 1320 sharedlibrary_command (char *args, int from_tty) 1321 { 1322 dont_repeat (); 1323 solib_add (args, from_tty, (struct target_ops *) 0, 1); 1324 } 1325 1326 /* Implements the command "nosharedlibrary", which discards symbols 1327 that have been auto-loaded from shared libraries. Symbols from 1328 shared libraries that were added by explicit request of the user 1329 are not discarded. Also called from remote.c. */ 1330 1331 void 1332 no_shared_libraries (char *ignored, int from_tty) 1333 { 1334 /* The order of the two routines below is important: clear_solib notifies 1335 the solib_unloaded observers, and some of these observers might need 1336 access to their associated objfiles. Therefore, we can not purge the 1337 solibs' objfiles before clear_solib has been called. */ 1338 1339 clear_solib (); 1340 objfile_purge_solibs (); 1341 } 1342 1343 /* See solib.h. */ 1344 1345 void 1346 update_solib_breakpoints (void) 1347 { 1348 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 1349 1350 if (ops->update_breakpoints != NULL) 1351 ops->update_breakpoints (); 1352 } 1353 1354 /* See solib.h. */ 1355 1356 void 1357 handle_solib_event (void) 1358 { 1359 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 1360 1361 if (ops->handle_event != NULL) 1362 ops->handle_event (); 1363 1364 clear_program_space_solib_cache (current_inferior ()->pspace); 1365 1366 /* Check for any newly added shared libraries if we're supposed to 1367 be adding them automatically. Switch terminal for any messages 1368 produced by breakpoint_re_set. */ 1369 target_terminal_ours_for_output (); 1370 solib_add (NULL, 0, ¤t_target, auto_solib_add); 1371 target_terminal_inferior (); 1372 } 1373 1374 /* Reload shared libraries, but avoid reloading the same symbol file 1375 we already have loaded. */ 1376 1377 static void 1378 reload_shared_libraries_1 (int from_tty) 1379 { 1380 struct so_list *so; 1381 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL); 1382 1383 if (print_symbol_loading_p (from_tty, 0, 0)) 1384 printf_unfiltered (_("Loading symbols for shared libraries.\n")); 1385 1386 for (so = so_list_head; so != NULL; so = so->next) 1387 { 1388 char *filename, *found_pathname = NULL; 1389 bfd *abfd; 1390 int was_loaded = so->symbols_loaded; 1391 const int flags = 1392 SYMFILE_DEFER_BP_RESET | (from_tty ? SYMFILE_VERBOSE : 0); 1393 1394 filename = tilde_expand (so->so_original_name); 1395 make_cleanup (xfree, filename); 1396 abfd = solib_bfd_open (filename); 1397 if (abfd != NULL) 1398 { 1399 found_pathname = xstrdup (bfd_get_filename (abfd)); 1400 make_cleanup (xfree, found_pathname); 1401 gdb_bfd_unref (abfd); 1402 } 1403 1404 /* If this shared library is no longer associated with its previous 1405 symbol file, close that. */ 1406 if ((found_pathname == NULL && was_loaded) 1407 || (found_pathname != NULL 1408 && filename_cmp (found_pathname, so->so_name) != 0)) 1409 { 1410 if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED) 1411 && !solib_used (so)) 1412 free_objfile (so->objfile); 1413 remove_target_sections (so); 1414 clear_so (so); 1415 } 1416 1417 /* If this shared library is now associated with a new symbol 1418 file, open it. */ 1419 if (found_pathname != NULL 1420 && (!was_loaded 1421 || filename_cmp (found_pathname, so->so_name) != 0)) 1422 { 1423 int got_error = 0; 1424 1425 TRY 1426 { 1427 solib_map_sections (so); 1428 } 1429 1430 CATCH (e, RETURN_MASK_ERROR) 1431 { 1432 exception_fprintf (gdb_stderr, e, 1433 _("Error while mapping " 1434 "shared library sections:\n")); 1435 got_error = 1; 1436 } 1437 END_CATCH 1438 1439 if (!got_error 1440 && (auto_solib_add || was_loaded || libpthread_solib_p (so))) 1441 solib_read_symbols (so, flags); 1442 } 1443 } 1444 1445 do_cleanups (old_chain); 1446 } 1447 1448 static void 1449 reload_shared_libraries (char *ignored, int from_tty, 1450 struct cmd_list_element *e) 1451 { 1452 const struct target_so_ops *ops; 1453 1454 reload_shared_libraries_1 (from_tty); 1455 1456 ops = solib_ops (target_gdbarch ()); 1457 1458 /* Creating inferior hooks here has two purposes. First, if we reload 1459 shared libraries then the address of solib breakpoint we've computed 1460 previously might be no longer valid. For example, if we forgot to set 1461 solib-absolute-prefix and are setting it right now, then the previous 1462 breakpoint address is plain wrong. Second, installing solib hooks 1463 also implicitly figures were ld.so is and loads symbols for it. 1464 Absent this call, if we've just connected to a target and set 1465 solib-absolute-prefix or solib-search-path, we'll lose all information 1466 about ld.so. */ 1467 if (target_has_execution) 1468 { 1469 /* Reset or free private data structures not associated with 1470 so_list entries. */ 1471 ops->clear_solib (); 1472 1473 /* Remove any previous solib event breakpoint. This is usually 1474 done in common code, at breakpoint_init_inferior time, but 1475 we're not really starting up the inferior here. */ 1476 remove_solib_event_breakpoints (); 1477 1478 solib_create_inferior_hook (from_tty); 1479 } 1480 1481 /* Sometimes the platform-specific hook loads initial shared 1482 libraries, and sometimes it doesn't. If it doesn't FROM_TTY will be 1483 incorrectly 0 but such solib targets should be fixed anyway. If we 1484 made all the inferior hook methods consistent, this call could be 1485 removed. Call it only after the solib target has been initialized by 1486 solib_create_inferior_hook. */ 1487 1488 solib_add (NULL, 0, NULL, auto_solib_add); 1489 1490 breakpoint_re_set (); 1491 1492 /* We may have loaded or unloaded debug info for some (or all) 1493 shared libraries. However, frames may still reference them. For 1494 example, a frame's unwinder might still point at DWARF FDE 1495 structures that are now freed. Also, getting new symbols may 1496 change our opinion about what is frameless. */ 1497 reinit_frame_cache (); 1498 1499 ops->special_symbol_handling (); 1500 } 1501 1502 /* Wrapper for reload_shared_libraries that replaces "remote:" 1503 at the start of gdb_sysroot with "target:". */ 1504 1505 static void 1506 gdb_sysroot_changed (char *ignored, int from_tty, 1507 struct cmd_list_element *e) 1508 { 1509 const char *old_prefix = "remote:"; 1510 const char *new_prefix = TARGET_SYSROOT_PREFIX; 1511 1512 if (startswith (gdb_sysroot, old_prefix)) 1513 { 1514 static int warning_issued = 0; 1515 1516 gdb_assert (strlen (old_prefix) == strlen (new_prefix)); 1517 memcpy (gdb_sysroot, new_prefix, strlen (new_prefix)); 1518 1519 if (!warning_issued) 1520 { 1521 warning (_("\"%s\" is deprecated, use \"%s\" instead."), 1522 old_prefix, new_prefix); 1523 warning (_("sysroot set to \"%s\"."), gdb_sysroot); 1524 1525 warning_issued = 1; 1526 } 1527 } 1528 1529 reload_shared_libraries (ignored, from_tty, e); 1530 } 1531 1532 static void 1533 show_auto_solib_add (struct ui_file *file, int from_tty, 1534 struct cmd_list_element *c, const char *value) 1535 { 1536 fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"), 1537 value); 1538 } 1539 1540 1541 /* Handler for library-specific lookup of global symbol NAME in OBJFILE. Call 1542 the library-specific handler if it is installed for the current target. */ 1543 1544 struct block_symbol 1545 solib_global_lookup (struct objfile *objfile, 1546 const char *name, 1547 const domain_enum domain) 1548 { 1549 const struct target_so_ops *ops = solib_ops (target_gdbarch ()); 1550 1551 if (ops->lookup_lib_global_symbol != NULL) 1552 return ops->lookup_lib_global_symbol (objfile, name, domain); 1553 return (struct block_symbol) {NULL, NULL}; 1554 } 1555 1556 /* Lookup the value for a specific symbol from dynamic symbol table. Look 1557 up symbol from ABFD. MATCH_SYM is a callback function to determine 1558 whether to pick up a symbol. DATA is the input of this callback 1559 function. Return NULL if symbol is not found. */ 1560 1561 CORE_ADDR 1562 gdb_bfd_lookup_symbol_from_symtab (bfd *abfd, 1563 int (*match_sym) (const asymbol *, 1564 const void *), 1565 const void *data) 1566 { 1567 long storage_needed = bfd_get_symtab_upper_bound (abfd); 1568 CORE_ADDR symaddr = 0; 1569 1570 if (storage_needed > 0) 1571 { 1572 unsigned int i; 1573 1574 asymbol **symbol_table = (asymbol **) xmalloc (storage_needed); 1575 struct cleanup *back_to = make_cleanup (xfree, symbol_table); 1576 unsigned int number_of_symbols = 1577 bfd_canonicalize_symtab (abfd, symbol_table); 1578 1579 for (i = 0; i < number_of_symbols; i++) 1580 { 1581 asymbol *sym = *symbol_table++; 1582 1583 if (match_sym (sym, data)) 1584 { 1585 struct gdbarch *gdbarch = target_gdbarch (); 1586 symaddr = sym->value; 1587 1588 /* Some ELF targets fiddle with addresses of symbols they 1589 consider special. They use minimal symbols to do that 1590 and this is needed for correct breakpoint placement, 1591 but we do not have full data here to build a complete 1592 minimal symbol, so just set the address and let the 1593 targets cope with that. */ 1594 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour 1595 && gdbarch_elf_make_msymbol_special_p (gdbarch)) 1596 { 1597 struct minimal_symbol msym; 1598 1599 memset (&msym, 0, sizeof (msym)); 1600 SET_MSYMBOL_VALUE_ADDRESS (&msym, symaddr); 1601 gdbarch_elf_make_msymbol_special (gdbarch, sym, &msym); 1602 symaddr = MSYMBOL_VALUE_RAW_ADDRESS (&msym); 1603 } 1604 1605 /* BFD symbols are section relative. */ 1606 symaddr += sym->section->vma; 1607 break; 1608 } 1609 } 1610 do_cleanups (back_to); 1611 } 1612 1613 return symaddr; 1614 } 1615 1616 /* Lookup the value for a specific symbol from symbol table. Look up symbol 1617 from ABFD. MATCH_SYM is a callback function to determine whether to pick 1618 up a symbol. DATA is the input of this callback function. Return NULL 1619 if symbol is not found. */ 1620 1621 static CORE_ADDR 1622 bfd_lookup_symbol_from_dyn_symtab (bfd *abfd, 1623 int (*match_sym) (const asymbol *, 1624 const void *), 1625 const void *data) 1626 { 1627 long storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd); 1628 CORE_ADDR symaddr = 0; 1629 1630 if (storage_needed > 0) 1631 { 1632 unsigned int i; 1633 asymbol **symbol_table = (asymbol **) xmalloc (storage_needed); 1634 struct cleanup *back_to = make_cleanup (xfree, symbol_table); 1635 unsigned int number_of_symbols = 1636 bfd_canonicalize_dynamic_symtab (abfd, symbol_table); 1637 1638 for (i = 0; i < number_of_symbols; i++) 1639 { 1640 asymbol *sym = *symbol_table++; 1641 1642 if (match_sym (sym, data)) 1643 { 1644 /* BFD symbols are section relative. */ 1645 symaddr = sym->value + sym->section->vma; 1646 break; 1647 } 1648 } 1649 do_cleanups (back_to); 1650 } 1651 return symaddr; 1652 } 1653 1654 /* Lookup the value for a specific symbol from symbol table and dynamic 1655 symbol table. Look up symbol from ABFD. MATCH_SYM is a callback 1656 function to determine whether to pick up a symbol. DATA is the 1657 input of this callback function. Return NULL if symbol is not 1658 found. */ 1659 1660 CORE_ADDR 1661 gdb_bfd_lookup_symbol (bfd *abfd, 1662 int (*match_sym) (const asymbol *, const void *), 1663 const void *data) 1664 { 1665 CORE_ADDR symaddr = gdb_bfd_lookup_symbol_from_symtab (abfd, match_sym, data); 1666 1667 /* On FreeBSD, the dynamic linker is stripped by default. So we'll 1668 have to check the dynamic string table too. */ 1669 if (symaddr == 0) 1670 symaddr = bfd_lookup_symbol_from_dyn_symtab (abfd, match_sym, data); 1671 1672 return symaddr; 1673 } 1674 1675 /* SO_LIST_HEAD may contain user-loaded object files that can be removed 1676 out-of-band by the user. So upon notification of free_objfile remove 1677 all references to any user-loaded file that is about to be freed. */ 1678 1679 static void 1680 remove_user_added_objfile (struct objfile *objfile) 1681 { 1682 struct so_list *so; 1683 1684 if (objfile != 0 && objfile->flags & OBJF_USERLOADED) 1685 { 1686 for (so = so_list_head; so != NULL; so = so->next) 1687 if (so->objfile == objfile) 1688 so->objfile = NULL; 1689 } 1690 } 1691 1692 extern initialize_file_ftype _initialize_solib; /* -Wmissing-prototypes */ 1693 1694 void 1695 _initialize_solib (void) 1696 { 1697 solib_data = gdbarch_data_register_pre_init (solib_init); 1698 1699 observer_attach_free_objfile (remove_user_added_objfile); 1700 1701 add_com ("sharedlibrary", class_files, sharedlibrary_command, 1702 _("Load shared object library symbols for files matching REGEXP.")); 1703 add_info ("sharedlibrary", info_sharedlibrary_command, 1704 _("Status of loaded shared object libraries.")); 1705 add_info_alias ("dll", "sharedlibrary", 1); 1706 add_com ("nosharedlibrary", class_files, no_shared_libraries, 1707 _("Unload all shared object library symbols.")); 1708 1709 add_setshow_boolean_cmd ("auto-solib-add", class_support, 1710 &auto_solib_add, _("\ 1711 Set autoloading of shared library symbols."), _("\ 1712 Show autoloading of shared library symbols."), _("\ 1713 If \"on\", symbols from all shared object libraries will be loaded\n\ 1714 automatically when the inferior begins execution, when the dynamic linker\n\ 1715 informs gdb that a new library has been loaded, or when attaching to the\n\ 1716 inferior. Otherwise, symbols must be loaded manually, using \ 1717 `sharedlibrary'."), 1718 NULL, 1719 show_auto_solib_add, 1720 &setlist, &showlist); 1721 1722 add_setshow_optional_filename_cmd ("sysroot", class_support, 1723 &gdb_sysroot, _("\ 1724 Set an alternate system root."), _("\ 1725 Show the current system root."), _("\ 1726 The system root is used to load absolute shared library symbol files.\n\ 1727 For other (relative) files, you can add directories using\n\ 1728 `set solib-search-path'."), 1729 gdb_sysroot_changed, 1730 NULL, 1731 &setlist, &showlist); 1732 1733 add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0, 1734 &setlist); 1735 add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0, 1736 &showlist); 1737 1738 add_setshow_optional_filename_cmd ("solib-search-path", class_support, 1739 &solib_search_path, _("\ 1740 Set the search path for loading non-absolute shared library symbol files."), 1741 _("\ 1742 Show the search path for loading non-absolute shared library symbol files."), 1743 _("\ 1744 This takes precedence over the environment variables \ 1745 PATH and LD_LIBRARY_PATH."), 1746 reload_shared_libraries, 1747 show_solib_search_path, 1748 &setlist, &showlist); 1749 } 1750