1 /* Handle SVR4 shared libraries for GDB, the GNU Debugger. 2 3 Copyright (C) 1990-2023 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 "elf/external.h" 23 #include "elf/common.h" 24 #include "elf/mips.h" 25 26 #include "symtab.h" 27 #include "bfd.h" 28 #include "symfile.h" 29 #include "objfiles.h" 30 #include "gdbcore.h" 31 #include "target.h" 32 #include "inferior.h" 33 #include "infrun.h" 34 #include "regcache.h" 35 #include "gdbthread.h" 36 #include "observable.h" 37 38 #include "solist.h" 39 #include "solib.h" 40 #include "solib-svr4.h" 41 42 #include "bfd-target.h" 43 #include "elf-bfd.h" 44 #include "exec.h" 45 #include "auxv.h" 46 #include "gdb_bfd.h" 47 #include "probe.h" 48 49 #include <map> 50 51 static struct link_map_offsets *svr4_fetch_link_map_offsets (void); 52 static int svr4_have_link_map_offsets (void); 53 static void svr4_relocate_main_executable (void); 54 static void svr4_free_library_list (so_list *solist); 55 static void probes_table_remove_objfile_probes (struct objfile *objfile); 56 static void svr4_iterate_over_objfiles_in_search_order 57 (gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, 58 objfile *current_objfile); 59 60 61 /* On SVR4 systems, a list of symbols in the dynamic linker where 62 GDB can try to place a breakpoint to monitor shared library 63 events. 64 65 If none of these symbols are found, or other errors occur, then 66 SVR4 systems will fall back to using a symbol as the "startup 67 mapping complete" breakpoint address. */ 68 69 static const char * const solib_break_names[] = 70 { 71 "r_debug_state", 72 "_r_debug_state", 73 "_dl_debug_state", 74 "rtld_db_dlactivity", 75 "__dl_rtld_db_dlactivity", 76 "_rtld_debug_state", 77 78 NULL 79 }; 80 81 static const char * const bkpt_names[] = 82 { 83 "_start", 84 "__start", 85 "main", 86 NULL 87 }; 88 89 static const char * const main_name_list[] = 90 { 91 "main_$main", 92 NULL 93 }; 94 95 /* What to do when a probe stop occurs. */ 96 97 enum probe_action 98 { 99 /* Something went seriously wrong. Stop using probes and 100 revert to using the older interface. */ 101 PROBES_INTERFACE_FAILED, 102 103 /* No action is required. The shared object list is still 104 valid. */ 105 DO_NOTHING, 106 107 /* The shared object list should be reloaded entirely. */ 108 FULL_RELOAD, 109 110 /* Attempt to incrementally update the shared object list. If 111 the update fails or is not possible, fall back to reloading 112 the list in full. */ 113 UPDATE_OR_RELOAD, 114 }; 115 116 /* A probe's name and its associated action. */ 117 118 struct probe_info 119 { 120 /* The name of the probe. */ 121 const char *name; 122 123 /* What to do when a probe stop occurs. */ 124 enum probe_action action; 125 }; 126 127 /* A list of named probes and their associated actions. If all 128 probes are present in the dynamic linker then the probes-based 129 interface will be used. */ 130 131 static const struct probe_info probe_info[] = 132 { 133 { "init_start", DO_NOTHING }, 134 { "init_complete", FULL_RELOAD }, 135 { "map_start", DO_NOTHING }, 136 { "map_failed", DO_NOTHING }, 137 { "reloc_complete", UPDATE_OR_RELOAD }, 138 { "unmap_start", DO_NOTHING }, 139 { "unmap_complete", FULL_RELOAD }, 140 }; 141 142 #define NUM_PROBES ARRAY_SIZE (probe_info) 143 144 /* Return non-zero if GDB_SO_NAME and INFERIOR_SO_NAME represent 145 the same shared library. */ 146 147 static int 148 svr4_same_1 (const char *gdb_so_name, const char *inferior_so_name) 149 { 150 if (strcmp (gdb_so_name, inferior_so_name) == 0) 151 return 1; 152 153 /* On Solaris, when starting inferior we think that dynamic linker is 154 /usr/lib/ld.so.1, but later on, the table of loaded shared libraries 155 contains /lib/ld.so.1. Sometimes one file is a link to another, but 156 sometimes they have identical content, but are not linked to each 157 other. We don't restrict this check for Solaris, but the chances 158 of running into this situation elsewhere are very low. */ 159 if (strcmp (gdb_so_name, "/usr/lib/ld.so.1") == 0 160 && strcmp (inferior_so_name, "/lib/ld.so.1") == 0) 161 return 1; 162 163 /* Similarly, we observed the same issue with amd64 and sparcv9, but with 164 different locations. */ 165 if (strcmp (gdb_so_name, "/usr/lib/amd64/ld.so.1") == 0 166 && strcmp (inferior_so_name, "/lib/amd64/ld.so.1") == 0) 167 return 1; 168 169 if (strcmp (gdb_so_name, "/usr/lib/sparcv9/ld.so.1") == 0 170 && strcmp (inferior_so_name, "/lib/sparcv9/ld.so.1") == 0) 171 return 1; 172 173 return 0; 174 } 175 176 static int 177 svr4_same (struct so_list *gdb, struct so_list *inferior) 178 { 179 if (!svr4_same_1 (gdb->so_original_name, inferior->so_original_name)) 180 return false; 181 182 /* There may be different instances of the same library, in different 183 namespaces. Each instance, however, must have been loaded at a 184 different address so its relocation offset would be different. */ 185 const lm_info_svr4 *lmg = (const lm_info_svr4 *) gdb->lm_info; 186 const lm_info_svr4 *lmi = (const lm_info_svr4 *) inferior->lm_info; 187 188 return (lmg->l_addr_inferior == lmi->l_addr_inferior); 189 } 190 191 static std::unique_ptr<lm_info_svr4> 192 lm_info_read (CORE_ADDR lm_addr) 193 { 194 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); 195 std::unique_ptr<lm_info_svr4> lm_info; 196 197 gdb::byte_vector lm (lmo->link_map_size); 198 199 if (target_read_memory (lm_addr, lm.data (), lmo->link_map_size) != 0) 200 warning (_("Error reading shared library list entry at %s"), 201 paddress (target_gdbarch (), lm_addr)); 202 else 203 { 204 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; 205 206 lm_info.reset (new lm_info_svr4); 207 lm_info->lm_addr = lm_addr; 208 209 lm_info->l_addr_inferior = extract_typed_address (&lm[lmo->l_addr_offset], 210 ptr_type); 211 lm_info->l_ld = extract_typed_address (&lm[lmo->l_ld_offset], ptr_type); 212 lm_info->l_next = extract_typed_address (&lm[lmo->l_next_offset], 213 ptr_type); 214 lm_info->l_prev = extract_typed_address (&lm[lmo->l_prev_offset], 215 ptr_type); 216 lm_info->l_name = extract_typed_address (&lm[lmo->l_name_offset], 217 ptr_type); 218 } 219 220 return lm_info; 221 } 222 223 static int 224 has_lm_dynamic_from_link_map (void) 225 { 226 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); 227 228 return lmo->l_ld_offset >= 0; 229 } 230 231 static CORE_ADDR 232 lm_addr_check (const struct so_list *so, bfd *abfd) 233 { 234 lm_info_svr4 *li = (lm_info_svr4 *) so->lm_info; 235 236 if (!li->l_addr_p) 237 { 238 struct bfd_section *dyninfo_sect; 239 CORE_ADDR l_addr, l_dynaddr, dynaddr; 240 241 l_addr = li->l_addr_inferior; 242 243 if (! abfd || ! has_lm_dynamic_from_link_map ()) 244 goto set_addr; 245 246 l_dynaddr = li->l_ld; 247 248 dyninfo_sect = bfd_get_section_by_name (abfd, ".dynamic"); 249 if (dyninfo_sect == NULL) 250 goto set_addr; 251 252 dynaddr = bfd_section_vma (dyninfo_sect); 253 254 if (dynaddr + l_addr != l_dynaddr) 255 { 256 CORE_ADDR align = 0x1000; 257 CORE_ADDR minpagesize = align; 258 259 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) 260 { 261 Elf_Internal_Ehdr *ehdr = elf_tdata (abfd)->elf_header; 262 Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr; 263 int i; 264 265 align = 1; 266 267 for (i = 0; i < ehdr->e_phnum; i++) 268 if (phdr[i].p_type == PT_LOAD && phdr[i].p_align > align) 269 align = phdr[i].p_align; 270 271 minpagesize = get_elf_backend_data (abfd)->minpagesize; 272 } 273 274 /* Turn it into a mask. */ 275 align--; 276 277 /* If the changes match the alignment requirements, we 278 assume we're using a core file that was generated by the 279 same binary, just prelinked with a different base offset. 280 If it doesn't match, we may have a different binary, the 281 same binary with the dynamic table loaded at an unrelated 282 location, or anything, really. To avoid regressions, 283 don't adjust the base offset in the latter case, although 284 odds are that, if things really changed, debugging won't 285 quite work. 286 287 One could expect more the condition 288 ((l_addr & align) == 0 && ((l_dynaddr - dynaddr) & align) == 0) 289 but the one below is relaxed for PPC. The PPC kernel supports 290 either 4k or 64k page sizes. To be prepared for 64k pages, 291 PPC ELF files are built using an alignment requirement of 64k. 292 However, when running on a kernel supporting 4k pages, the memory 293 mapping of the library may not actually happen on a 64k boundary! 294 295 (In the usual case where (l_addr & align) == 0, this check is 296 equivalent to the possibly expected check above.) 297 298 Even on PPC it must be zero-aligned at least for MINPAGESIZE. */ 299 300 l_addr = l_dynaddr - dynaddr; 301 302 if ((l_addr & (minpagesize - 1)) == 0 303 && (l_addr & align) == ((l_dynaddr - dynaddr) & align)) 304 { 305 if (info_verbose) 306 gdb_printf (_("Using PIC (Position Independent Code) " 307 "prelink displacement %s for \"%s\".\n"), 308 paddress (target_gdbarch (), l_addr), 309 so->so_name); 310 } 311 else 312 { 313 /* There is no way to verify the library file matches. prelink 314 can during prelinking of an unprelinked file (or unprelinking 315 of a prelinked file) shift the DYNAMIC segment by arbitrary 316 offset without any page size alignment. There is no way to 317 find out the ELF header and/or Program Headers for a limited 318 verification if it they match. One could do a verification 319 of the DYNAMIC segment. Still the found address is the best 320 one GDB could find. */ 321 322 warning (_(".dynamic section for \"%s\" " 323 "is not at the expected address " 324 "(wrong library or version mismatch?)"), so->so_name); 325 } 326 } 327 328 set_addr: 329 li->l_addr = l_addr; 330 li->l_addr_p = 1; 331 } 332 333 return li->l_addr; 334 } 335 336 /* Per pspace SVR4 specific data. */ 337 338 struct svr4_info 339 { 340 svr4_info () = default; 341 ~svr4_info (); 342 343 /* Base of dynamic linker structures in default namespace. */ 344 CORE_ADDR debug_base = 0; 345 346 /* Validity flag for debug_loader_offset. */ 347 int debug_loader_offset_p = 0; 348 349 /* Load address for the dynamic linker, inferred. */ 350 CORE_ADDR debug_loader_offset = 0; 351 352 /* Name of the dynamic linker, valid if debug_loader_offset_p. */ 353 char *debug_loader_name = nullptr; 354 355 /* Load map address for the main executable in default namespace. */ 356 CORE_ADDR main_lm_addr = 0; 357 358 CORE_ADDR interp_text_sect_low = 0; 359 CORE_ADDR interp_text_sect_high = 0; 360 CORE_ADDR interp_plt_sect_low = 0; 361 CORE_ADDR interp_plt_sect_high = 0; 362 363 /* True if the list of objects was last obtained from the target 364 via qXfer:libraries-svr4:read. */ 365 bool using_xfer = false; 366 367 /* Table of struct probe_and_action instances, used by the 368 probes-based interface to map breakpoint addresses to probes 369 and their associated actions. Lookup is performed using 370 probe_and_action->prob->address. */ 371 htab_up probes_table; 372 373 /* List of objects loaded into the inferior per namespace, used by the 374 probes-based interface. 375 376 The namespace is represented by the address of its corresponding 377 r_debug[_ext] object. We get the namespace id as agrument to the 378 'reloc_complete' probe but we don't get it when scanning the load map 379 on attach. 380 381 The r_debug[_ext] objects may move when ld.so itself moves. In that 382 case, we expect also the global _r_debug to move so we can detect 383 this and reload everything. The r_debug[_ext] objects are not 384 expected to move individually. 385 386 The special entry zero is reserved for a linear list to support 387 gdbstubs that do not support namespaces. */ 388 std::map<CORE_ADDR, so_list *> solib_lists; 389 }; 390 391 /* Per-program-space data key. */ 392 static const registry<program_space>::key<svr4_info> solib_svr4_pspace_data; 393 394 /* Return whether DEBUG_BASE is the default namespace of INFO. */ 395 396 static bool 397 svr4_is_default_namespace (const svr4_info *info, CORE_ADDR debug_base) 398 { 399 return (debug_base == info->debug_base); 400 } 401 402 /* Free the probes table. */ 403 404 static void 405 free_probes_table (struct svr4_info *info) 406 { 407 info->probes_table.reset (nullptr); 408 } 409 410 /* Free the solib lists for all namespaces. */ 411 412 static void 413 free_solib_lists (svr4_info *info) 414 { 415 for (const std::pair<CORE_ADDR, so_list *> tuple 416 : info->solib_lists) 417 svr4_free_library_list (tuple.second); 418 419 info->solib_lists.clear (); 420 } 421 422 svr4_info::~svr4_info () 423 { 424 free_solib_lists (this); 425 } 426 427 /* Get the svr4 data for program space PSPACE. If none is found yet, add it now. 428 This function always returns a valid object. */ 429 430 static struct svr4_info * 431 get_svr4_info (program_space *pspace) 432 { 433 struct svr4_info *info = solib_svr4_pspace_data.get (pspace); 434 435 if (info == NULL) 436 info = solib_svr4_pspace_data.emplace (pspace); 437 438 return info; 439 } 440 441 /* Local function prototypes */ 442 443 static int match_main (const char *); 444 445 /* Read program header TYPE from inferior memory. The header is found 446 by scanning the OS auxiliary vector. 447 448 If TYPE == -1, return the program headers instead of the contents of 449 one program header. 450 451 Return vector of bytes holding the program header contents, or an empty 452 optional on failure. If successful and P_ARCH_SIZE is non-NULL, the target 453 architecture size (32-bit or 64-bit) is returned to *P_ARCH_SIZE. Likewise, 454 the base address of the section is returned in *BASE_ADDR. */ 455 456 static gdb::optional<gdb::byte_vector> 457 read_program_header (int type, int *p_arch_size, CORE_ADDR *base_addr) 458 { 459 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); 460 CORE_ADDR at_phdr, at_phent, at_phnum, pt_phdr = 0; 461 int arch_size, sect_size; 462 CORE_ADDR sect_addr; 463 int pt_phdr_p = 0; 464 465 /* Get required auxv elements from target. */ 466 if (target_auxv_search (AT_PHDR, &at_phdr) <= 0) 467 return {}; 468 if (target_auxv_search (AT_PHENT, &at_phent) <= 0) 469 return {}; 470 if (target_auxv_search (AT_PHNUM, &at_phnum) <= 0) 471 return {}; 472 if (!at_phdr || !at_phnum) 473 return {}; 474 475 /* Determine ELF architecture type. */ 476 if (at_phent == sizeof (Elf32_External_Phdr)) 477 arch_size = 32; 478 else if (at_phent == sizeof (Elf64_External_Phdr)) 479 arch_size = 64; 480 else 481 return {}; 482 483 /* Find the requested segment. */ 484 if (type == -1) 485 { 486 sect_addr = at_phdr; 487 sect_size = at_phent * at_phnum; 488 } 489 else if (arch_size == 32) 490 { 491 Elf32_External_Phdr phdr; 492 int i; 493 494 /* Search for requested PHDR. */ 495 for (i = 0; i < at_phnum; i++) 496 { 497 int p_type; 498 499 if (target_read_memory (at_phdr + i * sizeof (phdr), 500 (gdb_byte *)&phdr, sizeof (phdr))) 501 return {}; 502 503 p_type = extract_unsigned_integer ((gdb_byte *) phdr.p_type, 504 4, byte_order); 505 506 if (p_type == PT_PHDR) 507 { 508 pt_phdr_p = 1; 509 pt_phdr = extract_unsigned_integer ((gdb_byte *) phdr.p_vaddr, 510 4, byte_order); 511 } 512 513 if (p_type == type) 514 break; 515 } 516 517 if (i == at_phnum) 518 return {}; 519 520 /* Retrieve address and size. */ 521 sect_addr = extract_unsigned_integer ((gdb_byte *)phdr.p_vaddr, 522 4, byte_order); 523 sect_size = extract_unsigned_integer ((gdb_byte *)phdr.p_memsz, 524 4, byte_order); 525 } 526 else 527 { 528 Elf64_External_Phdr phdr; 529 int i; 530 531 /* Search for requested PHDR. */ 532 for (i = 0; i < at_phnum; i++) 533 { 534 int p_type; 535 536 if (target_read_memory (at_phdr + i * sizeof (phdr), 537 (gdb_byte *)&phdr, sizeof (phdr))) 538 return {}; 539 540 p_type = extract_unsigned_integer ((gdb_byte *) phdr.p_type, 541 4, byte_order); 542 543 if (p_type == PT_PHDR) 544 { 545 pt_phdr_p = 1; 546 pt_phdr = extract_unsigned_integer ((gdb_byte *) phdr.p_vaddr, 547 8, byte_order); 548 } 549 550 if (p_type == type) 551 break; 552 } 553 554 if (i == at_phnum) 555 return {}; 556 557 /* Retrieve address and size. */ 558 sect_addr = extract_unsigned_integer ((gdb_byte *)phdr.p_vaddr, 559 8, byte_order); 560 sect_size = extract_unsigned_integer ((gdb_byte *)phdr.p_memsz, 561 8, byte_order); 562 } 563 564 /* PT_PHDR is optional, but we really need it 565 for PIE to make this work in general. */ 566 567 if (pt_phdr_p) 568 { 569 /* at_phdr is real address in memory. pt_phdr is what pheader says it is. 570 Relocation offset is the difference between the two. */ 571 sect_addr = sect_addr + (at_phdr - pt_phdr); 572 } 573 574 /* Read in requested program header. */ 575 gdb::byte_vector buf (sect_size); 576 if (target_read_memory (sect_addr, buf.data (), sect_size)) 577 return {}; 578 579 #if defined(__NetBSD__) && defined(__m68k__) 580 /* 581 * XXX PR toolchain/56268 582 * 583 * For NetBSD/m68k, program header is erroneously readable from core dump, 584 * although a page containing it is missing. This spoils relocation for 585 * the main executable, and debugging with core dumps becomes impossible, 586 * as described in toolchain/56268. 587 * 588 * In order to avoid this failure, we carry out consistency check for 589 * program header; for NetBSD, 1st entry of program header refers program 590 * header itself. If this is not the case, we should be reading random 591 * garbage from core dump. 592 */ 593 if (type == -1 && arch_size == 32) 594 { 595 Elf32_External_Phdr phdr; 596 int p_type, p_filesz, p_memsz; 597 598 if (target_read_memory (at_phdr, (gdb_byte *)&phdr, sizeof (phdr))) 599 return {}; 600 601 p_type = extract_unsigned_integer ((gdb_byte *) phdr.p_type, 4, 602 byte_order); 603 p_filesz = extract_unsigned_integer ((gdb_byte *)phdr.p_filesz, 4, 604 byte_order); 605 p_memsz = extract_unsigned_integer ((gdb_byte *)phdr.p_memsz, 4, 606 byte_order); 607 608 if (p_type != PT_PHDR || p_filesz != sect_size || p_memsz != sect_size) 609 return {}; 610 } 611 #endif 612 613 if (p_arch_size) 614 *p_arch_size = arch_size; 615 if (base_addr) 616 *base_addr = sect_addr; 617 618 return buf; 619 } 620 621 622 /* Return program interpreter string. */ 623 static gdb::optional<gdb::byte_vector> 624 find_program_interpreter (void) 625 { 626 /* If we have a current exec_bfd, use its section table. */ 627 if (current_program_space->exec_bfd () 628 && (bfd_get_flavour (current_program_space->exec_bfd ()) 629 == bfd_target_elf_flavour)) 630 { 631 struct bfd_section *interp_sect; 632 633 interp_sect = bfd_get_section_by_name (current_program_space->exec_bfd (), 634 ".interp"); 635 if (interp_sect != NULL) 636 { 637 int sect_size = bfd_section_size (interp_sect); 638 639 gdb::byte_vector buf (sect_size); 640 bool res 641 = bfd_get_section_contents (current_program_space->exec_bfd (), 642 interp_sect, buf.data (), 0, sect_size); 643 if (res) 644 return buf; 645 } 646 } 647 648 /* If we didn't find it, use the target auxiliary vector. */ 649 return read_program_header (PT_INTERP, NULL, NULL); 650 } 651 652 653 /* Scan for DESIRED_DYNTAG in .dynamic section of the target's main executable, 654 found by consulting the OS auxillary vector. If DESIRED_DYNTAG is found, 1 655 is returned and the corresponding PTR is set. */ 656 657 static int 658 scan_dyntag_auxv (const int desired_dyntag, CORE_ADDR *ptr, 659 CORE_ADDR *ptr_addr) 660 { 661 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); 662 int arch_size, step; 663 long current_dyntag; 664 CORE_ADDR dyn_ptr; 665 CORE_ADDR base_addr; 666 667 /* Read in .dynamic section. */ 668 gdb::optional<gdb::byte_vector> ph_data 669 = read_program_header (PT_DYNAMIC, &arch_size, &base_addr); 670 if (!ph_data) 671 return 0; 672 673 /* Iterate over BUF and scan for DYNTAG. If found, set PTR and return. */ 674 step = (arch_size == 32) ? sizeof (Elf32_External_Dyn) 675 : sizeof (Elf64_External_Dyn); 676 for (gdb_byte *buf = ph_data->data (), *bufend = buf + ph_data->size (); 677 buf < bufend; buf += step) 678 { 679 if (arch_size == 32) 680 { 681 Elf32_External_Dyn *dynp = (Elf32_External_Dyn *) buf; 682 683 current_dyntag = extract_unsigned_integer ((gdb_byte *) dynp->d_tag, 684 4, byte_order); 685 dyn_ptr = extract_unsigned_integer ((gdb_byte *) dynp->d_un.d_ptr, 686 4, byte_order); 687 } 688 else 689 { 690 Elf64_External_Dyn *dynp = (Elf64_External_Dyn *) buf; 691 692 current_dyntag = extract_unsigned_integer ((gdb_byte *) dynp->d_tag, 693 8, byte_order); 694 dyn_ptr = extract_unsigned_integer ((gdb_byte *) dynp->d_un.d_ptr, 695 8, byte_order); 696 } 697 if (current_dyntag == DT_NULL) 698 break; 699 700 if (current_dyntag == desired_dyntag) 701 { 702 if (ptr) 703 *ptr = dyn_ptr; 704 705 if (ptr_addr) 706 *ptr_addr = base_addr + buf - ph_data->data (); 707 708 return 1; 709 } 710 } 711 712 return 0; 713 } 714 715 /* Locate the base address of dynamic linker structs for SVR4 elf 716 targets. 717 718 For SVR4 elf targets the address of the dynamic linker's runtime 719 structure is contained within the dynamic info section in the 720 executable file. The dynamic section is also mapped into the 721 inferior address space. Because the runtime loader fills in the 722 real address before starting the inferior, we have to read in the 723 dynamic info section from the inferior address space. 724 If there are any errors while trying to find the address, we 725 silently return 0, otherwise the found address is returned. */ 726 727 static CORE_ADDR 728 elf_locate_base (void) 729 { 730 struct bound_minimal_symbol msymbol; 731 CORE_ADDR dyn_ptr, dyn_ptr_addr; 732 733 if (!svr4_have_link_map_offsets ()) 734 return 0; 735 736 /* Look for DT_MIPS_RLD_MAP first. MIPS executables use this 737 instead of DT_DEBUG, although they sometimes contain an unused 738 DT_DEBUG. */ 739 if (gdb_bfd_scan_elf_dyntag (DT_MIPS_RLD_MAP, 740 current_program_space->exec_bfd (), 741 &dyn_ptr, NULL) 742 || scan_dyntag_auxv (DT_MIPS_RLD_MAP, &dyn_ptr, NULL)) 743 { 744 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; 745 gdb_byte *pbuf; 746 int pbuf_size = ptr_type->length (); 747 748 pbuf = (gdb_byte *) alloca (pbuf_size); 749 /* DT_MIPS_RLD_MAP contains a pointer to the address 750 of the dynamic link structure. */ 751 if (target_read_memory (dyn_ptr, pbuf, pbuf_size)) 752 return 0; 753 return extract_typed_address (pbuf, ptr_type); 754 } 755 756 /* Then check DT_MIPS_RLD_MAP_REL. MIPS executables now use this form 757 because of needing to support PIE. DT_MIPS_RLD_MAP will also exist 758 in non-PIE. */ 759 if (gdb_bfd_scan_elf_dyntag (DT_MIPS_RLD_MAP_REL, 760 current_program_space->exec_bfd (), 761 &dyn_ptr, &dyn_ptr_addr) 762 || scan_dyntag_auxv (DT_MIPS_RLD_MAP_REL, &dyn_ptr, &dyn_ptr_addr)) 763 { 764 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; 765 gdb_byte *pbuf; 766 int pbuf_size = ptr_type->length (); 767 768 pbuf = (gdb_byte *) alloca (pbuf_size); 769 /* DT_MIPS_RLD_MAP_REL contains an offset from the address of the 770 DT slot to the address of the dynamic link structure. */ 771 if (target_read_memory (dyn_ptr + dyn_ptr_addr, pbuf, pbuf_size)) 772 return 0; 773 return extract_typed_address (pbuf, ptr_type); 774 } 775 776 /* Find DT_DEBUG. */ 777 if (gdb_bfd_scan_elf_dyntag (DT_DEBUG, current_program_space->exec_bfd (), 778 &dyn_ptr, NULL) 779 || scan_dyntag_auxv (DT_DEBUG, &dyn_ptr, NULL)) 780 return dyn_ptr; 781 782 /* This may be a static executable. Look for the symbol 783 conventionally named _r_debug, as a last resort. */ 784 msymbol = lookup_minimal_symbol ("_r_debug", NULL, 785 current_program_space->symfile_object_file); 786 if (msymbol.minsym != NULL) 787 return msymbol.value_address (); 788 789 /* DT_DEBUG entry not found. */ 790 return 0; 791 } 792 793 /* Find the first element in the inferior's dynamic link map, and 794 return its address in the inferior. Return zero if the address 795 could not be determined. 796 797 FIXME: Perhaps we should validate the info somehow, perhaps by 798 checking r_version for a known version number, or r_state for 799 RT_CONSISTENT. */ 800 801 static CORE_ADDR 802 solib_svr4_r_map (CORE_ADDR debug_base) 803 { 804 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); 805 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; 806 CORE_ADDR addr = 0; 807 808 try 809 { 810 addr = read_memory_typed_address (debug_base + lmo->r_map_offset, 811 ptr_type); 812 } 813 catch (const gdb_exception_error &ex) 814 { 815 exception_print (gdb_stderr, ex); 816 } 817 818 return addr; 819 } 820 821 /* Find r_brk from the inferior's debug base. */ 822 823 static CORE_ADDR 824 solib_svr4_r_brk (struct svr4_info *info) 825 { 826 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); 827 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; 828 829 return read_memory_typed_address (info->debug_base + lmo->r_brk_offset, 830 ptr_type); 831 } 832 833 /* Find the link map for the dynamic linker (if it is not in the 834 normal list of loaded shared objects). */ 835 836 static CORE_ADDR 837 solib_svr4_r_ldsomap (struct svr4_info *info) 838 { 839 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); 840 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; 841 enum bfd_endian byte_order = type_byte_order (ptr_type); 842 ULONGEST version = 0; 843 844 try 845 { 846 /* Check version, and return zero if `struct r_debug' doesn't have 847 the r_ldsomap member. */ 848 version 849 = read_memory_unsigned_integer (info->debug_base + lmo->r_version_offset, 850 lmo->r_version_size, byte_order); 851 } 852 catch (const gdb_exception_error &ex) 853 { 854 exception_print (gdb_stderr, ex); 855 } 856 857 if (version < 2 || lmo->r_ldsomap_offset == -1) 858 return 0; 859 860 return read_memory_typed_address (info->debug_base + lmo->r_ldsomap_offset, 861 ptr_type); 862 } 863 864 /* Find the next namespace from the r_next field. */ 865 866 static CORE_ADDR 867 solib_svr4_r_next (CORE_ADDR debug_base) 868 { 869 link_map_offsets *lmo = svr4_fetch_link_map_offsets (); 870 type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; 871 bfd_endian byte_order = type_byte_order (ptr_type); 872 ULONGEST version = 0; 873 874 try 875 { 876 version 877 = read_memory_unsigned_integer (debug_base + lmo->r_version_offset, 878 lmo->r_version_size, byte_order); 879 } 880 catch (const gdb_exception_error &ex) 881 { 882 exception_print (gdb_stderr, ex); 883 } 884 885 /* The r_next field is added with r_version == 2. */ 886 if (version < 2 || lmo->r_next_offset == -1) 887 return 0; 888 889 return read_memory_typed_address (debug_base + lmo->r_next_offset, 890 ptr_type); 891 } 892 893 /* On Solaris systems with some versions of the dynamic linker, 894 ld.so's l_name pointer points to the SONAME in the string table 895 rather than into writable memory. So that GDB can find shared 896 libraries when loading a core file generated by gcore, ensure that 897 memory areas containing the l_name string are saved in the core 898 file. */ 899 900 static int 901 svr4_keep_data_in_core (CORE_ADDR vaddr, unsigned long size) 902 { 903 struct svr4_info *info; 904 CORE_ADDR ldsomap; 905 CORE_ADDR name_lm; 906 907 info = get_svr4_info (current_program_space); 908 909 info->debug_base = elf_locate_base (); 910 if (info->debug_base == 0) 911 return 0; 912 913 ldsomap = solib_svr4_r_ldsomap (info); 914 if (!ldsomap) 915 return 0; 916 917 std::unique_ptr<lm_info_svr4> li = lm_info_read (ldsomap); 918 name_lm = li != NULL ? li->l_name : 0; 919 920 return (name_lm >= vaddr && name_lm < vaddr + size); 921 } 922 923 /* See solist.h. */ 924 925 static int 926 open_symbol_file_object (int from_tty) 927 { 928 CORE_ADDR lm, l_name; 929 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); 930 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; 931 int l_name_size = ptr_type->length (); 932 gdb::byte_vector l_name_buf (l_name_size); 933 struct svr4_info *info = get_svr4_info (current_program_space); 934 symfile_add_flags add_flags = 0; 935 936 if (from_tty) 937 add_flags |= SYMFILE_VERBOSE; 938 939 if (current_program_space->symfile_object_file) 940 if (!query (_("Attempt to reload symbols from process? "))) 941 return 0; 942 943 /* Always locate the debug struct, in case it has moved. */ 944 info->debug_base = elf_locate_base (); 945 if (info->debug_base == 0) 946 return 0; /* failed somehow... */ 947 948 /* First link map member should be the executable. */ 949 lm = solib_svr4_r_map (info->debug_base); 950 if (lm == 0) 951 return 0; /* failed somehow... */ 952 953 /* Read address of name from target memory to GDB. */ 954 read_memory (lm + lmo->l_name_offset, l_name_buf.data (), l_name_size); 955 956 /* Convert the address to host format. */ 957 l_name = extract_typed_address (l_name_buf.data (), ptr_type); 958 959 if (l_name == 0) 960 return 0; /* No filename. */ 961 962 /* Now fetch the filename from target memory. */ 963 gdb::unique_xmalloc_ptr<char> filename 964 = target_read_string (l_name, SO_NAME_MAX_PATH_SIZE - 1); 965 966 if (filename == nullptr) 967 { 968 warning (_("failed to read exec filename from attached file")); 969 return 0; 970 } 971 972 /* Have a pathname: read the symbol file. */ 973 symbol_file_add_main (filename.get (), add_flags); 974 975 return 1; 976 } 977 978 /* Data exchange structure for the XML parser as returned by 979 svr4_current_sos_via_xfer_libraries. */ 980 981 struct svr4_library_list 982 { 983 /* The tail pointer of the current namespace. This is internal to XML 984 parsing. */ 985 so_list **tailp; 986 987 /* Inferior address of struct link_map used for the main executable. It is 988 NULL if not known. */ 989 CORE_ADDR main_lm; 990 991 /* List of objects loaded into the inferior per namespace. This does 992 not include any default sos. 993 994 See comment on struct svr4_info.solib_lists. */ 995 std::map<CORE_ADDR, so_list *> solib_lists; 996 }; 997 998 /* This module's 'free_objfile' observer. */ 999 1000 static void 1001 svr4_free_objfile_observer (struct objfile *objfile) 1002 { 1003 probes_table_remove_objfile_probes (objfile); 1004 } 1005 1006 /* Implementation for target_so_ops.free_so. */ 1007 1008 static void 1009 svr4_free_so (struct so_list *so) 1010 { 1011 lm_info_svr4 *li = (lm_info_svr4 *) so->lm_info; 1012 1013 delete li; 1014 } 1015 1016 /* Implement target_so_ops.clear_so. */ 1017 1018 static void 1019 svr4_clear_so (struct so_list *so) 1020 { 1021 lm_info_svr4 *li = (lm_info_svr4 *) so->lm_info; 1022 1023 if (li != NULL) 1024 li->l_addr_p = 0; 1025 } 1026 1027 /* Free so_list built so far. */ 1028 1029 static void 1030 svr4_free_library_list (so_list *list) 1031 { 1032 while (list != NULL) 1033 { 1034 struct so_list *next = list->next; 1035 1036 free_so (list); 1037 list = next; 1038 } 1039 } 1040 1041 /* Copy library list. */ 1042 1043 static struct so_list * 1044 svr4_copy_library_list (struct so_list *src) 1045 { 1046 struct so_list *dst = NULL; 1047 struct so_list **link = &dst; 1048 1049 while (src != NULL) 1050 { 1051 struct so_list *newobj; 1052 1053 newobj = XNEW (struct so_list); 1054 memcpy (newobj, src, sizeof (struct so_list)); 1055 1056 lm_info_svr4 *src_li = (lm_info_svr4 *) src->lm_info; 1057 newobj->lm_info = new lm_info_svr4 (*src_li); 1058 1059 newobj->next = NULL; 1060 *link = newobj; 1061 link = &newobj->next; 1062 1063 src = src->next; 1064 } 1065 1066 return dst; 1067 } 1068 1069 #ifdef HAVE_LIBEXPAT 1070 1071 #include "xml-support.h" 1072 1073 /* Handle the start of a <library> element. Note: new elements are added 1074 at the tail of the list, keeping the list in order. */ 1075 1076 static void 1077 library_list_start_library (struct gdb_xml_parser *parser, 1078 const struct gdb_xml_element *element, 1079 void *user_data, 1080 std::vector<gdb_xml_value> &attributes) 1081 { 1082 struct svr4_library_list *list = (struct svr4_library_list *) user_data; 1083 const char *name 1084 = (const char *) xml_find_attribute (attributes, "name")->value.get (); 1085 ULONGEST *lmp 1086 = (ULONGEST *) xml_find_attribute (attributes, "lm")->value.get (); 1087 ULONGEST *l_addrp 1088 = (ULONGEST *) xml_find_attribute (attributes, "l_addr")->value.get (); 1089 ULONGEST *l_ldp 1090 = (ULONGEST *) xml_find_attribute (attributes, "l_ld")->value.get (); 1091 struct so_list *new_elem; 1092 1093 new_elem = XCNEW (struct so_list); 1094 lm_info_svr4 *li = new lm_info_svr4; 1095 new_elem->lm_info = li; 1096 li->lm_addr = *lmp; 1097 li->l_addr_inferior = *l_addrp; 1098 li->l_ld = *l_ldp; 1099 1100 strncpy (new_elem->so_name, name, sizeof (new_elem->so_name) - 1); 1101 new_elem->so_name[sizeof (new_elem->so_name) - 1] = 0; 1102 strcpy (new_elem->so_original_name, new_elem->so_name); 1103 1104 /* Older versions did not supply lmid. Put the element into the flat 1105 list of the special namespace zero in that case. */ 1106 gdb_xml_value *at_lmid = xml_find_attribute (attributes, "lmid"); 1107 if (at_lmid == nullptr) 1108 { 1109 *list->tailp = new_elem; 1110 list->tailp = &new_elem->next; 1111 } 1112 else 1113 { 1114 ULONGEST lmid = *(ULONGEST *) at_lmid->value.get (); 1115 1116 /* Ensure that the element is actually initialized. */ 1117 if (list->solib_lists.find (lmid) == list->solib_lists.end ()) 1118 list->solib_lists[lmid] = nullptr; 1119 1120 so_list **psolist = &list->solib_lists[lmid]; 1121 so_list **pnext = psolist; 1122 1123 /* Walk to the end of the list if we have one. */ 1124 so_list *solist = *psolist; 1125 if (solist != nullptr) 1126 { 1127 for (; solist->next != nullptr; solist = solist->next) 1128 /* Nothing. */; 1129 1130 pnext = &solist->next; 1131 } 1132 1133 *pnext = new_elem; 1134 } 1135 } 1136 1137 /* Handle the start of a <library-list-svr4> element. */ 1138 1139 static void 1140 svr4_library_list_start_list (struct gdb_xml_parser *parser, 1141 const struct gdb_xml_element *element, 1142 void *user_data, 1143 std::vector<gdb_xml_value> &attributes) 1144 { 1145 struct svr4_library_list *list = (struct svr4_library_list *) user_data; 1146 const char *version 1147 = (const char *) xml_find_attribute (attributes, "version")->value.get (); 1148 struct gdb_xml_value *main_lm = xml_find_attribute (attributes, "main-lm"); 1149 1150 if (strcmp (version, "1.0") != 0) 1151 gdb_xml_error (parser, 1152 _("SVR4 Library list has unsupported version \"%s\""), 1153 version); 1154 1155 if (main_lm) 1156 list->main_lm = *(ULONGEST *) main_lm->value.get (); 1157 1158 /* Older gdbserver do not support namespaces. We use the special 1159 namespace zero for a linear list of libraries. */ 1160 so_list **solist = &list->solib_lists[0]; 1161 *solist = nullptr; 1162 list->tailp = solist; 1163 } 1164 1165 /* The allowed elements and attributes for an XML library list. 1166 The root element is a <library-list>. */ 1167 1168 static const struct gdb_xml_attribute svr4_library_attributes[] = 1169 { 1170 { "name", GDB_XML_AF_NONE, NULL, NULL }, 1171 { "lm", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL }, 1172 { "l_addr", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL }, 1173 { "l_ld", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL }, 1174 { "lmid", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL }, 1175 { NULL, GDB_XML_AF_NONE, NULL, NULL } 1176 }; 1177 1178 static const struct gdb_xml_element svr4_library_list_children[] = 1179 { 1180 { 1181 "library", svr4_library_attributes, NULL, 1182 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL, 1183 library_list_start_library, NULL 1184 }, 1185 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL } 1186 }; 1187 1188 static const struct gdb_xml_attribute svr4_library_list_attributes[] = 1189 { 1190 { "version", GDB_XML_AF_NONE, NULL, NULL }, 1191 { "main-lm", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL }, 1192 { NULL, GDB_XML_AF_NONE, NULL, NULL } 1193 }; 1194 1195 static const struct gdb_xml_element svr4_library_list_elements[] = 1196 { 1197 { "library-list-svr4", svr4_library_list_attributes, svr4_library_list_children, 1198 GDB_XML_EF_NONE, svr4_library_list_start_list, NULL }, 1199 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL } 1200 }; 1201 1202 /* Parse qXfer:libraries:read packet into *SO_LIST_RETURN. Return 1 if 1203 1204 Return 0 if packet not supported, *SO_LIST_RETURN is not modified in such 1205 case. Return 1 if *SO_LIST_RETURN contains the library list, it may be 1206 empty, caller is responsible for freeing all its entries. */ 1207 1208 static int 1209 svr4_parse_libraries (const char *document, struct svr4_library_list *list) 1210 { 1211 auto cleanup = make_scope_exit ([list] () 1212 { 1213 for (const std::pair<CORE_ADDR, so_list *> tuple 1214 : list->solib_lists) 1215 svr4_free_library_list (tuple.second); 1216 }); 1217 1218 list->tailp = nullptr; 1219 list->main_lm = 0; 1220 list->solib_lists.clear (); 1221 if (gdb_xml_parse_quick (_("target library list"), "library-list-svr4.dtd", 1222 svr4_library_list_elements, document, list) == 0) 1223 { 1224 /* Parsed successfully, keep the result. */ 1225 cleanup.release (); 1226 return 1; 1227 } 1228 1229 return 0; 1230 } 1231 1232 /* Attempt to get so_list from target via qXfer:libraries-svr4:read packet. 1233 1234 Return 0 if packet not supported, *SO_LIST_RETURN is not modified in such 1235 case. Return 1 if *SO_LIST_RETURN contains the library list, it may be 1236 empty, caller is responsible for freeing all its entries. 1237 1238 Note that ANNEX must be NULL if the remote does not explicitly allow 1239 qXfer:libraries-svr4:read packets with non-empty annexes. Support for 1240 this can be checked using target_augmented_libraries_svr4_read (). */ 1241 1242 static int 1243 svr4_current_sos_via_xfer_libraries (struct svr4_library_list *list, 1244 const char *annex) 1245 { 1246 gdb_assert (annex == NULL || target_augmented_libraries_svr4_read ()); 1247 1248 /* Fetch the list of shared libraries. */ 1249 gdb::optional<gdb::char_vector> svr4_library_document 1250 = target_read_stralloc (current_inferior ()->top_target (), 1251 TARGET_OBJECT_LIBRARIES_SVR4, 1252 annex); 1253 if (!svr4_library_document) 1254 return 0; 1255 1256 return svr4_parse_libraries (svr4_library_document->data (), list); 1257 } 1258 1259 #else 1260 1261 static int 1262 svr4_current_sos_via_xfer_libraries (struct svr4_library_list *list, 1263 const char *annex) 1264 { 1265 return 0; 1266 } 1267 1268 #endif 1269 1270 /* If no shared library information is available from the dynamic 1271 linker, build a fallback list from other sources. */ 1272 1273 static struct so_list * 1274 svr4_default_sos (svr4_info *info) 1275 { 1276 struct so_list *newobj; 1277 1278 if (!info->debug_loader_offset_p) 1279 return NULL; 1280 1281 newobj = XCNEW (struct so_list); 1282 lm_info_svr4 *li = new lm_info_svr4; 1283 newobj->lm_info = li; 1284 1285 /* Nothing will ever check the other fields if we set l_addr_p. */ 1286 li->l_addr = li->l_addr_inferior = info->debug_loader_offset; 1287 li->l_addr_p = 1; 1288 1289 strncpy (newobj->so_name, info->debug_loader_name, SO_NAME_MAX_PATH_SIZE - 1); 1290 newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; 1291 strcpy (newobj->so_original_name, newobj->so_name); 1292 1293 return newobj; 1294 } 1295 1296 /* Read the whole inferior libraries chain starting at address LM. 1297 Expect the first entry in the chain's previous entry to be PREV_LM. 1298 Add the entries to the tail referenced by LINK_PTR_PTR. Ignore the 1299 first entry if IGNORE_FIRST and set global MAIN_LM_ADDR according 1300 to it. Returns nonzero upon success. If zero is returned the 1301 entries stored to LINK_PTR_PTR are still valid although they may 1302 represent only part of the inferior library list. */ 1303 1304 static int 1305 svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm, 1306 struct so_list ***link_ptr_ptr, int ignore_first) 1307 { 1308 CORE_ADDR first_l_name = 0; 1309 CORE_ADDR next_lm; 1310 1311 for (; lm != 0; prev_lm = lm, lm = next_lm) 1312 { 1313 so_list_up newobj (XCNEW (struct so_list)); 1314 1315 lm_info_svr4 *li = lm_info_read (lm).release (); 1316 newobj->lm_info = li; 1317 if (li == NULL) 1318 return 0; 1319 1320 next_lm = li->l_next; 1321 1322 if (li->l_prev != prev_lm) 1323 { 1324 warning (_("Corrupted shared library list: %s != %s"), 1325 paddress (target_gdbarch (), prev_lm), 1326 paddress (target_gdbarch (), li->l_prev)); 1327 return 0; 1328 } 1329 1330 /* For SVR4 versions, the first entry in the link map is for the 1331 inferior executable, so we must ignore it. For some versions of 1332 SVR4, it has no name. For others (Solaris 2.3 for example), it 1333 does have a name, so we can no longer use a missing name to 1334 decide when to ignore it. */ 1335 if (ignore_first && li->l_prev == 0) 1336 { 1337 first_l_name = li->l_name; 1338 info->main_lm_addr = li->lm_addr; 1339 continue; 1340 } 1341 1342 /* Extract this shared object's name. */ 1343 gdb::unique_xmalloc_ptr<char> buffer 1344 = target_read_string (li->l_name, SO_NAME_MAX_PATH_SIZE - 1); 1345 if (buffer == nullptr) 1346 { 1347 /* If this entry's l_name address matches that of the 1348 inferior executable, then this is not a normal shared 1349 object, but (most likely) a vDSO. In this case, silently 1350 skip it; otherwise emit a warning. */ 1351 if (first_l_name == 0 || li->l_name != first_l_name) 1352 warning (_("Can't read pathname for load map.")); 1353 continue; 1354 } 1355 1356 strncpy (newobj->so_name, buffer.get (), SO_NAME_MAX_PATH_SIZE - 1); 1357 newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; 1358 strcpy (newobj->so_original_name, newobj->so_name); 1359 1360 /* If this entry has no name, or its name matches the name 1361 for the main executable, don't include it in the list. */ 1362 if (! newobj->so_name[0] || match_main (newobj->so_name)) 1363 continue; 1364 1365 newobj->next = 0; 1366 /* Don't free it now. */ 1367 **link_ptr_ptr = newobj.release (); 1368 *link_ptr_ptr = &(**link_ptr_ptr)->next; 1369 } 1370 1371 return 1; 1372 } 1373 1374 /* Read the full list of currently loaded shared objects directly 1375 from the inferior, without referring to any libraries read and 1376 stored by the probes interface. Handle special cases relating 1377 to the first elements of the list in default namespace. */ 1378 1379 static void 1380 svr4_current_sos_direct (struct svr4_info *info) 1381 { 1382 CORE_ADDR lm; 1383 bool ignore_first; 1384 struct svr4_library_list library_list; 1385 1386 /* Remove any old libraries. We're going to read them back in again. */ 1387 free_solib_lists (info); 1388 1389 /* Fall back to manual examination of the target if the packet is not 1390 supported or gdbserver failed to find DT_DEBUG. gdb.server/solib-list.exp 1391 tests a case where gdbserver cannot find the shared libraries list while 1392 GDB itself is able to find it via SYMFILE_OBJFILE. 1393 1394 Unfortunately statically linked inferiors will also fall back through this 1395 suboptimal code path. */ 1396 1397 info->using_xfer = svr4_current_sos_via_xfer_libraries (&library_list, 1398 NULL); 1399 if (info->using_xfer) 1400 { 1401 if (library_list.main_lm) 1402 info->main_lm_addr = library_list.main_lm; 1403 1404 /* Remove an empty special zero namespace so we know that when there 1405 is one, it is actually used, and we have a flat list without 1406 namespace information. */ 1407 if ((library_list.solib_lists.find (0) 1408 != library_list.solib_lists.end ()) 1409 && (library_list.solib_lists[0] == nullptr)) 1410 library_list.solib_lists.erase (0); 1411 1412 /* Replace the (empty) solib_lists in INFO with the one generated 1413 from the target. We don't want to copy it on assignment and then 1414 delete the original afterwards, so let's just swap the 1415 internals. */ 1416 std::swap (info->solib_lists, library_list.solib_lists); 1417 return; 1418 } 1419 1420 /* If we can't find the dynamic linker's base structure, this 1421 must not be a dynamically linked executable. Hmm. */ 1422 info->debug_base = elf_locate_base (); 1423 if (info->debug_base == 0) 1424 return; 1425 1426 /* Assume that everything is a library if the dynamic loader was loaded 1427 late by a static executable. */ 1428 if (current_program_space->exec_bfd () 1429 && bfd_get_section_by_name (current_program_space->exec_bfd (), 1430 ".dynamic") == NULL) 1431 ignore_first = false; 1432 else 1433 ignore_first = true; 1434 1435 auto cleanup = make_scope_exit ([info] () 1436 { 1437 free_solib_lists (info); 1438 }); 1439 1440 /* Collect the sos in each namespace. */ 1441 CORE_ADDR debug_base = info->debug_base; 1442 for (; debug_base != 0; 1443 ignore_first = false, debug_base = solib_svr4_r_next (debug_base)) 1444 { 1445 /* Walk the inferior's link map list, and build our so_list list. */ 1446 lm = solib_svr4_r_map (debug_base); 1447 if (lm != 0) 1448 { 1449 so_list **sos = &info->solib_lists[debug_base]; 1450 *sos = nullptr; 1451 1452 svr4_read_so_list (info, lm, 0, &sos, ignore_first); 1453 } 1454 } 1455 1456 /* On Solaris, the dynamic linker is not in the normal list of 1457 shared objects, so make sure we pick it up too. Having 1458 symbol information for the dynamic linker is quite crucial 1459 for skipping dynamic linker resolver code. 1460 1461 Note that we interpret the ldsomap load map address as 'virtual' 1462 r_debug object. If we added it to the default namespace (as it was), 1463 we would probably run into inconsistencies with the load map's 1464 prev/next links (I wonder if we did). */ 1465 debug_base = solib_svr4_r_ldsomap (info); 1466 if (debug_base != 0) 1467 { 1468 /* Add the dynamic linker's namespace unless we already did. */ 1469 if (info->solib_lists.find (debug_base) == info->solib_lists.end ()) 1470 { 1471 so_list **sos = &info->solib_lists[debug_base]; 1472 *sos = nullptr; 1473 svr4_read_so_list (info, debug_base, 0, &sos, 0); 1474 } 1475 } 1476 1477 cleanup.release (); 1478 } 1479 1480 /* Collect sos read and stored by the probes interface. */ 1481 1482 static so_list * 1483 svr4_collect_probes_sos (svr4_info *info) 1484 { 1485 so_list *sos = nullptr; 1486 so_list **pnext = &sos; 1487 1488 for (const std::pair<CORE_ADDR, so_list *> tuple 1489 : info->solib_lists) 1490 { 1491 so_list *solist = tuple.second; 1492 1493 /* Allow the linker to report empty namespaces. */ 1494 if (solist == nullptr) 1495 continue; 1496 1497 *pnext = svr4_copy_library_list (solist); 1498 1499 /* Update PNEXT to point to the next member of the last element. */ 1500 gdb_assert (*pnext != nullptr); 1501 for (;;) 1502 { 1503 so_list *next = *pnext; 1504 if (next == nullptr) 1505 break; 1506 1507 pnext = &next->next; 1508 } 1509 } 1510 1511 return sos; 1512 } 1513 1514 /* Implement the main part of the "current_sos" target_so_ops 1515 method. */ 1516 1517 static struct so_list * 1518 svr4_current_sos_1 (svr4_info *info) 1519 { 1520 so_list *sos = nullptr; 1521 1522 /* If we're using the probes interface, we can use the cache as it will 1523 be maintained by probe update/reload actions. */ 1524 if (info->probes_table != nullptr) 1525 sos = svr4_collect_probes_sos (info); 1526 1527 /* If we're not using the probes interface or if we didn't cache 1528 anything, read the sos to fill the cache, then collect them from the 1529 cache. */ 1530 if (sos == nullptr) 1531 { 1532 svr4_current_sos_direct (info); 1533 1534 sos = svr4_collect_probes_sos (info); 1535 if (sos == nullptr) 1536 sos = svr4_default_sos (info); 1537 } 1538 1539 return sos; 1540 } 1541 1542 /* Implement the "current_sos" target_so_ops method. */ 1543 1544 static struct so_list * 1545 svr4_current_sos (void) 1546 { 1547 svr4_info *info = get_svr4_info (current_program_space); 1548 struct so_list *so_head = svr4_current_sos_1 (info); 1549 struct mem_range vsyscall_range; 1550 1551 /* Filter out the vDSO module, if present. Its symbol file would 1552 not be found on disk. The vDSO/vsyscall's OBJFILE is instead 1553 managed by symfile-mem.c:add_vsyscall_page. */ 1554 if (gdbarch_vsyscall_range (target_gdbarch (), &vsyscall_range) 1555 && vsyscall_range.length != 0) 1556 { 1557 struct so_list **sop; 1558 1559 sop = &so_head; 1560 while (*sop != NULL) 1561 { 1562 struct so_list *so = *sop; 1563 1564 /* We can't simply match the vDSO by starting address alone, 1565 because lm_info->l_addr_inferior (and also l_addr) do not 1566 necessarily represent the real starting address of the 1567 ELF if the vDSO's ELF itself is "prelinked". The l_ld 1568 field (the ".dynamic" section of the shared object) 1569 always points at the absolute/resolved address though. 1570 So check whether that address is inside the vDSO's 1571 mapping instead. 1572 1573 E.g., on Linux 3.16 (x86_64) the vDSO is a regular 1574 0-based ELF, and we see: 1575 1576 (gdb) info auxv 1577 33 AT_SYSINFO_EHDR System-supplied DSO's ELF header 0x7ffff7ffb000 1578 (gdb) p/x *_r_debug.r_map.l_next 1579 $1 = {l_addr = 0x7ffff7ffb000, ..., l_ld = 0x7ffff7ffb318, ...} 1580 1581 And on Linux 2.6.32 (x86_64) we see: 1582 1583 (gdb) info auxv 1584 33 AT_SYSINFO_EHDR System-supplied DSO's ELF header 0x7ffff7ffe000 1585 (gdb) p/x *_r_debug.r_map.l_next 1586 $5 = {l_addr = 0x7ffff88fe000, ..., l_ld = 0x7ffff7ffe580, ... } 1587 1588 Dumping that vDSO shows: 1589 1590 (gdb) info proc mappings 1591 0x7ffff7ffe000 0x7ffff7fff000 0x1000 0 [vdso] 1592 (gdb) dump memory vdso.bin 0x7ffff7ffe000 0x7ffff7fff000 1593 # readelf -Wa vdso.bin 1594 [...] 1595 Entry point address: 0xffffffffff700700 1596 [...] 1597 Section Headers: 1598 [Nr] Name Type Address Off Size 1599 [ 0] NULL 0000000000000000 000000 000000 1600 [ 1] .hash HASH ffffffffff700120 000120 000038 1601 [ 2] .dynsym DYNSYM ffffffffff700158 000158 0000d8 1602 [...] 1603 [ 9] .dynamic DYNAMIC ffffffffff700580 000580 0000f0 1604 */ 1605 1606 lm_info_svr4 *li = (lm_info_svr4 *) so->lm_info; 1607 1608 if (address_in_mem_range (li->l_ld, &vsyscall_range)) 1609 { 1610 *sop = so->next; 1611 free_so (so); 1612 break; 1613 } 1614 1615 sop = &so->next; 1616 } 1617 } 1618 1619 return so_head; 1620 } 1621 1622 /* Get the address of the link_map for a given OBJFILE. */ 1623 1624 CORE_ADDR 1625 svr4_fetch_objfile_link_map (struct objfile *objfile) 1626 { 1627 struct svr4_info *info = get_svr4_info (objfile->pspace); 1628 1629 /* Cause svr4_current_sos() to be run if it hasn't been already. */ 1630 if (info->main_lm_addr == 0) 1631 solib_add (NULL, 0, auto_solib_add); 1632 1633 /* svr4_current_sos() will set main_lm_addr for the main executable. */ 1634 if (objfile == current_program_space->symfile_object_file) 1635 return info->main_lm_addr; 1636 1637 /* The other link map addresses may be found by examining the list 1638 of shared libraries. */ 1639 for (struct so_list *so : current_program_space->solibs ()) 1640 if (so->objfile == objfile) 1641 { 1642 lm_info_svr4 *li = (lm_info_svr4 *) so->lm_info; 1643 1644 return li->lm_addr; 1645 } 1646 1647 /* Not found! */ 1648 return 0; 1649 } 1650 1651 /* On some systems, the only way to recognize the link map entry for 1652 the main executable file is by looking at its name. Return 1653 non-zero iff SONAME matches one of the known main executable names. */ 1654 1655 static int 1656 match_main (const char *soname) 1657 { 1658 const char * const *mainp; 1659 1660 for (mainp = main_name_list; *mainp != NULL; mainp++) 1661 { 1662 if (strcmp (soname, *mainp) == 0) 1663 return (1); 1664 } 1665 1666 return (0); 1667 } 1668 1669 /* Return 1 if PC lies in the dynamic symbol resolution code of the 1670 SVR4 run time loader. */ 1671 1672 int 1673 svr4_in_dynsym_resolve_code (CORE_ADDR pc) 1674 { 1675 struct svr4_info *info = get_svr4_info (current_program_space); 1676 1677 return ((pc >= info->interp_text_sect_low 1678 && pc < info->interp_text_sect_high) 1679 || (pc >= info->interp_plt_sect_low 1680 && pc < info->interp_plt_sect_high) 1681 || in_plt_section (pc) 1682 || in_gnu_ifunc_stub (pc)); 1683 } 1684 1685 /* Given an executable's ABFD and target, compute the entry-point 1686 address. */ 1687 1688 static CORE_ADDR 1689 exec_entry_point (struct bfd *abfd, struct target_ops *targ) 1690 { 1691 CORE_ADDR addr; 1692 1693 /* KevinB wrote ... for most targets, the address returned by 1694 bfd_get_start_address() is the entry point for the start 1695 function. But, for some targets, bfd_get_start_address() returns 1696 the address of a function descriptor from which the entry point 1697 address may be extracted. This address is extracted by 1698 gdbarch_convert_from_func_ptr_addr(). The method 1699 gdbarch_convert_from_func_ptr_addr() is the merely the identify 1700 function for targets which don't use function descriptors. */ 1701 addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (), 1702 bfd_get_start_address (abfd), 1703 targ); 1704 return gdbarch_addr_bits_remove (target_gdbarch (), addr); 1705 } 1706 1707 /* A probe and its associated action. */ 1708 1709 struct probe_and_action 1710 { 1711 /* The probe. */ 1712 probe *prob; 1713 1714 /* The relocated address of the probe. */ 1715 CORE_ADDR address; 1716 1717 /* The action. */ 1718 enum probe_action action; 1719 1720 /* The objfile where this probe was found. */ 1721 struct objfile *objfile; 1722 }; 1723 1724 /* Returns a hash code for the probe_and_action referenced by p. */ 1725 1726 static hashval_t 1727 hash_probe_and_action (const void *p) 1728 { 1729 const struct probe_and_action *pa = (const struct probe_and_action *) p; 1730 1731 return (hashval_t) pa->address; 1732 } 1733 1734 /* Returns non-zero if the probe_and_actions referenced by p1 and p2 1735 are equal. */ 1736 1737 static int 1738 equal_probe_and_action (const void *p1, const void *p2) 1739 { 1740 const struct probe_and_action *pa1 = (const struct probe_and_action *) p1; 1741 const struct probe_and_action *pa2 = (const struct probe_and_action *) p2; 1742 1743 return pa1->address == pa2->address; 1744 } 1745 1746 /* Traversal function for probes_table_remove_objfile_probes. */ 1747 1748 static int 1749 probes_table_htab_remove_objfile_probes (void **slot, void *info) 1750 { 1751 probe_and_action *pa = (probe_and_action *) *slot; 1752 struct objfile *objfile = (struct objfile *) info; 1753 1754 if (pa->objfile == objfile) 1755 htab_clear_slot (get_svr4_info (objfile->pspace)->probes_table.get (), 1756 slot); 1757 1758 return 1; 1759 } 1760 1761 /* Remove all probes that belong to OBJFILE from the probes table. */ 1762 1763 static void 1764 probes_table_remove_objfile_probes (struct objfile *objfile) 1765 { 1766 svr4_info *info = get_svr4_info (objfile->pspace); 1767 if (info->probes_table != nullptr) 1768 htab_traverse_noresize (info->probes_table.get (), 1769 probes_table_htab_remove_objfile_probes, objfile); 1770 } 1771 1772 /* Register a solib event probe and its associated action in the 1773 probes table. */ 1774 1775 static void 1776 register_solib_event_probe (svr4_info *info, struct objfile *objfile, 1777 probe *prob, CORE_ADDR address, 1778 enum probe_action action) 1779 { 1780 struct probe_and_action lookup, *pa; 1781 void **slot; 1782 1783 /* Create the probes table, if necessary. */ 1784 if (info->probes_table == NULL) 1785 info->probes_table.reset (htab_create_alloc (1, hash_probe_and_action, 1786 equal_probe_and_action, 1787 xfree, xcalloc, xfree)); 1788 1789 lookup.address = address; 1790 slot = htab_find_slot (info->probes_table.get (), &lookup, INSERT); 1791 gdb_assert (*slot == HTAB_EMPTY_ENTRY); 1792 1793 pa = XCNEW (struct probe_and_action); 1794 pa->prob = prob; 1795 pa->address = address; 1796 pa->action = action; 1797 pa->objfile = objfile; 1798 1799 *slot = pa; 1800 } 1801 1802 /* Get the solib event probe at the specified location, and the 1803 action associated with it. Returns NULL if no solib event probe 1804 was found. */ 1805 1806 static struct probe_and_action * 1807 solib_event_probe_at (struct svr4_info *info, CORE_ADDR address) 1808 { 1809 struct probe_and_action lookup; 1810 void **slot; 1811 1812 lookup.address = address; 1813 slot = htab_find_slot (info->probes_table.get (), &lookup, NO_INSERT); 1814 1815 if (slot == NULL) 1816 return NULL; 1817 1818 return (struct probe_and_action *) *slot; 1819 } 1820 1821 /* Decide what action to take when the specified solib event probe is 1822 hit. */ 1823 1824 static enum probe_action 1825 solib_event_probe_action (struct probe_and_action *pa) 1826 { 1827 enum probe_action action; 1828 unsigned probe_argc = 0; 1829 frame_info_ptr frame = get_current_frame (); 1830 1831 action = pa->action; 1832 if (action == DO_NOTHING || action == PROBES_INTERFACE_FAILED) 1833 return action; 1834 1835 gdb_assert (action == FULL_RELOAD || action == UPDATE_OR_RELOAD); 1836 1837 /* Check that an appropriate number of arguments has been supplied. 1838 We expect: 1839 arg0: Lmid_t lmid (mandatory) 1840 arg1: struct r_debug *debug_base (mandatory) 1841 arg2: struct link_map *new (optional, for incremental updates) */ 1842 try 1843 { 1844 probe_argc = pa->prob->get_argument_count (get_frame_arch (frame)); 1845 } 1846 catch (const gdb_exception_error &ex) 1847 { 1848 exception_print (gdb_stderr, ex); 1849 probe_argc = 0; 1850 } 1851 1852 /* If get_argument_count throws an exception, probe_argc will be set 1853 to zero. However, if pa->prob does not have arguments, then 1854 get_argument_count will succeed but probe_argc will also be zero. 1855 Both cases happen because of different things, but they are 1856 treated equally here: action will be set to 1857 PROBES_INTERFACE_FAILED. */ 1858 if (probe_argc == 2) 1859 action = FULL_RELOAD; 1860 else if (probe_argc < 2) 1861 action = PROBES_INTERFACE_FAILED; 1862 1863 return action; 1864 } 1865 1866 /* Populate the shared object list by reading the entire list of 1867 shared objects from the inferior. Handle special cases relating 1868 to the first elements of the list. Returns nonzero on success. */ 1869 1870 static int 1871 solist_update_full (struct svr4_info *info) 1872 { 1873 svr4_current_sos_direct (info); 1874 1875 return 1; 1876 } 1877 1878 /* Update the shared object list starting from the link-map entry 1879 passed by the linker in the probe's third argument. Returns 1880 nonzero if the list was successfully updated, or zero to indicate 1881 failure. */ 1882 1883 static int 1884 solist_update_incremental (svr4_info *info, CORE_ADDR debug_base, 1885 CORE_ADDR lm) 1886 { 1887 /* Fall back to a full update if we are using a remote target 1888 that does not support incremental transfers. */ 1889 if (info->using_xfer && !target_augmented_libraries_svr4_read ()) 1890 return 0; 1891 1892 /* Fall back to a full update if we used the special namespace zero. We 1893 wouldn't be able to find the last item in the DEBUG_BASE namespace 1894 and hence get the prev link wrong. */ 1895 if (info->solib_lists.find (0) != info->solib_lists.end ()) 1896 return 0; 1897 1898 /* Ensure that the element is actually initialized. */ 1899 if (info->solib_lists.find (debug_base) == info->solib_lists.end ()) 1900 info->solib_lists[debug_base] = nullptr; 1901 1902 so_list **psolist = &info->solib_lists[debug_base]; 1903 so_list **pnext = nullptr; 1904 so_list *solist = *psolist; 1905 CORE_ADDR prev_lm; 1906 1907 if (solist == nullptr) 1908 { 1909 /* svr4_current_sos_direct contains logic to handle a number of 1910 special cases relating to the first elements of the list in 1911 default namespace. To avoid duplicating this logic we defer to 1912 solist_update_full in this case. */ 1913 if (svr4_is_default_namespace (info, debug_base)) 1914 return 0; 1915 1916 prev_lm = 0; 1917 pnext = psolist; 1918 } 1919 else 1920 { 1921 /* Walk to the end of the list. */ 1922 for (; solist->next != nullptr; solist = solist->next) 1923 /* Nothing. */; 1924 1925 lm_info_svr4 *li = (lm_info_svr4 *) solist->lm_info; 1926 prev_lm = li->lm_addr; 1927 pnext = &solist->next; 1928 } 1929 1930 /* Read the new objects. */ 1931 if (info->using_xfer) 1932 { 1933 struct svr4_library_list library_list; 1934 char annex[64]; 1935 1936 /* Unknown key=value pairs are ignored by the gdbstub. */ 1937 xsnprintf (annex, sizeof (annex), "lmid=%s;start=%s;prev=%s", 1938 phex_nz (debug_base, sizeof (debug_base)), 1939 phex_nz (lm, sizeof (lm)), 1940 phex_nz (prev_lm, sizeof (prev_lm))); 1941 if (!svr4_current_sos_via_xfer_libraries (&library_list, annex)) 1942 return 0; 1943 1944 /* Get the so list from the target. We replace the list in the 1945 target response so we can easily check that the response only 1946 covers one namespace. 1947 1948 We expect gdbserver to provide updates for the namespace that 1949 contains LM, which whould be this namespace... */ 1950 so_list *sos = nullptr; 1951 if (library_list.solib_lists.find (debug_base) 1952 != library_list.solib_lists.end ()) 1953 std::swap (sos, library_list.solib_lists[debug_base]); 1954 if (sos == nullptr) 1955 { 1956 /* ...or for the special zero namespace for earlier versions... */ 1957 if (library_list.solib_lists.find (0) 1958 != library_list.solib_lists.end ()) 1959 std::swap (sos, library_list.solib_lists[0]); 1960 } 1961 1962 /* ...but nothing else. */ 1963 for (const std::pair<CORE_ADDR, so_list *> tuple 1964 : library_list.solib_lists) 1965 gdb_assert (tuple.second == nullptr); 1966 1967 *pnext = sos; 1968 } 1969 else 1970 { 1971 /* IGNORE_FIRST may safely be set to zero here because the 1972 above check and deferral to solist_update_full ensures 1973 that this call to svr4_read_so_list will never see the 1974 first element. */ 1975 if (!svr4_read_so_list (info, lm, prev_lm, &pnext, 0)) 1976 return 0; 1977 } 1978 1979 return 1; 1980 } 1981 1982 /* Disable the probes-based linker interface and revert to the 1983 original interface. We don't reset the breakpoints as the 1984 ones set up for the probes-based interface are adequate. */ 1985 1986 static void 1987 disable_probes_interface (svr4_info *info) 1988 { 1989 warning (_("Probes-based dynamic linker interface failed.\n" 1990 "Reverting to original interface.")); 1991 1992 free_probes_table (info); 1993 free_solib_lists (info); 1994 } 1995 1996 /* Update the solib list as appropriate when using the 1997 probes-based linker interface. Do nothing if using the 1998 standard interface. */ 1999 2000 static void 2001 svr4_handle_solib_event (void) 2002 { 2003 struct svr4_info *info = get_svr4_info (current_program_space); 2004 struct probe_and_action *pa; 2005 enum probe_action action; 2006 struct value *val = NULL; 2007 CORE_ADDR pc, debug_base, lm = 0; 2008 frame_info_ptr frame = get_current_frame (); 2009 2010 /* Do nothing if not using the probes interface. */ 2011 if (info->probes_table == NULL) 2012 return; 2013 2014 /* If anything goes wrong we revert to the original linker 2015 interface. */ 2016 auto cleanup = make_scope_exit ([info] () 2017 { 2018 disable_probes_interface (info); 2019 }); 2020 2021 pc = regcache_read_pc (get_current_regcache ()); 2022 pa = solib_event_probe_at (info, pc); 2023 if (pa == NULL) 2024 return; 2025 2026 action = solib_event_probe_action (pa); 2027 if (action == PROBES_INTERFACE_FAILED) 2028 return; 2029 2030 if (action == DO_NOTHING) 2031 { 2032 cleanup.release (); 2033 return; 2034 } 2035 2036 /* evaluate_argument looks up symbols in the dynamic linker 2037 using find_pc_section. find_pc_section is accelerated by a cache 2038 called the section map. The section map is invalidated every 2039 time a shared library is loaded or unloaded, and if the inferior 2040 is generating a lot of shared library events then the section map 2041 will be updated every time svr4_handle_solib_event is called. 2042 We called find_pc_section in svr4_create_solib_event_breakpoints, 2043 so we can guarantee that the dynamic linker's sections are in the 2044 section map. We can therefore inhibit section map updates across 2045 these calls to evaluate_argument and save a lot of time. */ 2046 { 2047 scoped_restore inhibit_updates 2048 = inhibit_section_map_updates (current_program_space); 2049 2050 try 2051 { 2052 val = pa->prob->evaluate_argument (1, frame); 2053 } 2054 catch (const gdb_exception_error &ex) 2055 { 2056 exception_print (gdb_stderr, ex); 2057 val = NULL; 2058 } 2059 2060 if (val == NULL) 2061 return; 2062 2063 debug_base = value_as_address (val); 2064 if (debug_base == 0) 2065 return; 2066 2067 /* If the global _r_debug object moved, we need to reload everything 2068 since we cannot identify namespaces (by the location of their 2069 r_debug_ext object) anymore. */ 2070 CORE_ADDR global_debug_base = elf_locate_base (); 2071 if (global_debug_base != info->debug_base) 2072 { 2073 info->debug_base = global_debug_base; 2074 action = FULL_RELOAD; 2075 } 2076 2077 if (info->debug_base == 0) 2078 { 2079 /* It's possible for the reloc_complete probe to be triggered before 2080 the linker has set the DT_DEBUG pointer (for example, when the 2081 linker has finished relocating an LD_AUDIT library or its 2082 dependencies). Since we can't yet handle libraries from other link 2083 namespaces, we don't lose anything by ignoring them here. */ 2084 struct value *link_map_id_val; 2085 try 2086 { 2087 link_map_id_val = pa->prob->evaluate_argument (0, frame); 2088 } 2089 catch (const gdb_exception_error) 2090 { 2091 link_map_id_val = NULL; 2092 } 2093 /* glibc and illumos' libc both define LM_ID_BASE as zero. */ 2094 if (link_map_id_val != NULL && value_as_long (link_map_id_val) != 0) 2095 action = DO_NOTHING; 2096 else 2097 return; 2098 } 2099 2100 if (action == UPDATE_OR_RELOAD) 2101 { 2102 try 2103 { 2104 val = pa->prob->evaluate_argument (2, frame); 2105 } 2106 catch (const gdb_exception_error &ex) 2107 { 2108 exception_print (gdb_stderr, ex); 2109 return; 2110 } 2111 2112 if (val != NULL) 2113 lm = value_as_address (val); 2114 2115 if (lm == 0) 2116 action = FULL_RELOAD; 2117 } 2118 2119 /* Resume section map updates. Closing the scope is 2120 sufficient. */ 2121 } 2122 2123 if (action == UPDATE_OR_RELOAD) 2124 { 2125 if (!solist_update_incremental (info, debug_base, lm)) 2126 action = FULL_RELOAD; 2127 } 2128 2129 if (action == FULL_RELOAD) 2130 { 2131 if (!solist_update_full (info)) 2132 return; 2133 } 2134 2135 cleanup.release (); 2136 } 2137 2138 /* Helper function for svr4_update_solib_event_breakpoints. */ 2139 2140 static bool 2141 svr4_update_solib_event_breakpoint (struct breakpoint *b) 2142 { 2143 if (b->type != bp_shlib_event) 2144 { 2145 /* Continue iterating. */ 2146 return false; 2147 } 2148 2149 for (bp_location *loc : b->locations ()) 2150 { 2151 struct svr4_info *info; 2152 struct probe_and_action *pa; 2153 2154 info = solib_svr4_pspace_data.get (loc->pspace); 2155 if (info == NULL || info->probes_table == NULL) 2156 continue; 2157 2158 pa = solib_event_probe_at (info, loc->address); 2159 if (pa == NULL) 2160 continue; 2161 2162 if (pa->action == DO_NOTHING) 2163 { 2164 if (b->enable_state == bp_disabled && stop_on_solib_events) 2165 enable_breakpoint (b); 2166 else if (b->enable_state == bp_enabled && !stop_on_solib_events) 2167 disable_breakpoint (b); 2168 } 2169 2170 break; 2171 } 2172 2173 /* Continue iterating. */ 2174 return false; 2175 } 2176 2177 /* Enable or disable optional solib event breakpoints as appropriate. 2178 Called whenever stop_on_solib_events is changed. */ 2179 2180 static void 2181 svr4_update_solib_event_breakpoints (void) 2182 { 2183 for (breakpoint *bp : all_breakpoints_safe ()) 2184 svr4_update_solib_event_breakpoint (bp); 2185 } 2186 2187 /* Create and register solib event breakpoints. PROBES is an array 2188 of NUM_PROBES elements, each of which is vector of probes. A 2189 solib event breakpoint will be created and registered for each 2190 probe. */ 2191 2192 static void 2193 svr4_create_probe_breakpoints (svr4_info *info, struct gdbarch *gdbarch, 2194 const std::vector<probe *> *probes, 2195 struct objfile *objfile) 2196 { 2197 for (int i = 0; i < NUM_PROBES; i++) 2198 { 2199 enum probe_action action = probe_info[i].action; 2200 2201 for (probe *p : probes[i]) 2202 { 2203 CORE_ADDR address = p->get_relocated_address (objfile); 2204 2205 solib_debug_printf ("name=%s, addr=%s", probe_info[i].name, 2206 paddress (gdbarch, address)); 2207 2208 create_solib_event_breakpoint (gdbarch, address); 2209 register_solib_event_probe (info, objfile, p, address, action); 2210 } 2211 } 2212 2213 svr4_update_solib_event_breakpoints (); 2214 } 2215 2216 /* Find all the glibc named probes. Only if all of the probes are found, then 2217 create them and return true. Otherwise return false. If WITH_PREFIX is set 2218 then add "rtld" to the front of the probe names. */ 2219 static bool 2220 svr4_find_and_create_probe_breakpoints (svr4_info *info, 2221 struct gdbarch *gdbarch, 2222 struct obj_section *os, 2223 bool with_prefix) 2224 { 2225 SOLIB_SCOPED_DEBUG_START_END ("objfile=%s, with_prefix=%d", 2226 os->objfile->original_name, with_prefix); 2227 2228 std::vector<probe *> probes[NUM_PROBES]; 2229 2230 for (int i = 0; i < NUM_PROBES; i++) 2231 { 2232 const char *name = probe_info[i].name; 2233 char buf[32]; 2234 2235 /* Fedora 17 and Red Hat Enterprise Linux 6.2-6.4 shipped with an early 2236 version of the probes code in which the probes' names were prefixed 2237 with "rtld_" and the "map_failed" probe did not exist. The locations 2238 of the probes are otherwise the same, so we check for probes with 2239 prefixed names if probes with unprefixed names are not present. */ 2240 if (with_prefix) 2241 { 2242 xsnprintf (buf, sizeof (buf), "rtld_%s", name); 2243 name = buf; 2244 } 2245 2246 probes[i] = find_probes_in_objfile (os->objfile, "rtld", name); 2247 solib_debug_printf ("probe=%s, num found=%zu", name, probes[i].size ()); 2248 2249 /* Ensure at least one probe for the current name was found. */ 2250 if (probes[i].empty ()) 2251 { 2252 /* The "map_failed" probe did not exist in early versions of the 2253 probes code in which the probes' names were prefixed with 2254 "rtld_". 2255 2256 Additionally, the "map_failed" probe was accidentally removed 2257 from glibc 2.35 and 2.36, when changes in glibc meant the 2258 probe could no longer be reached, and the compiler optimized 2259 the probe away. In this case the probe name doesn't have the 2260 "rtld_" prefix. 2261 2262 To handle this, and give GDB as much flexibility as possible, 2263 we make the rule that, if a probe isn't required for the 2264 correct operation of GDB (i.e. its action is DO_NOTHING), then 2265 we will still use the probes interface, even if that probe is 2266 missing. 2267 2268 The only (possible) downside of this is that, if the user has 2269 'set stop-on-solib-events on' in effect, then they might get 2270 fewer events using the probes interface than with the classic 2271 non-probes interface. */ 2272 if (probe_info[i].action == DO_NOTHING) 2273 continue; 2274 else 2275 return false; 2276 } 2277 2278 /* Ensure probe arguments can be evaluated. */ 2279 for (probe *p : probes[i]) 2280 { 2281 if (!p->can_evaluate_arguments ()) 2282 return false; 2283 /* This will fail if the probe is invalid. This has been seen on Arm 2284 due to references to symbols that have been resolved away. */ 2285 try 2286 { 2287 p->get_argument_count (gdbarch); 2288 } 2289 catch (const gdb_exception_error &ex) 2290 { 2291 exception_print (gdb_stderr, ex); 2292 warning (_("Initializing probes-based dynamic linker interface " 2293 "failed.\nReverting to original interface.")); 2294 return false; 2295 } 2296 } 2297 } 2298 2299 /* All probes found. Now create them. */ 2300 solib_debug_printf ("using probes interface"); 2301 svr4_create_probe_breakpoints (info, gdbarch, probes, os->objfile); 2302 return true; 2303 } 2304 2305 /* Both the SunOS and the SVR4 dynamic linkers call a marker function 2306 before and after mapping and unmapping shared libraries. The sole 2307 purpose of this method is to allow debuggers to set a breakpoint so 2308 they can track these changes. 2309 2310 Some versions of the glibc dynamic linker contain named probes 2311 to allow more fine grained stopping. Given the address of the 2312 original marker function, this function attempts to find these 2313 probes, and if found, sets breakpoints on those instead. If the 2314 probes aren't found, a single breakpoint is set on the original 2315 marker function. */ 2316 2317 static void 2318 svr4_create_solib_event_breakpoints (svr4_info *info, struct gdbarch *gdbarch, 2319 CORE_ADDR address) 2320 { 2321 struct obj_section *os = find_pc_section (address); 2322 2323 if (os == nullptr 2324 || (!svr4_find_and_create_probe_breakpoints (info, gdbarch, os, false) 2325 && !svr4_find_and_create_probe_breakpoints (info, gdbarch, os, true))) 2326 { 2327 solib_debug_printf ("falling back to r_brk breakpoint: addr=%s", 2328 paddress (gdbarch, address)); 2329 create_solib_event_breakpoint (gdbarch, address); 2330 } 2331 } 2332 2333 /* Helper function for gdb_bfd_lookup_symbol. */ 2334 2335 static int 2336 cmp_name_and_sec_flags (const asymbol *sym, const void *data) 2337 { 2338 return (strcmp (sym->name, (const char *) data) == 0 2339 && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0); 2340 } 2341 /* Arrange for dynamic linker to hit breakpoint. 2342 2343 Both the SunOS and the SVR4 dynamic linkers have, as part of their 2344 debugger interface, support for arranging for the inferior to hit 2345 a breakpoint after mapping in the shared libraries. This function 2346 enables that breakpoint. 2347 2348 For SunOS, there is a special flag location (in_debugger) which we 2349 set to 1. When the dynamic linker sees this flag set, it will set 2350 a breakpoint at a location known only to itself, after saving the 2351 original contents of that place and the breakpoint address itself, 2352 in it's own internal structures. When we resume the inferior, it 2353 will eventually take a SIGTRAP when it runs into the breakpoint. 2354 We handle this (in a different place) by restoring the contents of 2355 the breakpointed location (which is only known after it stops), 2356 chasing around to locate the shared libraries that have been 2357 loaded, then resuming. 2358 2359 For SVR4, the debugger interface structure contains a member (r_brk) 2360 which is statically initialized at the time the shared library is 2361 built, to the offset of a function (_r_debug_state) which is guaran- 2362 teed to be called once before mapping in a library, and again when 2363 the mapping is complete. At the time we are examining this member, 2364 it contains only the unrelocated offset of the function, so we have 2365 to do our own relocation. Later, when the dynamic linker actually 2366 runs, it relocates r_brk to be the actual address of _r_debug_state(). 2367 2368 The debugger interface structure also contains an enumeration which 2369 is set to either RT_ADD or RT_DELETE prior to changing the mapping, 2370 depending upon whether or not the library is being mapped or unmapped, 2371 and then set to RT_CONSISTENT after the library is mapped/unmapped. */ 2372 2373 static int 2374 enable_break (struct svr4_info *info, int from_tty) 2375 { 2376 struct bound_minimal_symbol msymbol; 2377 const char * const *bkpt_namep; 2378 asection *interp_sect; 2379 CORE_ADDR sym_addr; 2380 2381 info->interp_text_sect_low = info->interp_text_sect_high = 0; 2382 info->interp_plt_sect_low = info->interp_plt_sect_high = 0; 2383 2384 /* If we already have a shared library list in the target, and 2385 r_debug contains r_brk, set the breakpoint there - this should 2386 mean r_brk has already been relocated. Assume the dynamic linker 2387 is the object containing r_brk. */ 2388 2389 solib_add (NULL, from_tty, auto_solib_add); 2390 sym_addr = 0; 2391 if (info->debug_base && solib_svr4_r_map (info->debug_base) != 0) 2392 sym_addr = solib_svr4_r_brk (info); 2393 2394 if (sym_addr != 0) 2395 { 2396 struct obj_section *os; 2397 2398 sym_addr = gdbarch_addr_bits_remove 2399 (target_gdbarch (), 2400 gdbarch_convert_from_func_ptr_addr 2401 (target_gdbarch (), sym_addr, current_inferior ()->top_target ())); 2402 2403 /* On at least some versions of Solaris there's a dynamic relocation 2404 on _r_debug.r_brk and SYM_ADDR may not be relocated yet, e.g., if 2405 we get control before the dynamic linker has self-relocated. 2406 Check if SYM_ADDR is in a known section, if it is assume we can 2407 trust its value. This is just a heuristic though, it could go away 2408 or be replaced if it's getting in the way. 2409 2410 On ARM we need to know whether the ISA of rtld_db_dlactivity (or 2411 however it's spelled in your particular system) is ARM or Thumb. 2412 That knowledge is encoded in the address, if it's Thumb the low bit 2413 is 1. However, we've stripped that info above and it's not clear 2414 what all the consequences are of passing a non-addr_bits_remove'd 2415 address to svr4_create_solib_event_breakpoints. The call to 2416 find_pc_section verifies we know about the address and have some 2417 hope of computing the right kind of breakpoint to use (via 2418 symbol info). It does mean that GDB needs to be pointed at a 2419 non-stripped version of the dynamic linker in order to obtain 2420 information it already knows about. Sigh. */ 2421 2422 os = find_pc_section (sym_addr); 2423 if (os != NULL) 2424 { 2425 /* Record the relocated start and end address of the dynamic linker 2426 text and plt section for svr4_in_dynsym_resolve_code. */ 2427 bfd *tmp_bfd; 2428 CORE_ADDR load_addr; 2429 2430 tmp_bfd = os->objfile->obfd.get (); 2431 load_addr = os->objfile->text_section_offset (); 2432 2433 interp_sect = bfd_get_section_by_name (tmp_bfd, ".text"); 2434 if (interp_sect) 2435 { 2436 info->interp_text_sect_low 2437 = bfd_section_vma (interp_sect) + load_addr; 2438 info->interp_text_sect_high 2439 = info->interp_text_sect_low + bfd_section_size (interp_sect); 2440 } 2441 interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt"); 2442 if (interp_sect) 2443 { 2444 info->interp_plt_sect_low 2445 = bfd_section_vma (interp_sect) + load_addr; 2446 info->interp_plt_sect_high 2447 = info->interp_plt_sect_low + bfd_section_size (interp_sect); 2448 } 2449 2450 svr4_create_solib_event_breakpoints (info, target_gdbarch (), sym_addr); 2451 return 1; 2452 } 2453 } 2454 2455 /* Find the program interpreter; if not found, warn the user and drop 2456 into the old breakpoint at symbol code. */ 2457 gdb::optional<gdb::byte_vector> interp_name_holder 2458 = find_program_interpreter (); 2459 if (interp_name_holder) 2460 { 2461 const char *interp_name = (const char *) interp_name_holder->data (); 2462 CORE_ADDR load_addr = 0; 2463 int load_addr_found = 0; 2464 int loader_found_in_list = 0; 2465 struct target_ops *tmp_bfd_target; 2466 2467 sym_addr = 0; 2468 2469 /* Now we need to figure out where the dynamic linker was 2470 loaded so that we can load its symbols and place a breakpoint 2471 in the dynamic linker itself. 2472 2473 This address is stored on the stack. However, I've been unable 2474 to find any magic formula to find it for Solaris (appears to 2475 be trivial on GNU/Linux). Therefore, we have to try an alternate 2476 mechanism to find the dynamic linker's base address. */ 2477 2478 gdb_bfd_ref_ptr tmp_bfd; 2479 try 2480 { 2481 tmp_bfd = solib_bfd_open (interp_name); 2482 } 2483 catch (const gdb_exception &ex) 2484 { 2485 } 2486 2487 if (tmp_bfd == NULL) 2488 goto bkpt_at_symbol; 2489 2490 /* Now convert the TMP_BFD into a target. That way target, as 2491 well as BFD operations can be used. */ 2492 tmp_bfd_target = target_bfd_reopen (tmp_bfd); 2493 2494 /* On a running target, we can get the dynamic linker's base 2495 address from the shared library table. */ 2496 for (struct so_list *so : current_program_space->solibs ()) 2497 { 2498 if (svr4_same_1 (interp_name, so->so_original_name)) 2499 { 2500 load_addr_found = 1; 2501 loader_found_in_list = 1; 2502 load_addr = lm_addr_check (so, tmp_bfd.get ()); 2503 break; 2504 } 2505 } 2506 2507 /* If we were not able to find the base address of the loader 2508 from our so_list, then try using the AT_BASE auxilliary entry. */ 2509 if (!load_addr_found) 2510 if (target_auxv_search (AT_BASE, &load_addr) > 0) 2511 { 2512 int addr_bit = gdbarch_addr_bit (target_gdbarch ()); 2513 2514 /* Ensure LOAD_ADDR has proper sign in its possible upper bits so 2515 that `+ load_addr' will overflow CORE_ADDR width not creating 2516 invalid addresses like 0x101234567 for 32bit inferiors on 64bit 2517 GDB. */ 2518 2519 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT)) 2520 { 2521 CORE_ADDR space_size = (CORE_ADDR) 1 << addr_bit; 2522 CORE_ADDR tmp_entry_point = exec_entry_point (tmp_bfd.get (), 2523 tmp_bfd_target); 2524 2525 gdb_assert (load_addr < space_size); 2526 2527 /* TMP_ENTRY_POINT exceeding SPACE_SIZE would be for prelinked 2528 64bit ld.so with 32bit executable, it should not happen. */ 2529 2530 if (tmp_entry_point < space_size 2531 && tmp_entry_point + load_addr >= space_size) 2532 load_addr -= space_size; 2533 } 2534 2535 load_addr_found = 1; 2536 } 2537 2538 /* Otherwise we find the dynamic linker's base address by examining 2539 the current pc (which should point at the entry point for the 2540 dynamic linker) and subtracting the offset of the entry point. 2541 2542 This is more fragile than the previous approaches, but is a good 2543 fallback method because it has actually been working well in 2544 most cases. */ 2545 if (!load_addr_found) 2546 { 2547 struct regcache *regcache 2548 = get_thread_arch_regcache (current_inferior ()->process_target (), 2549 inferior_ptid, target_gdbarch ()); 2550 2551 load_addr = (regcache_read_pc (regcache) 2552 - exec_entry_point (tmp_bfd.get (), tmp_bfd_target)); 2553 } 2554 2555 if (!loader_found_in_list) 2556 { 2557 info->debug_loader_name = xstrdup (interp_name); 2558 info->debug_loader_offset_p = 1; 2559 info->debug_loader_offset = load_addr; 2560 solib_add (NULL, from_tty, auto_solib_add); 2561 } 2562 2563 /* Record the relocated start and end address of the dynamic linker 2564 text and plt section for svr4_in_dynsym_resolve_code. */ 2565 interp_sect = bfd_get_section_by_name (tmp_bfd.get (), ".text"); 2566 if (interp_sect) 2567 { 2568 info->interp_text_sect_low 2569 = bfd_section_vma (interp_sect) + load_addr; 2570 info->interp_text_sect_high 2571 = info->interp_text_sect_low + bfd_section_size (interp_sect); 2572 } 2573 interp_sect = bfd_get_section_by_name (tmp_bfd.get (), ".plt"); 2574 if (interp_sect) 2575 { 2576 info->interp_plt_sect_low 2577 = bfd_section_vma (interp_sect) + load_addr; 2578 info->interp_plt_sect_high 2579 = info->interp_plt_sect_low + bfd_section_size (interp_sect); 2580 } 2581 2582 /* Now try to set a breakpoint in the dynamic linker. */ 2583 for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++) 2584 { 2585 sym_addr = gdb_bfd_lookup_symbol (tmp_bfd.get (), 2586 cmp_name_and_sec_flags, 2587 *bkpt_namep); 2588 if (sym_addr != 0) 2589 break; 2590 } 2591 2592 if (sym_addr != 0) 2593 /* Convert 'sym_addr' from a function pointer to an address. 2594 Because we pass tmp_bfd_target instead of the current 2595 target, this will always produce an unrelocated value. */ 2596 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (), 2597 sym_addr, 2598 tmp_bfd_target); 2599 2600 /* We're done with both the temporary bfd and target. Closing 2601 the target closes the underlying bfd, because it holds the 2602 only remaining reference. */ 2603 target_close (tmp_bfd_target); 2604 2605 if (sym_addr != 0) 2606 { 2607 svr4_create_solib_event_breakpoints (info, target_gdbarch (), 2608 load_addr + sym_addr); 2609 return 1; 2610 } 2611 2612 /* For whatever reason we couldn't set a breakpoint in the dynamic 2613 linker. Warn and drop into the old code. */ 2614 bkpt_at_symbol: 2615 warning (_("Unable to find dynamic linker breakpoint function.\n" 2616 "GDB will be unable to debug shared library initializers\n" 2617 "and track explicitly loaded dynamic code.")); 2618 } 2619 2620 /* Scan through the lists of symbols, trying to look up the symbol and 2621 set a breakpoint there. Terminate loop when we/if we succeed. */ 2622 2623 objfile *objf = current_program_space->symfile_object_file; 2624 for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++) 2625 { 2626 msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, objf); 2627 if ((msymbol.minsym != NULL) 2628 && (msymbol.value_address () != 0)) 2629 { 2630 sym_addr = msymbol.value_address (); 2631 sym_addr = gdbarch_convert_from_func_ptr_addr 2632 (target_gdbarch (), sym_addr, current_inferior ()->top_target ()); 2633 svr4_create_solib_event_breakpoints (info, target_gdbarch (), 2634 sym_addr); 2635 return 1; 2636 } 2637 } 2638 2639 if (interp_name_holder && !current_inferior ()->attach_flag) 2640 { 2641 for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++) 2642 { 2643 msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, objf); 2644 if ((msymbol.minsym != NULL) 2645 && (msymbol.value_address () != 0)) 2646 { 2647 sym_addr = msymbol.value_address (); 2648 sym_addr = gdbarch_convert_from_func_ptr_addr 2649 (target_gdbarch (), sym_addr, 2650 current_inferior ()->top_target ()); 2651 svr4_create_solib_event_breakpoints (info, target_gdbarch (), 2652 sym_addr); 2653 return 1; 2654 } 2655 } 2656 } 2657 return 0; 2658 } 2659 2660 /* Read the ELF program headers from ABFD. */ 2661 2662 static gdb::optional<gdb::byte_vector> 2663 read_program_headers_from_bfd (bfd *abfd) 2664 { 2665 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd); 2666 int phdrs_size = ehdr->e_phnum * ehdr->e_phentsize; 2667 if (phdrs_size == 0) 2668 return {}; 2669 2670 gdb::byte_vector buf (phdrs_size); 2671 if (bfd_seek (abfd, ehdr->e_phoff, SEEK_SET) != 0 2672 || bfd_bread (buf.data (), phdrs_size, abfd) != phdrs_size) 2673 return {}; 2674 2675 return buf; 2676 } 2677 2678 /* Return 1 and fill *DISPLACEMENTP with detected PIE offset of inferior 2679 exec_bfd. Otherwise return 0. 2680 2681 We relocate all of the sections by the same amount. This 2682 behavior is mandated by recent editions of the System V ABI. 2683 According to the System V Application Binary Interface, 2684 Edition 4.1, page 5-5: 2685 2686 ... Though the system chooses virtual addresses for 2687 individual processes, it maintains the segments' relative 2688 positions. Because position-independent code uses relative 2689 addressing between segments, the difference between 2690 virtual addresses in memory must match the difference 2691 between virtual addresses in the file. The difference 2692 between the virtual address of any segment in memory and 2693 the corresponding virtual address in the file is thus a 2694 single constant value for any one executable or shared 2695 object in a given process. This difference is the base 2696 address. One use of the base address is to relocate the 2697 memory image of the program during dynamic linking. 2698 2699 The same language also appears in Edition 4.0 of the System V 2700 ABI and is left unspecified in some of the earlier editions. 2701 2702 Decide if the objfile needs to be relocated. As indicated above, we will 2703 only be here when execution is stopped. But during attachment PC can be at 2704 arbitrary address therefore regcache_read_pc can be misleading (contrary to 2705 the auxv AT_ENTRY value). Moreover for executable with interpreter section 2706 regcache_read_pc would point to the interpreter and not the main executable. 2707 2708 So, to summarize, relocations are necessary when the start address obtained 2709 from the executable is different from the address in auxv AT_ENTRY entry. 2710 2711 [ The astute reader will note that we also test to make sure that 2712 the executable in question has the DYNAMIC flag set. It is my 2713 opinion that this test is unnecessary (undesirable even). It 2714 was added to avoid inadvertent relocation of an executable 2715 whose e_type member in the ELF header is not ET_DYN. There may 2716 be a time in the future when it is desirable to do relocations 2717 on other types of files as well in which case this condition 2718 should either be removed or modified to accomodate the new file 2719 type. - Kevin, Nov 2000. ] */ 2720 2721 static int 2722 svr4_exec_displacement (CORE_ADDR *displacementp) 2723 { 2724 /* ENTRY_POINT is a possible function descriptor - before 2725 a call to gdbarch_convert_from_func_ptr_addr. */ 2726 CORE_ADDR entry_point, exec_displacement; 2727 2728 if (current_program_space->exec_bfd () == NULL) 2729 return 0; 2730 2731 /* Therefore for ELF it is ET_EXEC and not ET_DYN. Both shared libraries 2732 being executed themselves and PIE (Position Independent Executable) 2733 executables are ET_DYN. */ 2734 2735 if ((bfd_get_file_flags (current_program_space->exec_bfd ()) & DYNAMIC) == 0) 2736 return 0; 2737 2738 if (target_auxv_search (AT_ENTRY, &entry_point) <= 0) 2739 return 0; 2740 2741 exec_displacement 2742 = entry_point - bfd_get_start_address (current_program_space->exec_bfd ()); 2743 2744 /* Verify the EXEC_DISPLACEMENT candidate complies with the required page 2745 alignment. It is cheaper than the program headers comparison below. */ 2746 2747 if (bfd_get_flavour (current_program_space->exec_bfd ()) 2748 == bfd_target_elf_flavour) 2749 { 2750 const struct elf_backend_data *elf 2751 = get_elf_backend_data (current_program_space->exec_bfd ()); 2752 2753 /* p_align of PT_LOAD segments does not specify any alignment but 2754 only congruency of addresses: 2755 p_offset % p_align == p_vaddr % p_align 2756 Kernel is free to load the executable with lower alignment. */ 2757 2758 if ((exec_displacement & (elf->minpagesize - 1)) != 0) 2759 return 0; 2760 } 2761 2762 /* Verify that the auxilliary vector describes the same file as exec_bfd, by 2763 comparing their program headers. If the program headers in the auxilliary 2764 vector do not match the program headers in the executable, then we are 2765 looking at a different file than the one used by the kernel - for 2766 instance, "gdb program" connected to "gdbserver :PORT ld.so program". */ 2767 2768 if (bfd_get_flavour (current_program_space->exec_bfd ()) 2769 == bfd_target_elf_flavour) 2770 { 2771 /* Be optimistic and return 0 only if GDB was able to verify the headers 2772 really do not match. */ 2773 int arch_size; 2774 2775 gdb::optional<gdb::byte_vector> phdrs_target 2776 = read_program_header (-1, &arch_size, NULL); 2777 gdb::optional<gdb::byte_vector> phdrs_binary 2778 = read_program_headers_from_bfd (current_program_space->exec_bfd ()); 2779 if (phdrs_target && phdrs_binary) 2780 { 2781 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); 2782 2783 /* We are dealing with three different addresses. EXEC_BFD 2784 represents current address in on-disk file. target memory content 2785 may be different from EXEC_BFD as the file may have been prelinked 2786 to a different address after the executable has been loaded. 2787 Moreover the address of placement in target memory can be 2788 different from what the program headers in target memory say - 2789 this is the goal of PIE. 2790 2791 Detected DISPLACEMENT covers both the offsets of PIE placement and 2792 possible new prelink performed after start of the program. Here 2793 relocate BUF and BUF2 just by the EXEC_BFD vs. target memory 2794 content offset for the verification purpose. */ 2795 2796 if (phdrs_target->size () != phdrs_binary->size () 2797 || bfd_get_arch_size (current_program_space->exec_bfd ()) != arch_size) 2798 return 0; 2799 else if (arch_size == 32 2800 && phdrs_target->size () >= sizeof (Elf32_External_Phdr) 2801 && phdrs_target->size () % sizeof (Elf32_External_Phdr) == 0) 2802 { 2803 Elf_Internal_Ehdr *ehdr2 2804 = elf_tdata (current_program_space->exec_bfd ())->elf_header; 2805 Elf_Internal_Phdr *phdr2 2806 = elf_tdata (current_program_space->exec_bfd ())->phdr; 2807 CORE_ADDR displacement = 0; 2808 int i; 2809 2810 /* DISPLACEMENT could be found more easily by the difference of 2811 ehdr2->e_entry. But we haven't read the ehdr yet, and we 2812 already have enough information to compute that displacement 2813 with what we've read. */ 2814 2815 for (i = 0; i < ehdr2->e_phnum; i++) 2816 if (phdr2[i].p_type == PT_LOAD) 2817 { 2818 Elf32_External_Phdr *phdrp; 2819 gdb_byte *buf_vaddr_p, *buf_paddr_p; 2820 CORE_ADDR vaddr, paddr; 2821 CORE_ADDR displacement_vaddr = 0; 2822 CORE_ADDR displacement_paddr = 0; 2823 2824 phdrp = &((Elf32_External_Phdr *) phdrs_target->data ())[i]; 2825 buf_vaddr_p = (gdb_byte *) &phdrp->p_vaddr; 2826 buf_paddr_p = (gdb_byte *) &phdrp->p_paddr; 2827 2828 vaddr = extract_unsigned_integer (buf_vaddr_p, 4, 2829 byte_order); 2830 displacement_vaddr = vaddr - phdr2[i].p_vaddr; 2831 2832 paddr = extract_unsigned_integer (buf_paddr_p, 4, 2833 byte_order); 2834 displacement_paddr = paddr - phdr2[i].p_paddr; 2835 2836 if (displacement_vaddr == displacement_paddr) 2837 displacement = displacement_vaddr; 2838 2839 break; 2840 } 2841 2842 /* Now compare program headers from the target and the binary 2843 with optional DISPLACEMENT. */ 2844 2845 for (i = 0; 2846 i < phdrs_target->size () / sizeof (Elf32_External_Phdr); 2847 i++) 2848 { 2849 Elf32_External_Phdr *phdrp; 2850 Elf32_External_Phdr *phdr2p; 2851 gdb_byte *buf_vaddr_p, *buf_paddr_p; 2852 CORE_ADDR vaddr, paddr; 2853 asection *plt2_asect; 2854 2855 phdrp = &((Elf32_External_Phdr *) phdrs_target->data ())[i]; 2856 buf_vaddr_p = (gdb_byte *) &phdrp->p_vaddr; 2857 buf_paddr_p = (gdb_byte *) &phdrp->p_paddr; 2858 phdr2p = &((Elf32_External_Phdr *) phdrs_binary->data ())[i]; 2859 2860 /* PT_GNU_STACK is an exception by being never relocated by 2861 prelink as its addresses are always zero. */ 2862 2863 if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0) 2864 continue; 2865 2866 /* Check also other adjustment combinations - PR 11786. */ 2867 2868 vaddr = extract_unsigned_integer (buf_vaddr_p, 4, 2869 byte_order); 2870 vaddr -= displacement; 2871 store_unsigned_integer (buf_vaddr_p, 4, byte_order, vaddr); 2872 2873 paddr = extract_unsigned_integer (buf_paddr_p, 4, 2874 byte_order); 2875 paddr -= displacement; 2876 store_unsigned_integer (buf_paddr_p, 4, byte_order, paddr); 2877 2878 if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0) 2879 continue; 2880 2881 /* Strip modifies the flags and alignment of PT_GNU_RELRO. 2882 CentOS-5 has problems with filesz, memsz as well. 2883 Strip also modifies memsz of PT_TLS. 2884 See PR 11786. */ 2885 if (phdr2[i].p_type == PT_GNU_RELRO 2886 || phdr2[i].p_type == PT_TLS) 2887 { 2888 Elf32_External_Phdr tmp_phdr = *phdrp; 2889 Elf32_External_Phdr tmp_phdr2 = *phdr2p; 2890 2891 memset (tmp_phdr.p_filesz, 0, 4); 2892 memset (tmp_phdr.p_memsz, 0, 4); 2893 memset (tmp_phdr.p_flags, 0, 4); 2894 memset (tmp_phdr.p_align, 0, 4); 2895 memset (tmp_phdr2.p_filesz, 0, 4); 2896 memset (tmp_phdr2.p_memsz, 0, 4); 2897 memset (tmp_phdr2.p_flags, 0, 4); 2898 memset (tmp_phdr2.p_align, 0, 4); 2899 2900 if (memcmp (&tmp_phdr, &tmp_phdr2, sizeof (tmp_phdr)) 2901 == 0) 2902 continue; 2903 } 2904 2905 /* prelink can convert .plt SHT_NOBITS to SHT_PROGBITS. */ 2906 bfd *exec_bfd = current_program_space->exec_bfd (); 2907 plt2_asect = bfd_get_section_by_name (exec_bfd, ".plt"); 2908 if (plt2_asect) 2909 { 2910 int content2; 2911 gdb_byte *buf_filesz_p = (gdb_byte *) &phdrp->p_filesz; 2912 CORE_ADDR filesz; 2913 2914 content2 = (bfd_section_flags (plt2_asect) 2915 & SEC_HAS_CONTENTS) != 0; 2916 2917 filesz = extract_unsigned_integer (buf_filesz_p, 4, 2918 byte_order); 2919 2920 /* PLT2_ASECT is from on-disk file (exec_bfd) while 2921 FILESZ is from the in-memory image. */ 2922 if (content2) 2923 filesz += bfd_section_size (plt2_asect); 2924 else 2925 filesz -= bfd_section_size (plt2_asect); 2926 2927 store_unsigned_integer (buf_filesz_p, 4, byte_order, 2928 filesz); 2929 2930 if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0) 2931 continue; 2932 } 2933 2934 return 0; 2935 } 2936 } 2937 else if (arch_size == 64 2938 && phdrs_target->size () >= sizeof (Elf64_External_Phdr) 2939 && phdrs_target->size () % sizeof (Elf64_External_Phdr) == 0) 2940 { 2941 Elf_Internal_Ehdr *ehdr2 2942 = elf_tdata (current_program_space->exec_bfd ())->elf_header; 2943 Elf_Internal_Phdr *phdr2 2944 = elf_tdata (current_program_space->exec_bfd ())->phdr; 2945 CORE_ADDR displacement = 0; 2946 int i; 2947 2948 /* DISPLACEMENT could be found more easily by the difference of 2949 ehdr2->e_entry. But we haven't read the ehdr yet, and we 2950 already have enough information to compute that displacement 2951 with what we've read. */ 2952 2953 for (i = 0; i < ehdr2->e_phnum; i++) 2954 if (phdr2[i].p_type == PT_LOAD) 2955 { 2956 Elf64_External_Phdr *phdrp; 2957 gdb_byte *buf_vaddr_p, *buf_paddr_p; 2958 CORE_ADDR vaddr, paddr; 2959 CORE_ADDR displacement_vaddr = 0; 2960 CORE_ADDR displacement_paddr = 0; 2961 2962 phdrp = &((Elf64_External_Phdr *) phdrs_target->data ())[i]; 2963 buf_vaddr_p = (gdb_byte *) &phdrp->p_vaddr; 2964 buf_paddr_p = (gdb_byte *) &phdrp->p_paddr; 2965 2966 vaddr = extract_unsigned_integer (buf_vaddr_p, 8, 2967 byte_order); 2968 displacement_vaddr = vaddr - phdr2[i].p_vaddr; 2969 2970 paddr = extract_unsigned_integer (buf_paddr_p, 8, 2971 byte_order); 2972 displacement_paddr = paddr - phdr2[i].p_paddr; 2973 2974 if (displacement_vaddr == displacement_paddr) 2975 displacement = displacement_vaddr; 2976 2977 break; 2978 } 2979 2980 /* Now compare BUF and BUF2 with optional DISPLACEMENT. */ 2981 2982 for (i = 0; 2983 i < phdrs_target->size () / sizeof (Elf64_External_Phdr); 2984 i++) 2985 { 2986 Elf64_External_Phdr *phdrp; 2987 Elf64_External_Phdr *phdr2p; 2988 gdb_byte *buf_vaddr_p, *buf_paddr_p; 2989 CORE_ADDR vaddr, paddr; 2990 asection *plt2_asect; 2991 2992 phdrp = &((Elf64_External_Phdr *) phdrs_target->data ())[i]; 2993 buf_vaddr_p = (gdb_byte *) &phdrp->p_vaddr; 2994 buf_paddr_p = (gdb_byte *) &phdrp->p_paddr; 2995 phdr2p = &((Elf64_External_Phdr *) phdrs_binary->data ())[i]; 2996 2997 /* PT_GNU_STACK is an exception by being never relocated by 2998 prelink as its addresses are always zero. */ 2999 3000 if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0) 3001 continue; 3002 3003 /* Check also other adjustment combinations - PR 11786. */ 3004 3005 vaddr = extract_unsigned_integer (buf_vaddr_p, 8, 3006 byte_order); 3007 vaddr -= displacement; 3008 store_unsigned_integer (buf_vaddr_p, 8, byte_order, vaddr); 3009 3010 paddr = extract_unsigned_integer (buf_paddr_p, 8, 3011 byte_order); 3012 paddr -= displacement; 3013 store_unsigned_integer (buf_paddr_p, 8, byte_order, paddr); 3014 3015 if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0) 3016 continue; 3017 3018 /* Strip modifies the flags and alignment of PT_GNU_RELRO. 3019 CentOS-5 has problems with filesz, memsz as well. 3020 Strip also modifies memsz of PT_TLS. 3021 See PR 11786. */ 3022 if (phdr2[i].p_type == PT_GNU_RELRO 3023 || phdr2[i].p_type == PT_TLS) 3024 { 3025 Elf64_External_Phdr tmp_phdr = *phdrp; 3026 Elf64_External_Phdr tmp_phdr2 = *phdr2p; 3027 3028 memset (tmp_phdr.p_filesz, 0, 8); 3029 memset (tmp_phdr.p_memsz, 0, 8); 3030 memset (tmp_phdr.p_flags, 0, 4); 3031 memset (tmp_phdr.p_align, 0, 8); 3032 memset (tmp_phdr2.p_filesz, 0, 8); 3033 memset (tmp_phdr2.p_memsz, 0, 8); 3034 memset (tmp_phdr2.p_flags, 0, 4); 3035 memset (tmp_phdr2.p_align, 0, 8); 3036 3037 if (memcmp (&tmp_phdr, &tmp_phdr2, sizeof (tmp_phdr)) 3038 == 0) 3039 continue; 3040 } 3041 3042 /* prelink can convert .plt SHT_NOBITS to SHT_PROGBITS. */ 3043 plt2_asect 3044 = bfd_get_section_by_name (current_program_space->exec_bfd (), 3045 ".plt"); 3046 if (plt2_asect) 3047 { 3048 int content2; 3049 gdb_byte *buf_filesz_p = (gdb_byte *) &phdrp->p_filesz; 3050 CORE_ADDR filesz; 3051 3052 content2 = (bfd_section_flags (plt2_asect) 3053 & SEC_HAS_CONTENTS) != 0; 3054 3055 filesz = extract_unsigned_integer (buf_filesz_p, 8, 3056 byte_order); 3057 3058 /* PLT2_ASECT is from on-disk file (current 3059 exec_bfd) while FILESZ is from the in-memory 3060 image. */ 3061 if (content2) 3062 filesz += bfd_section_size (plt2_asect); 3063 else 3064 filesz -= bfd_section_size (plt2_asect); 3065 3066 store_unsigned_integer (buf_filesz_p, 8, byte_order, 3067 filesz); 3068 3069 if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0) 3070 continue; 3071 } 3072 3073 return 0; 3074 } 3075 } 3076 else 3077 return 0; 3078 } 3079 } 3080 3081 if (info_verbose) 3082 { 3083 /* It can be printed repeatedly as there is no easy way to check 3084 the executable symbols/file has been already relocated to 3085 displacement. */ 3086 3087 gdb_printf (_("Using PIE (Position Independent Executable) " 3088 "displacement %s for \"%s\".\n"), 3089 paddress (target_gdbarch (), exec_displacement), 3090 bfd_get_filename (current_program_space->exec_bfd ())); 3091 } 3092 3093 *displacementp = exec_displacement; 3094 return 1; 3095 } 3096 3097 /* Relocate the main executable. This function should be called upon 3098 stopping the inferior process at the entry point to the program. 3099 The entry point from BFD is compared to the AT_ENTRY of AUXV and if they are 3100 different, the main executable is relocated by the proper amount. */ 3101 3102 static void 3103 svr4_relocate_main_executable (void) 3104 { 3105 CORE_ADDR displacement; 3106 3107 /* If we are re-running this executable, SYMFILE_OBJFILE->SECTION_OFFSETS 3108 probably contains the offsets computed using the PIE displacement 3109 from the previous run, which of course are irrelevant for this run. 3110 So we need to determine the new PIE displacement and recompute the 3111 section offsets accordingly, even if SYMFILE_OBJFILE->SECTION_OFFSETS 3112 already contains pre-computed offsets. 3113 3114 If we cannot compute the PIE displacement, either: 3115 3116 - The executable is not PIE. 3117 3118 - SYMFILE_OBJFILE does not match the executable started in the target. 3119 This can happen for main executable symbols loaded at the host while 3120 `ld.so --ld-args main-executable' is loaded in the target. 3121 3122 Then we leave the section offsets untouched and use them as is for 3123 this run. Either: 3124 3125 - These section offsets were properly reset earlier, and thus 3126 already contain the correct values. This can happen for instance 3127 when reconnecting via the remote protocol to a target that supports 3128 the `qOffsets' packet. 3129 3130 - The section offsets were not reset earlier, and the best we can 3131 hope is that the old offsets are still applicable to the new run. */ 3132 3133 if (! svr4_exec_displacement (&displacement)) 3134 return; 3135 3136 /* Even DISPLACEMENT 0 is a valid new difference of in-memory vs. in-file 3137 addresses. */ 3138 3139 objfile *objf = current_program_space->symfile_object_file; 3140 if (objf) 3141 { 3142 section_offsets new_offsets (objf->section_offsets.size (), 3143 displacement); 3144 objfile_relocate (objf, new_offsets); 3145 } 3146 else if (current_program_space->exec_bfd ()) 3147 { 3148 asection *asect; 3149 3150 bfd *exec_bfd = current_program_space->exec_bfd (); 3151 for (asect = exec_bfd->sections; asect != NULL; asect = asect->next) 3152 exec_set_section_address (bfd_get_filename (exec_bfd), asect->index, 3153 bfd_section_vma (asect) + displacement); 3154 } 3155 } 3156 3157 /* Implement the "create_inferior_hook" target_solib_ops method. 3158 3159 For SVR4 executables, this first instruction is either the first 3160 instruction in the dynamic linker (for dynamically linked 3161 executables) or the instruction at "start" for statically linked 3162 executables. For dynamically linked executables, the system 3163 first exec's /lib/libc.so.N, which contains the dynamic linker, 3164 and starts it running. The dynamic linker maps in any needed 3165 shared libraries, maps in the actual user executable, and then 3166 jumps to "start" in the user executable. 3167 3168 We can arrange to cooperate with the dynamic linker to discover the 3169 names of shared libraries that are dynamically linked, and the base 3170 addresses to which they are linked. 3171 3172 This function is responsible for discovering those names and 3173 addresses, and saving sufficient information about them to allow 3174 their symbols to be read at a later time. */ 3175 3176 static void 3177 svr4_solib_create_inferior_hook (int from_tty) 3178 { 3179 struct svr4_info *info; 3180 3181 info = get_svr4_info (current_program_space); 3182 3183 /* Clear the probes-based interface's state. */ 3184 free_probes_table (info); 3185 free_solib_lists (info); 3186 3187 /* Relocate the main executable if necessary. */ 3188 svr4_relocate_main_executable (); 3189 3190 /* No point setting a breakpoint in the dynamic linker if we can't 3191 hit it (e.g., a core file, or a trace file). */ 3192 if (!target_has_execution ()) 3193 return; 3194 3195 if (!svr4_have_link_map_offsets ()) 3196 return; 3197 3198 if (!enable_break (info, from_tty)) 3199 return; 3200 } 3201 3202 static void 3203 svr4_clear_solib (void) 3204 { 3205 struct svr4_info *info; 3206 3207 info = get_svr4_info (current_program_space); 3208 info->debug_base = 0; 3209 info->debug_loader_offset_p = 0; 3210 info->debug_loader_offset = 0; 3211 xfree (info->debug_loader_name); 3212 info->debug_loader_name = NULL; 3213 } 3214 3215 /* Clear any bits of ADDR that wouldn't fit in a target-format 3216 data pointer. "Data pointer" here refers to whatever sort of 3217 address the dynamic linker uses to manage its sections. At the 3218 moment, we don't support shared libraries on any processors where 3219 code and data pointers are different sizes. 3220 3221 This isn't really the right solution. What we really need here is 3222 a way to do arithmetic on CORE_ADDR values that respects the 3223 natural pointer/address correspondence. (For example, on the MIPS, 3224 converting a 32-bit pointer to a 64-bit CORE_ADDR requires you to 3225 sign-extend the value. There, simply truncating the bits above 3226 gdbarch_ptr_bit, as we do below, is no good.) This should probably 3227 be a new gdbarch method or something. */ 3228 static CORE_ADDR 3229 svr4_truncate_ptr (CORE_ADDR addr) 3230 { 3231 if (gdbarch_ptr_bit (target_gdbarch ()) == sizeof (CORE_ADDR) * 8) 3232 /* We don't need to truncate anything, and the bit twiddling below 3233 will fail due to overflow problems. */ 3234 return addr; 3235 else 3236 return addr & (((CORE_ADDR) 1 << gdbarch_ptr_bit (target_gdbarch ())) - 1); 3237 } 3238 3239 3240 static void 3241 svr4_relocate_section_addresses (struct so_list *so, 3242 struct target_section *sec) 3243 { 3244 bfd *abfd = sec->the_bfd_section->owner; 3245 3246 sec->addr = svr4_truncate_ptr (sec->addr + lm_addr_check (so, abfd)); 3247 sec->endaddr = svr4_truncate_ptr (sec->endaddr + lm_addr_check (so, abfd)); 3248 } 3249 3250 3251 /* Architecture-specific operations. */ 3252 3253 struct solib_svr4_ops 3254 { 3255 /* Return a description of the layout of `struct link_map'. */ 3256 struct link_map_offsets *(*fetch_link_map_offsets)(void) = nullptr; 3257 }; 3258 3259 /* Per-architecture data key. */ 3260 static const registry<gdbarch>::key<struct solib_svr4_ops> solib_svr4_data; 3261 3262 /* Return a default for the architecture-specific operations. */ 3263 3264 static struct solib_svr4_ops * 3265 get_ops (struct gdbarch *gdbarch) 3266 { 3267 struct solib_svr4_ops *ops = solib_svr4_data.get (gdbarch); 3268 if (ops == nullptr) 3269 ops = solib_svr4_data.emplace (gdbarch); 3270 return ops; 3271 } 3272 3273 /* Set the architecture-specific `struct link_map_offsets' fetcher for 3274 GDBARCH to FLMO. Also, install SVR4 solib_ops into GDBARCH. */ 3275 3276 void 3277 set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch, 3278 struct link_map_offsets *(*flmo) (void)) 3279 { 3280 struct solib_svr4_ops *ops = get_ops (gdbarch); 3281 3282 ops->fetch_link_map_offsets = flmo; 3283 3284 set_gdbarch_so_ops (gdbarch, &svr4_so_ops); 3285 set_gdbarch_iterate_over_objfiles_in_search_order 3286 (gdbarch, svr4_iterate_over_objfiles_in_search_order); 3287 } 3288 3289 /* Fetch a link_map_offsets structure using the architecture-specific 3290 `struct link_map_offsets' fetcher. */ 3291 3292 static struct link_map_offsets * 3293 svr4_fetch_link_map_offsets (void) 3294 { 3295 struct solib_svr4_ops *ops = get_ops (target_gdbarch ()); 3296 3297 gdb_assert (ops->fetch_link_map_offsets); 3298 return ops->fetch_link_map_offsets (); 3299 } 3300 3301 /* Return 1 if a link map offset fetcher has been defined, 0 otherwise. */ 3302 3303 static int 3304 svr4_have_link_map_offsets (void) 3305 { 3306 struct solib_svr4_ops *ops = get_ops (target_gdbarch ()); 3307 3308 return (ops->fetch_link_map_offsets != NULL); 3309 } 3310 3311 3312 /* Most OS'es that have SVR4-style ELF dynamic libraries define a 3313 `struct r_debug' and a `struct link_map' that are binary compatible 3314 with the original SVR4 implementation. */ 3315 3316 /* Fetch (and possibly build) an appropriate `struct link_map_offsets' 3317 for an ILP32 SVR4 system. */ 3318 3319 struct link_map_offsets * 3320 svr4_ilp32_fetch_link_map_offsets (void) 3321 { 3322 static struct link_map_offsets lmo; 3323 static struct link_map_offsets *lmp = NULL; 3324 3325 if (lmp == NULL) 3326 { 3327 lmp = &lmo; 3328 3329 lmo.r_version_offset = 0; 3330 lmo.r_version_size = 4; 3331 lmo.r_map_offset = 4; 3332 lmo.r_brk_offset = 8; 3333 lmo.r_ldsomap_offset = 20; 3334 lmo.r_next_offset = -1; 3335 3336 /* Everything we need is in the first 20 bytes. */ 3337 lmo.link_map_size = 20; 3338 lmo.l_addr_offset = 0; 3339 lmo.l_name_offset = 4; 3340 lmo.l_ld_offset = 8; 3341 lmo.l_next_offset = 12; 3342 lmo.l_prev_offset = 16; 3343 } 3344 3345 return lmp; 3346 } 3347 3348 /* Fetch (and possibly build) an appropriate `struct link_map_offsets' 3349 for an LP64 SVR4 system. */ 3350 3351 struct link_map_offsets * 3352 svr4_lp64_fetch_link_map_offsets (void) 3353 { 3354 static struct link_map_offsets lmo; 3355 static struct link_map_offsets *lmp = NULL; 3356 3357 if (lmp == NULL) 3358 { 3359 lmp = &lmo; 3360 3361 lmo.r_version_offset = 0; 3362 lmo.r_version_size = 4; 3363 lmo.r_map_offset = 8; 3364 lmo.r_brk_offset = 16; 3365 lmo.r_ldsomap_offset = 40; 3366 lmo.r_next_offset = -1; 3367 3368 /* Everything we need is in the first 40 bytes. */ 3369 lmo.link_map_size = 40; 3370 lmo.l_addr_offset = 0; 3371 lmo.l_name_offset = 8; 3372 lmo.l_ld_offset = 16; 3373 lmo.l_next_offset = 24; 3374 lmo.l_prev_offset = 32; 3375 } 3376 3377 return lmp; 3378 } 3379 3380 3381 /* Return the DSO matching OBJFILE or nullptr if none can be found. */ 3382 3383 static so_list * 3384 find_solib_for_objfile (struct objfile *objfile) 3385 { 3386 if (objfile == nullptr) 3387 return nullptr; 3388 3389 /* If OBJFILE is a separate debug object file, look for the original 3390 object file. */ 3391 if (objfile->separate_debug_objfile_backlink != nullptr) 3392 objfile = objfile->separate_debug_objfile_backlink; 3393 3394 for (so_list *so : current_program_space->solibs ()) 3395 if (so->objfile == objfile) 3396 return so; 3397 3398 return nullptr; 3399 } 3400 3401 /* Return the address of the r_debug object for the namespace containing 3402 SOLIB or zero if it cannot be found. This may happen when symbol files 3403 are added manually, for example, or with the main executable. 3404 3405 Current callers treat zero as initial namespace so they are doing the 3406 right thing for the main executable. */ 3407 3408 static CORE_ADDR 3409 find_debug_base_for_solib (so_list *solib) 3410 { 3411 if (solib == nullptr) 3412 return 0; 3413 3414 svr4_info *info = get_svr4_info (current_program_space); 3415 gdb_assert (info != nullptr); 3416 for (const std::pair<CORE_ADDR, so_list *> tuple 3417 : info->solib_lists) 3418 { 3419 CORE_ADDR debug_base = tuple.first; 3420 so_list *solist = tuple.second; 3421 3422 for (; solist != nullptr; solist = solist->next) 3423 if (svr4_same (solib, solist)) 3424 return debug_base; 3425 } 3426 3427 return 0; 3428 } 3429 3430 /* Search order for ELF DSOs linked with -Bsymbolic. Those DSOs have a 3431 different rule for symbol lookup. The lookup begins here in the DSO, 3432 not in the main executable. When starting from CURRENT_OBJFILE, we 3433 stay in the same namespace as that file. Otherwise, we only consider 3434 the initial namespace. */ 3435 3436 static void 3437 svr4_iterate_over_objfiles_in_search_order 3438 (gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, 3439 objfile *current_objfile) 3440 { 3441 bool checked_current_objfile = false; 3442 if (current_objfile != nullptr) 3443 { 3444 bfd *abfd; 3445 3446 if (current_objfile->separate_debug_objfile_backlink != nullptr) 3447 current_objfile = current_objfile->separate_debug_objfile_backlink; 3448 3449 if (current_objfile == current_program_space->symfile_object_file) 3450 abfd = current_program_space->exec_bfd (); 3451 else 3452 abfd = current_objfile->obfd.get (); 3453 3454 if (abfd != nullptr 3455 && gdb_bfd_scan_elf_dyntag (DT_SYMBOLIC, abfd, nullptr, nullptr) == 1) 3456 { 3457 checked_current_objfile = true; 3458 if (cb (current_objfile)) 3459 return; 3460 } 3461 } 3462 3463 /* The linker namespace to iterate identified by the address of its 3464 r_debug object, defaulting to the initial namespace. */ 3465 CORE_ADDR initial = elf_locate_base (); 3466 so_list *curr_solib = find_solib_for_objfile (current_objfile); 3467 CORE_ADDR debug_base = find_debug_base_for_solib (curr_solib); 3468 if (debug_base == 0) 3469 debug_base = initial; 3470 3471 for (objfile *objfile : current_program_space->objfiles ()) 3472 { 3473 if (checked_current_objfile && objfile == current_objfile) 3474 continue; 3475 3476 /* Try to determine the namespace into which objfile was loaded. 3477 3478 If we fail, e.g. for manually added symbol files or for the main 3479 executable, we assume that they were added to the initial 3480 namespace. */ 3481 so_list *solib = find_solib_for_objfile (objfile); 3482 CORE_ADDR solib_base = find_debug_base_for_solib (solib); 3483 if (solib_base == 0) 3484 solib_base = initial; 3485 3486 /* Ignore objfiles that were added to a different namespace. */ 3487 if (solib_base != debug_base) 3488 continue; 3489 3490 if (cb (objfile)) 3491 return; 3492 } 3493 } 3494 3495 const struct target_so_ops svr4_so_ops = 3496 { 3497 svr4_relocate_section_addresses, 3498 svr4_free_so, 3499 svr4_clear_so, 3500 svr4_clear_solib, 3501 svr4_solib_create_inferior_hook, 3502 svr4_current_sos, 3503 open_symbol_file_object, 3504 svr4_in_dynsym_resolve_code, 3505 solib_bfd_open, 3506 nullptr, 3507 svr4_same, 3508 svr4_keep_data_in_core, 3509 svr4_update_solib_event_breakpoints, 3510 svr4_handle_solib_event, 3511 }; 3512 3513 void _initialize_svr4_solib (); 3514 void 3515 _initialize_svr4_solib () 3516 { 3517 gdb::observers::free_objfile.attach (svr4_free_objfile_observer, 3518 "solib-svr4"); 3519 } 3520