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