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