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