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