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