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