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