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