Home | History | Annotate | Line # | Download | only in gdb
solib-svr4.c revision 1.6
      1 /* Handle SVR4 shared libraries for GDB, the GNU Debugger.
      2 
      3    Copyright (C) 1990-2016 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 
   1026   if (symfile_objfile)
   1027     if (!query (_("Attempt to reload symbols from process? ")))
   1028       {
   1029 	do_cleanups (cleanups);
   1030 	return 0;
   1031       }
   1032 
   1033   /* Always locate the debug struct, in case it has moved.  */
   1034   info->debug_base = 0;
   1035   if (locate_base (info) == 0)
   1036     {
   1037       do_cleanups (cleanups);
   1038       return 0;	/* failed somehow...  */
   1039     }
   1040 
   1041   /* First link map member should be the executable.  */
   1042   lm = solib_svr4_r_map (info);
   1043   if (lm == 0)
   1044     {
   1045       do_cleanups (cleanups);
   1046       return 0;	/* failed somehow...  */
   1047     }
   1048 
   1049   /* Read address of name from target memory to GDB.  */
   1050   read_memory (lm + lmo->l_name_offset, l_name_buf, l_name_size);
   1051 
   1052   /* Convert the address to host format.  */
   1053   l_name = extract_typed_address (l_name_buf, ptr_type);
   1054 
   1055   if (l_name == 0)
   1056     {
   1057       do_cleanups (cleanups);
   1058       return 0;		/* No filename.  */
   1059     }
   1060 
   1061   /* Now fetch the filename from target memory.  */
   1062   target_read_string (l_name, &filename, SO_NAME_MAX_PATH_SIZE - 1, &errcode);
   1063   make_cleanup (xfree, filename);
   1064 
   1065   if (errcode)
   1066     {
   1067       warning (_("failed to read exec filename from attached file: %s"),
   1068 	       safe_strerror (errcode));
   1069       do_cleanups (cleanups);
   1070       return 0;
   1071     }
   1072 
   1073   /* Have a pathname: read the symbol file.  */
   1074   symbol_file_add_main (filename, from_tty);
   1075 
   1076   do_cleanups (cleanups);
   1077   return 1;
   1078 }
   1079 
   1080 /* Data exchange structure for the XML parser as returned by
   1081    svr4_current_sos_via_xfer_libraries.  */
   1082 
   1083 struct svr4_library_list
   1084 {
   1085   struct so_list *head, **tailp;
   1086 
   1087   /* Inferior address of struct link_map used for the main executable.  It is
   1088      NULL if not known.  */
   1089   CORE_ADDR main_lm;
   1090 };
   1091 
   1092 /* Implementation for target_so_ops.free_so.  */
   1093 
   1094 static void
   1095 svr4_free_so (struct so_list *so)
   1096 {
   1097   xfree (so->lm_info);
   1098 }
   1099 
   1100 /* Implement target_so_ops.clear_so.  */
   1101 
   1102 static void
   1103 svr4_clear_so (struct so_list *so)
   1104 {
   1105   if (so->lm_info != NULL)
   1106     so->lm_info->l_addr_p = 0;
   1107 }
   1108 
   1109 /* Free so_list built so far (called via cleanup).  */
   1110 
   1111 static void
   1112 svr4_free_library_list (void *p_list)
   1113 {
   1114   struct so_list *list = *(struct so_list **) p_list;
   1115 
   1116   while (list != NULL)
   1117     {
   1118       struct so_list *next = list->next;
   1119 
   1120       free_so (list);
   1121       list = next;
   1122     }
   1123 }
   1124 
   1125 /* Copy library list.  */
   1126 
   1127 static struct so_list *
   1128 svr4_copy_library_list (struct so_list *src)
   1129 {
   1130   struct so_list *dst = NULL;
   1131   struct so_list **link = &dst;
   1132 
   1133   while (src != NULL)
   1134     {
   1135       struct so_list *newobj;
   1136 
   1137       newobj = XNEW (struct so_list);
   1138       memcpy (newobj, src, sizeof (struct so_list));
   1139 
   1140       newobj->lm_info = XNEW (struct lm_info);
   1141       memcpy (newobj->lm_info, src->lm_info, sizeof (struct lm_info));
   1142 
   1143       newobj->next = NULL;
   1144       *link = newobj;
   1145       link = &newobj->next;
   1146 
   1147       src = src->next;
   1148     }
   1149 
   1150   return dst;
   1151 }
   1152 
   1153 #ifdef HAVE_LIBEXPAT
   1154 
   1155 #include "xml-support.h"
   1156 
   1157 /* Handle the start of a <library> element.  Note: new elements are added
   1158    at the tail of the list, keeping the list in order.  */
   1159 
   1160 static void
   1161 library_list_start_library (struct gdb_xml_parser *parser,
   1162 			    const struct gdb_xml_element *element,
   1163 			    void *user_data, VEC(gdb_xml_value_s) *attributes)
   1164 {
   1165   struct svr4_library_list *list = (struct svr4_library_list *) user_data;
   1166   const char *name
   1167     = (const char *) xml_find_attribute (attributes, "name")->value;
   1168   ULONGEST *lmp
   1169     = (ULONGEST *) xml_find_attribute (attributes, "lm")->value;
   1170   ULONGEST *l_addrp
   1171     = (ULONGEST *) xml_find_attribute (attributes, "l_addr")->value;
   1172   ULONGEST *l_ldp
   1173     = (ULONGEST *) xml_find_attribute (attributes, "l_ld")->value;
   1174   struct so_list *new_elem;
   1175 
   1176   new_elem = XCNEW (struct so_list);
   1177   new_elem->lm_info = XCNEW (struct lm_info);
   1178   new_elem->lm_info->lm_addr = *lmp;
   1179   new_elem->lm_info->l_addr_inferior = *l_addrp;
   1180   new_elem->lm_info->l_ld = *l_ldp;
   1181 
   1182   strncpy (new_elem->so_name, name, sizeof (new_elem->so_name) - 1);
   1183   new_elem->so_name[sizeof (new_elem->so_name) - 1] = 0;
   1184   strcpy (new_elem->so_original_name, new_elem->so_name);
   1185 
   1186   *list->tailp = new_elem;
   1187   list->tailp = &new_elem->next;
   1188 }
   1189 
   1190 /* Handle the start of a <library-list-svr4> element.  */
   1191 
   1192 static void
   1193 svr4_library_list_start_list (struct gdb_xml_parser *parser,
   1194 			      const struct gdb_xml_element *element,
   1195 			      void *user_data, VEC(gdb_xml_value_s) *attributes)
   1196 {
   1197   struct svr4_library_list *list = (struct svr4_library_list *) user_data;
   1198   const char *version
   1199     = (const char *) xml_find_attribute (attributes, "version")->value;
   1200   struct gdb_xml_value *main_lm = xml_find_attribute (attributes, "main-lm");
   1201 
   1202   if (strcmp (version, "1.0") != 0)
   1203     gdb_xml_error (parser,
   1204 		   _("SVR4 Library list has unsupported version \"%s\""),
   1205 		   version);
   1206 
   1207   if (main_lm)
   1208     list->main_lm = *(ULONGEST *) main_lm->value;
   1209 }
   1210 
   1211 /* The allowed elements and attributes for an XML library list.
   1212    The root element is a <library-list>.  */
   1213 
   1214 static const struct gdb_xml_attribute svr4_library_attributes[] =
   1215 {
   1216   { "name", GDB_XML_AF_NONE, NULL, NULL },
   1217   { "lm", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
   1218   { "l_addr", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
   1219   { "l_ld", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
   1220   { NULL, GDB_XML_AF_NONE, NULL, NULL }
   1221 };
   1222 
   1223 static const struct gdb_xml_element svr4_library_list_children[] =
   1224 {
   1225   {
   1226     "library", svr4_library_attributes, NULL,
   1227     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
   1228     library_list_start_library, NULL
   1229   },
   1230   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
   1231 };
   1232 
   1233 static const struct gdb_xml_attribute svr4_library_list_attributes[] =
   1234 {
   1235   { "version", GDB_XML_AF_NONE, NULL, NULL },
   1236   { "main-lm", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
   1237   { NULL, GDB_XML_AF_NONE, NULL, NULL }
   1238 };
   1239 
   1240 static const struct gdb_xml_element svr4_library_list_elements[] =
   1241 {
   1242   { "library-list-svr4", svr4_library_list_attributes, svr4_library_list_children,
   1243     GDB_XML_EF_NONE, svr4_library_list_start_list, NULL },
   1244   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
   1245 };
   1246 
   1247 /* Parse qXfer:libraries:read packet into *SO_LIST_RETURN.  Return 1 if
   1248 
   1249    Return 0 if packet not supported, *SO_LIST_RETURN is not modified in such
   1250    case.  Return 1 if *SO_LIST_RETURN contains the library list, it may be
   1251    empty, caller is responsible for freeing all its entries.  */
   1252 
   1253 static int
   1254 svr4_parse_libraries (const char *document, struct svr4_library_list *list)
   1255 {
   1256   struct cleanup *back_to = make_cleanup (svr4_free_library_list,
   1257 					  &list->head);
   1258 
   1259   memset (list, 0, sizeof (*list));
   1260   list->tailp = &list->head;
   1261   if (gdb_xml_parse_quick (_("target library list"), "library-list-svr4.dtd",
   1262 			   svr4_library_list_elements, document, list) == 0)
   1263     {
   1264       /* Parsed successfully, keep the result.  */
   1265       discard_cleanups (back_to);
   1266       return 1;
   1267     }
   1268 
   1269   do_cleanups (back_to);
   1270   return 0;
   1271 }
   1272 
   1273 /* Attempt to get so_list from target via qXfer:libraries-svr4:read packet.
   1274 
   1275    Return 0 if packet not supported, *SO_LIST_RETURN is not modified in such
   1276    case.  Return 1 if *SO_LIST_RETURN contains the library list, it may be
   1277    empty, caller is responsible for freeing all its entries.
   1278 
   1279    Note that ANNEX must be NULL if the remote does not explicitly allow
   1280    qXfer:libraries-svr4:read packets with non-empty annexes.  Support for
   1281    this can be checked using target_augmented_libraries_svr4_read ().  */
   1282 
   1283 static int
   1284 svr4_current_sos_via_xfer_libraries (struct svr4_library_list *list,
   1285 				     const char *annex)
   1286 {
   1287   char *svr4_library_document;
   1288   int result;
   1289   struct cleanup *back_to;
   1290 
   1291   gdb_assert (annex == NULL || target_augmented_libraries_svr4_read ());
   1292 
   1293   /* Fetch the list of shared libraries.  */
   1294   svr4_library_document = target_read_stralloc (&current_target,
   1295 						TARGET_OBJECT_LIBRARIES_SVR4,
   1296 						annex);
   1297   if (svr4_library_document == NULL)
   1298     return 0;
   1299 
   1300   back_to = make_cleanup (xfree, svr4_library_document);
   1301   result = svr4_parse_libraries (svr4_library_document, list);
   1302   do_cleanups (back_to);
   1303 
   1304   return result;
   1305 }
   1306 
   1307 #else
   1308 
   1309 static int
   1310 svr4_current_sos_via_xfer_libraries (struct svr4_library_list *list,
   1311 				     const char *annex)
   1312 {
   1313   return 0;
   1314 }
   1315 
   1316 #endif
   1317 
   1318 /* If no shared library information is available from the dynamic
   1319    linker, build a fallback list from other sources.  */
   1320 
   1321 static struct so_list *
   1322 svr4_default_sos (void)
   1323 {
   1324   struct svr4_info *info = get_svr4_info ();
   1325   struct so_list *newobj;
   1326 
   1327   if (!info->debug_loader_offset_p)
   1328     return NULL;
   1329 
   1330   newobj = XCNEW (struct so_list);
   1331 
   1332   newobj->lm_info = XCNEW (struct lm_info);
   1333 
   1334   /* Nothing will ever check the other fields if we set l_addr_p.  */
   1335   newobj->lm_info->l_addr = info->debug_loader_offset;
   1336   newobj->lm_info->l_addr_p = 1;
   1337 
   1338   strncpy (newobj->so_name, info->debug_loader_name, SO_NAME_MAX_PATH_SIZE - 1);
   1339   newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
   1340   strcpy (newobj->so_original_name, newobj->so_name);
   1341 
   1342   return newobj;
   1343 }
   1344 
   1345 /* Read the whole inferior libraries chain starting at address LM.
   1346    Expect the first entry in the chain's previous entry to be PREV_LM.
   1347    Add the entries to the tail referenced by LINK_PTR_PTR.  Ignore the
   1348    first entry if IGNORE_FIRST and set global MAIN_LM_ADDR according
   1349    to it.  Returns nonzero upon success.  If zero is returned the
   1350    entries stored to LINK_PTR_PTR are still valid although they may
   1351    represent only part of the inferior library list.  */
   1352 
   1353 static int
   1354 svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
   1355 		   struct so_list ***link_ptr_ptr, int ignore_first)
   1356 {
   1357   CORE_ADDR first_l_name = 0;
   1358   CORE_ADDR next_lm;
   1359 
   1360   for (; lm != 0; prev_lm = lm, lm = next_lm)
   1361     {
   1362       struct so_list *newobj;
   1363       struct cleanup *old_chain;
   1364       int errcode;
   1365       char *buffer;
   1366 
   1367       newobj = XCNEW (struct so_list);
   1368       old_chain = make_cleanup_free_so (newobj);
   1369 
   1370       newobj->lm_info = lm_info_read (lm);
   1371       if (newobj->lm_info == NULL)
   1372 	{
   1373 	  do_cleanups (old_chain);
   1374 	  return 0;
   1375 	}
   1376 
   1377       next_lm = newobj->lm_info->l_next;
   1378 
   1379       if (newobj->lm_info->l_prev != prev_lm)
   1380 	{
   1381 	  warning (_("Corrupted shared library list: %s != %s"),
   1382 		   paddress (target_gdbarch (), prev_lm),
   1383 		   paddress (target_gdbarch (), newobj->lm_info->l_prev));
   1384 	  do_cleanups (old_chain);
   1385 	  return 0;
   1386 	}
   1387 
   1388       /* For SVR4 versions, the first entry in the link map is for the
   1389          inferior executable, so we must ignore it.  For some versions of
   1390          SVR4, it has no name.  For others (Solaris 2.3 for example), it
   1391          does have a name, so we can no longer use a missing name to
   1392          decide when to ignore it.  */
   1393       if (ignore_first && newobj->lm_info->l_prev == 0)
   1394 	{
   1395 	  struct svr4_info *info = get_svr4_info ();
   1396 
   1397 	  first_l_name = newobj->lm_info->l_name;
   1398 	  info->main_lm_addr = newobj->lm_info->lm_addr;
   1399 	  do_cleanups (old_chain);
   1400 	  continue;
   1401 	}
   1402 
   1403       /* Extract this shared object's name.  */
   1404       target_read_string (newobj->lm_info->l_name, &buffer,
   1405 			  SO_NAME_MAX_PATH_SIZE - 1, &errcode);
   1406       if (errcode != 0)
   1407 	{
   1408 	  /* If this entry's l_name address matches that of the
   1409 	     inferior executable, then this is not a normal shared
   1410 	     object, but (most likely) a vDSO.  In this case, silently
   1411 	     skip it; otherwise emit a warning. */
   1412 	  if (first_l_name == 0 || newobj->lm_info->l_name != first_l_name)
   1413 	    warning (_("Can't read pathname for load map: %s."),
   1414 		     safe_strerror (errcode));
   1415 	  do_cleanups (old_chain);
   1416 	  continue;
   1417 	}
   1418 
   1419       strncpy (newobj->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
   1420       newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
   1421       strcpy (newobj->so_original_name, newobj->so_name);
   1422       xfree (buffer);
   1423 
   1424       /* If this entry has no name, or its name matches the name
   1425 	 for the main executable, don't include it in the list.  */
   1426       if (! newobj->so_name[0] || match_main (newobj->so_name))
   1427 	{
   1428 	  do_cleanups (old_chain);
   1429 	  continue;
   1430 	}
   1431 
   1432       discard_cleanups (old_chain);
   1433       newobj->next = 0;
   1434       **link_ptr_ptr = newobj;
   1435       *link_ptr_ptr = &newobj->next;
   1436     }
   1437 
   1438   return 1;
   1439 }
   1440 
   1441 /* Read the full list of currently loaded shared objects directly
   1442    from the inferior, without referring to any libraries read and
   1443    stored by the probes interface.  Handle special cases relating
   1444    to the first elements of the list.  */
   1445 
   1446 static struct so_list *
   1447 svr4_current_sos_direct (struct svr4_info *info)
   1448 {
   1449   CORE_ADDR lm;
   1450   struct so_list *head = NULL;
   1451   struct so_list **link_ptr = &head;
   1452   struct cleanup *back_to;
   1453   int ignore_first;
   1454   struct svr4_library_list library_list;
   1455 
   1456   /* Fall back to manual examination of the target if the packet is not
   1457      supported or gdbserver failed to find DT_DEBUG.  gdb.server/solib-list.exp
   1458      tests a case where gdbserver cannot find the shared libraries list while
   1459      GDB itself is able to find it via SYMFILE_OBJFILE.
   1460 
   1461      Unfortunately statically linked inferiors will also fall back through this
   1462      suboptimal code path.  */
   1463 
   1464   info->using_xfer = svr4_current_sos_via_xfer_libraries (&library_list,
   1465 							  NULL);
   1466   if (info->using_xfer)
   1467     {
   1468       if (library_list.main_lm)
   1469 	info->main_lm_addr = library_list.main_lm;
   1470 
   1471       return library_list.head ? library_list.head : svr4_default_sos ();
   1472     }
   1473 
   1474   /* Always locate the debug struct, in case it has moved.  */
   1475   info->debug_base = 0;
   1476   locate_base (info);
   1477 
   1478   /* If we can't find the dynamic linker's base structure, this
   1479      must not be a dynamically linked executable.  Hmm.  */
   1480   if (! info->debug_base)
   1481     return svr4_default_sos ();
   1482 
   1483   /* Assume that everything is a library if the dynamic loader was loaded
   1484      late by a static executable.  */
   1485   if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
   1486     ignore_first = 0;
   1487   else
   1488     ignore_first = 1;
   1489 
   1490   back_to = make_cleanup (svr4_free_library_list, &head);
   1491 
   1492   /* Walk the inferior's link map list, and build our list of
   1493      `struct so_list' nodes.  */
   1494   lm = solib_svr4_r_map (info);
   1495   if (lm)
   1496     svr4_read_so_list (lm, 0, &link_ptr, ignore_first);
   1497 
   1498   /* On Solaris, the dynamic linker is not in the normal list of
   1499      shared objects, so make sure we pick it up too.  Having
   1500      symbol information for the dynamic linker is quite crucial
   1501      for skipping dynamic linker resolver code.  */
   1502   lm = solib_svr4_r_ldsomap (info);
   1503   if (lm)
   1504     svr4_read_so_list (lm, 0, &link_ptr, 0);
   1505 
   1506   discard_cleanups (back_to);
   1507 
   1508   if (head == NULL)
   1509     return svr4_default_sos ();
   1510 
   1511   return head;
   1512 }
   1513 
   1514 /* Implement the main part of the "current_sos" target_so_ops
   1515    method.  */
   1516 
   1517 static struct so_list *
   1518 svr4_current_sos_1 (void)
   1519 {
   1520   struct svr4_info *info = get_svr4_info ();
   1521 
   1522   /* If the solib list has been read and stored by the probes
   1523      interface then we return a copy of the stored list.  */
   1524   if (info->solib_list != NULL)
   1525     return svr4_copy_library_list (info->solib_list);
   1526 
   1527   /* Otherwise obtain the solib list directly from the inferior.  */
   1528   return svr4_current_sos_direct (info);
   1529 }
   1530 
   1531 /* Implement the "current_sos" target_so_ops method.  */
   1532 
   1533 static struct so_list *
   1534 svr4_current_sos (void)
   1535 {
   1536   struct so_list *so_head = svr4_current_sos_1 ();
   1537   struct mem_range vsyscall_range;
   1538 
   1539   /* Filter out the vDSO module, if present.  Its symbol file would
   1540      not be found on disk.  The vDSO/vsyscall's OBJFILE is instead
   1541      managed by symfile-mem.c:add_vsyscall_page.  */
   1542   if (gdbarch_vsyscall_range (target_gdbarch (), &vsyscall_range)
   1543       && vsyscall_range.length != 0)
   1544     {
   1545       struct so_list **sop;
   1546 
   1547       sop = &so_head;
   1548       while (*sop != NULL)
   1549 	{
   1550 	  struct so_list *so = *sop;
   1551 
   1552 	  /* We can't simply match the vDSO by starting address alone,
   1553 	     because lm_info->l_addr_inferior (and also l_addr) do not
   1554 	     necessarily represent the real starting address of the
   1555 	     ELF if the vDSO's ELF itself is "prelinked".  The l_ld
   1556 	     field (the ".dynamic" section of the shared object)
   1557 	     always points at the absolute/resolved address though.
   1558 	     So check whether that address is inside the vDSO's
   1559 	     mapping instead.
   1560 
   1561 	     E.g., on Linux 3.16 (x86_64) the vDSO is a regular
   1562 	     0-based ELF, and we see:
   1563 
   1564 	      (gdb) info auxv
   1565 	      33  AT_SYSINFO_EHDR  System-supplied DSO's ELF header 0x7ffff7ffb000
   1566 	      (gdb)  p/x *_r_debug.r_map.l_next
   1567 	      $1 = {l_addr = 0x7ffff7ffb000, ..., l_ld = 0x7ffff7ffb318, ...}
   1568 
   1569 	     And on Linux 2.6.32 (x86_64) we see:
   1570 
   1571 	      (gdb) info auxv
   1572 	      33  AT_SYSINFO_EHDR  System-supplied DSO's ELF header 0x7ffff7ffe000
   1573 	      (gdb) p/x *_r_debug.r_map.l_next
   1574 	      $5 = {l_addr = 0x7ffff88fe000, ..., l_ld = 0x7ffff7ffe580, ... }
   1575 
   1576 	     Dumping that vDSO shows:
   1577 
   1578 	      (gdb) info proc mappings
   1579 	      0x7ffff7ffe000  0x7ffff7fff000  0x1000  0  [vdso]
   1580 	      (gdb) dump memory vdso.bin 0x7ffff7ffe000 0x7ffff7fff000
   1581 	      # readelf -Wa vdso.bin
   1582 	      [...]
   1583 		Entry point address: 0xffffffffff700700
   1584 	      [...]
   1585 	      Section Headers:
   1586 		[Nr] Name     Type    Address	       Off    Size
   1587 		[ 0]	      NULL    0000000000000000 000000 000000
   1588 		[ 1] .hash    HASH    ffffffffff700120 000120 000038
   1589 		[ 2] .dynsym  DYNSYM  ffffffffff700158 000158 0000d8
   1590 	      [...]
   1591 		[ 9] .dynamic DYNAMIC ffffffffff700580 000580 0000f0
   1592 	  */
   1593 	  if (address_in_mem_range (so->lm_info->l_ld, &vsyscall_range))
   1594 	    {
   1595 	      *sop = so->next;
   1596 	      free_so (so);
   1597 	      break;
   1598 	    }
   1599 
   1600 	  sop = &so->next;
   1601 	}
   1602     }
   1603 
   1604   return so_head;
   1605 }
   1606 
   1607 /* Get the address of the link_map for a given OBJFILE.  */
   1608 
   1609 CORE_ADDR
   1610 svr4_fetch_objfile_link_map (struct objfile *objfile)
   1611 {
   1612   struct so_list *so;
   1613   struct svr4_info *info = get_svr4_info ();
   1614 
   1615   /* Cause svr4_current_sos() to be run if it hasn't been already.  */
   1616   if (info->main_lm_addr == 0)
   1617     solib_add (NULL, 0, &current_target, auto_solib_add);
   1618 
   1619   /* svr4_current_sos() will set main_lm_addr for the main executable.  */
   1620   if (objfile == symfile_objfile)
   1621     return info->main_lm_addr;
   1622 
   1623   /* The other link map addresses may be found by examining the list
   1624      of shared libraries.  */
   1625   for (so = master_so_list (); so; so = so->next)
   1626     if (so->objfile == objfile)
   1627       return so->lm_info->lm_addr;
   1628 
   1629   /* Not found!  */
   1630   return 0;
   1631 }
   1632 
   1633 /* On some systems, the only way to recognize the link map entry for
   1634    the main executable file is by looking at its name.  Return
   1635    non-zero iff SONAME matches one of the known main executable names.  */
   1636 
   1637 static int
   1638 match_main (const char *soname)
   1639 {
   1640   const char * const *mainp;
   1641 
   1642   for (mainp = main_name_list; *mainp != NULL; mainp++)
   1643     {
   1644       if (strcmp (soname, *mainp) == 0)
   1645 	return (1);
   1646     }
   1647 
   1648   return (0);
   1649 }
   1650 
   1651 /* Return 1 if PC lies in the dynamic symbol resolution code of the
   1652    SVR4 run time loader.  */
   1653 
   1654 int
   1655 svr4_in_dynsym_resolve_code (CORE_ADDR pc)
   1656 {
   1657   struct svr4_info *info = get_svr4_info ();
   1658 
   1659   return ((pc >= info->interp_text_sect_low
   1660 	   && pc < info->interp_text_sect_high)
   1661 	  || (pc >= info->interp_plt_sect_low
   1662 	      && pc < info->interp_plt_sect_high)
   1663 	  || in_plt_section (pc)
   1664 	  || in_gnu_ifunc_stub (pc));
   1665 }
   1666 
   1667 /* Given an executable's ABFD and target, compute the entry-point
   1668    address.  */
   1669 
   1670 static CORE_ADDR
   1671 exec_entry_point (struct bfd *abfd, struct target_ops *targ)
   1672 {
   1673   CORE_ADDR addr;
   1674 
   1675   /* KevinB wrote ... for most targets, the address returned by
   1676      bfd_get_start_address() is the entry point for the start
   1677      function.  But, for some targets, bfd_get_start_address() returns
   1678      the address of a function descriptor from which the entry point
   1679      address may be extracted.  This address is extracted by
   1680      gdbarch_convert_from_func_ptr_addr().  The method
   1681      gdbarch_convert_from_func_ptr_addr() is the merely the identify
   1682      function for targets which don't use function descriptors.  */
   1683   addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
   1684 					     bfd_get_start_address (abfd),
   1685 					     targ);
   1686   return gdbarch_addr_bits_remove (target_gdbarch (), addr);
   1687 }
   1688 
   1689 /* A probe and its associated action.  */
   1690 
   1691 struct probe_and_action
   1692 {
   1693   /* The probe.  */
   1694   struct probe *probe;
   1695 
   1696   /* The relocated address of the probe.  */
   1697   CORE_ADDR address;
   1698 
   1699   /* The action.  */
   1700   enum probe_action action;
   1701 };
   1702 
   1703 /* Returns a hash code for the probe_and_action referenced by p.  */
   1704 
   1705 static hashval_t
   1706 hash_probe_and_action (const void *p)
   1707 {
   1708   const struct probe_and_action *pa = (const struct probe_and_action *) p;
   1709 
   1710   return (hashval_t) pa->address;
   1711 }
   1712 
   1713 /* Returns non-zero if the probe_and_actions referenced by p1 and p2
   1714    are equal.  */
   1715 
   1716 static int
   1717 equal_probe_and_action (const void *p1, const void *p2)
   1718 {
   1719   const struct probe_and_action *pa1 = (const struct probe_and_action *) p1;
   1720   const struct probe_and_action *pa2 = (const struct probe_and_action *) p2;
   1721 
   1722   return pa1->address == pa2->address;
   1723 }
   1724 
   1725 /* Register a solib event probe and its associated action in the
   1726    probes table.  */
   1727 
   1728 static void
   1729 register_solib_event_probe (struct probe *probe, CORE_ADDR address,
   1730 			    enum probe_action action)
   1731 {
   1732   struct svr4_info *info = get_svr4_info ();
   1733   struct probe_and_action lookup, *pa;
   1734   void **slot;
   1735 
   1736   /* Create the probes table, if necessary.  */
   1737   if (info->probes_table == NULL)
   1738     info->probes_table = htab_create_alloc (1, hash_probe_and_action,
   1739 					    equal_probe_and_action,
   1740 					    xfree, xcalloc, xfree);
   1741 
   1742   lookup.probe = probe;
   1743   lookup.address = address;
   1744   slot = htab_find_slot (info->probes_table, &lookup, INSERT);
   1745   gdb_assert (*slot == HTAB_EMPTY_ENTRY);
   1746 
   1747   pa = XCNEW (struct probe_and_action);
   1748   pa->probe = probe;
   1749   pa->address = address;
   1750   pa->action = action;
   1751 
   1752   *slot = pa;
   1753 }
   1754 
   1755 /* Get the solib event probe at the specified location, and the
   1756    action associated with it.  Returns NULL if no solib event probe
   1757    was found.  */
   1758 
   1759 static struct probe_and_action *
   1760 solib_event_probe_at (struct svr4_info *info, CORE_ADDR address)
   1761 {
   1762   struct probe_and_action lookup;
   1763   void **slot;
   1764 
   1765   lookup.address = address;
   1766   slot = htab_find_slot (info->probes_table, &lookup, NO_INSERT);
   1767 
   1768   if (slot == NULL)
   1769     return NULL;
   1770 
   1771   return (struct probe_and_action *) *slot;
   1772 }
   1773 
   1774 /* Decide what action to take when the specified solib event probe is
   1775    hit.  */
   1776 
   1777 static enum probe_action
   1778 solib_event_probe_action (struct probe_and_action *pa)
   1779 {
   1780   enum probe_action action;
   1781   unsigned probe_argc = 0;
   1782   struct frame_info *frame = get_current_frame ();
   1783 
   1784   action = pa->action;
   1785   if (action == DO_NOTHING || action == PROBES_INTERFACE_FAILED)
   1786     return action;
   1787 
   1788   gdb_assert (action == FULL_RELOAD || action == UPDATE_OR_RELOAD);
   1789 
   1790   /* Check that an appropriate number of arguments has been supplied.
   1791      We expect:
   1792        arg0: Lmid_t lmid (mandatory)
   1793        arg1: struct r_debug *debug_base (mandatory)
   1794        arg2: struct link_map *new (optional, for incremental updates)  */
   1795   TRY
   1796     {
   1797       probe_argc = get_probe_argument_count (pa->probe, frame);
   1798     }
   1799   CATCH (ex, RETURN_MASK_ERROR)
   1800     {
   1801       exception_print (gdb_stderr, ex);
   1802       probe_argc = 0;
   1803     }
   1804   END_CATCH
   1805 
   1806   /* If get_probe_argument_count throws an exception, probe_argc will
   1807      be set to zero.  However, if pa->probe does not have arguments,
   1808      then get_probe_argument_count will succeed but probe_argc will
   1809      also be zero.  Both cases happen because of different things, but
   1810      they are treated equally here: action will be set to
   1811      PROBES_INTERFACE_FAILED.  */
   1812   if (probe_argc == 2)
   1813     action = FULL_RELOAD;
   1814   else if (probe_argc < 2)
   1815     action = PROBES_INTERFACE_FAILED;
   1816 
   1817   return action;
   1818 }
   1819 
   1820 /* Populate the shared object list by reading the entire list of
   1821    shared objects from the inferior.  Handle special cases relating
   1822    to the first elements of the list.  Returns nonzero on success.  */
   1823 
   1824 static int
   1825 solist_update_full (struct svr4_info *info)
   1826 {
   1827   free_solib_list (info);
   1828   info->solib_list = svr4_current_sos_direct (info);
   1829 
   1830   return 1;
   1831 }
   1832 
   1833 /* Update the shared object list starting from the link-map entry
   1834    passed by the linker in the probe's third argument.  Returns
   1835    nonzero if the list was successfully updated, or zero to indicate
   1836    failure.  */
   1837 
   1838 static int
   1839 solist_update_incremental (struct svr4_info *info, CORE_ADDR lm)
   1840 {
   1841   struct so_list *tail;
   1842   CORE_ADDR prev_lm;
   1843 
   1844   /* svr4_current_sos_direct contains logic to handle a number of
   1845      special cases relating to the first elements of the list.  To
   1846      avoid duplicating this logic we defer to solist_update_full
   1847      if the list is empty.  */
   1848   if (info->solib_list == NULL)
   1849     return 0;
   1850 
   1851   /* Fall back to a full update if we are using a remote target
   1852      that does not support incremental transfers.  */
   1853   if (info->using_xfer && !target_augmented_libraries_svr4_read ())
   1854     return 0;
   1855 
   1856   /* Walk to the end of the list.  */
   1857   for (tail = info->solib_list; tail->next != NULL; tail = tail->next)
   1858     /* Nothing.  */;
   1859   prev_lm = tail->lm_info->lm_addr;
   1860 
   1861   /* Read the new objects.  */
   1862   if (info->using_xfer)
   1863     {
   1864       struct svr4_library_list library_list;
   1865       char annex[64];
   1866 
   1867       xsnprintf (annex, sizeof (annex), "start=%s;prev=%s",
   1868 		 phex_nz (lm, sizeof (lm)),
   1869 		 phex_nz (prev_lm, sizeof (prev_lm)));
   1870       if (!svr4_current_sos_via_xfer_libraries (&library_list, annex))
   1871 	return 0;
   1872 
   1873       tail->next = library_list.head;
   1874     }
   1875   else
   1876     {
   1877       struct so_list **link = &tail->next;
   1878 
   1879       /* IGNORE_FIRST may safely be set to zero here because the
   1880 	 above check and deferral to solist_update_full ensures
   1881 	 that this call to svr4_read_so_list will never see the
   1882 	 first element.  */
   1883       if (!svr4_read_so_list (lm, prev_lm, &link, 0))
   1884 	return 0;
   1885     }
   1886 
   1887   return 1;
   1888 }
   1889 
   1890 /* Disable the probes-based linker interface and revert to the
   1891    original interface.  We don't reset the breakpoints as the
   1892    ones set up for the probes-based interface are adequate.  */
   1893 
   1894 static void
   1895 disable_probes_interface_cleanup (void *arg)
   1896 {
   1897   struct svr4_info *info = get_svr4_info ();
   1898 
   1899   warning (_("Probes-based dynamic linker interface failed.\n"
   1900 	     "Reverting to original interface.\n"));
   1901 
   1902   free_probes_table (info);
   1903   free_solib_list (info);
   1904 }
   1905 
   1906 /* Update the solib list as appropriate when using the
   1907    probes-based linker interface.  Do nothing if using the
   1908    standard interface.  */
   1909 
   1910 static void
   1911 svr4_handle_solib_event (void)
   1912 {
   1913   struct svr4_info *info = get_svr4_info ();
   1914   struct probe_and_action *pa;
   1915   enum probe_action action;
   1916   struct cleanup *old_chain, *usm_chain;
   1917   struct value *val = NULL;
   1918   CORE_ADDR pc, debug_base, lm = 0;
   1919   struct frame_info *frame = get_current_frame ();
   1920 
   1921   /* Do nothing if not using the probes interface.  */
   1922   if (info->probes_table == NULL)
   1923     return;
   1924 
   1925   /* If anything goes wrong we revert to the original linker
   1926      interface.  */
   1927   old_chain = make_cleanup (disable_probes_interface_cleanup, NULL);
   1928 
   1929   pc = regcache_read_pc (get_current_regcache ());
   1930   pa = solib_event_probe_at (info, pc);
   1931   if (pa == NULL)
   1932     {
   1933       do_cleanups (old_chain);
   1934       return;
   1935     }
   1936 
   1937   action = solib_event_probe_action (pa);
   1938   if (action == PROBES_INTERFACE_FAILED)
   1939     {
   1940       do_cleanups (old_chain);
   1941       return;
   1942     }
   1943 
   1944   if (action == DO_NOTHING)
   1945     {
   1946       discard_cleanups (old_chain);
   1947       return;
   1948     }
   1949 
   1950   /* evaluate_probe_argument looks up symbols in the dynamic linker
   1951      using find_pc_section.  find_pc_section is accelerated by a cache
   1952      called the section map.  The section map is invalidated every
   1953      time a shared library is loaded or unloaded, and if the inferior
   1954      is generating a lot of shared library events then the section map
   1955      will be updated every time svr4_handle_solib_event is called.
   1956      We called find_pc_section in svr4_create_solib_event_breakpoints,
   1957      so we can guarantee that the dynamic linker's sections are in the
   1958      section map.  We can therefore inhibit section map updates across
   1959      these calls to evaluate_probe_argument and save a lot of time.  */
   1960   inhibit_section_map_updates (current_program_space);
   1961   usm_chain = make_cleanup (resume_section_map_updates_cleanup,
   1962 			    current_program_space);
   1963 
   1964   TRY
   1965     {
   1966       val = evaluate_probe_argument (pa->probe, 1, frame);
   1967     }
   1968   CATCH (ex, RETURN_MASK_ERROR)
   1969     {
   1970       exception_print (gdb_stderr, ex);
   1971       val = NULL;
   1972     }
   1973   END_CATCH
   1974 
   1975   if (val == NULL)
   1976     {
   1977       do_cleanups (old_chain);
   1978       return;
   1979     }
   1980 
   1981   debug_base = value_as_address (val);
   1982   if (debug_base == 0)
   1983     {
   1984       do_cleanups (old_chain);
   1985       return;
   1986     }
   1987 
   1988   /* Always locate the debug struct, in case it moved.  */
   1989   info->debug_base = 0;
   1990   if (locate_base (info) == 0)
   1991     {
   1992       do_cleanups (old_chain);
   1993       return;
   1994     }
   1995 
   1996   /* GDB does not currently support libraries loaded via dlmopen
   1997      into namespaces other than the initial one.  We must ignore
   1998      any namespace other than the initial namespace here until
   1999      support for this is added to GDB.  */
   2000   if (debug_base != info->debug_base)
   2001     action = DO_NOTHING;
   2002 
   2003   if (action == UPDATE_OR_RELOAD)
   2004     {
   2005       TRY
   2006 	{
   2007 	  val = evaluate_probe_argument (pa->probe, 2, frame);
   2008 	}
   2009       CATCH (ex, RETURN_MASK_ERROR)
   2010 	{
   2011 	  exception_print (gdb_stderr, ex);
   2012 	  do_cleanups (old_chain);
   2013 	  return;
   2014 	}
   2015       END_CATCH
   2016 
   2017       if (val != NULL)
   2018 	lm = value_as_address (val);
   2019 
   2020       if (lm == 0)
   2021 	action = FULL_RELOAD;
   2022     }
   2023 
   2024   /* Resume section map updates.  */
   2025   do_cleanups (usm_chain);
   2026 
   2027   if (action == UPDATE_OR_RELOAD)
   2028     {
   2029       if (!solist_update_incremental (info, lm))
   2030 	action = FULL_RELOAD;
   2031     }
   2032 
   2033   if (action == FULL_RELOAD)
   2034     {
   2035       if (!solist_update_full (info))
   2036 	{
   2037 	  do_cleanups (old_chain);
   2038 	  return;
   2039 	}
   2040     }
   2041 
   2042   discard_cleanups (old_chain);
   2043 }
   2044 
   2045 /* Helper function for svr4_update_solib_event_breakpoints.  */
   2046 
   2047 static int
   2048 svr4_update_solib_event_breakpoint (struct breakpoint *b, void *arg)
   2049 {
   2050   struct bp_location *loc;
   2051 
   2052   if (b->type != bp_shlib_event)
   2053     {
   2054       /* Continue iterating.  */
   2055       return 0;
   2056     }
   2057 
   2058   for (loc = b->loc; loc != NULL; loc = loc->next)
   2059     {
   2060       struct svr4_info *info;
   2061       struct probe_and_action *pa;
   2062 
   2063       info = ((struct svr4_info *)
   2064 	      program_space_data (loc->pspace, solib_svr4_pspace_data));
   2065       if (info == NULL || info->probes_table == NULL)
   2066 	continue;
   2067 
   2068       pa = solib_event_probe_at (info, loc->address);
   2069       if (pa == NULL)
   2070 	continue;
   2071 
   2072       if (pa->action == DO_NOTHING)
   2073 	{
   2074 	  if (b->enable_state == bp_disabled && stop_on_solib_events)
   2075 	    enable_breakpoint (b);
   2076 	  else if (b->enable_state == bp_enabled && !stop_on_solib_events)
   2077 	    disable_breakpoint (b);
   2078 	}
   2079 
   2080       break;
   2081     }
   2082 
   2083   /* Continue iterating.  */
   2084   return 0;
   2085 }
   2086 
   2087 /* Enable or disable optional solib event breakpoints as appropriate.
   2088    Called whenever stop_on_solib_events is changed.  */
   2089 
   2090 static void
   2091 svr4_update_solib_event_breakpoints (void)
   2092 {
   2093   iterate_over_breakpoints (svr4_update_solib_event_breakpoint, NULL);
   2094 }
   2095 
   2096 /* Create and register solib event breakpoints.  PROBES is an array
   2097    of NUM_PROBES elements, each of which is vector of probes.  A
   2098    solib event breakpoint will be created and registered for each
   2099    probe.  */
   2100 
   2101 static void
   2102 svr4_create_probe_breakpoints (struct gdbarch *gdbarch,
   2103 			       VEC (probe_p) **probes,
   2104 			       struct objfile *objfile)
   2105 {
   2106   int i;
   2107 
   2108   for (i = 0; i < NUM_PROBES; i++)
   2109     {
   2110       enum probe_action action = probe_info[i].action;
   2111       struct probe *probe;
   2112       int ix;
   2113 
   2114       for (ix = 0;
   2115 	   VEC_iterate (probe_p, probes[i], ix, probe);
   2116 	   ++ix)
   2117 	{
   2118 	  CORE_ADDR address = get_probe_address (probe, objfile);
   2119 
   2120 	  create_solib_event_breakpoint (gdbarch, address);
   2121 	  register_solib_event_probe (probe, address, action);
   2122 	}
   2123     }
   2124 
   2125   svr4_update_solib_event_breakpoints ();
   2126 }
   2127 
   2128 /* Both the SunOS and the SVR4 dynamic linkers call a marker function
   2129    before and after mapping and unmapping shared libraries.  The sole
   2130    purpose of this method is to allow debuggers to set a breakpoint so
   2131    they can track these changes.
   2132 
   2133    Some versions of the glibc dynamic linker contain named probes
   2134    to allow more fine grained stopping.  Given the address of the
   2135    original marker function, this function attempts to find these
   2136    probes, and if found, sets breakpoints on those instead.  If the
   2137    probes aren't found, a single breakpoint is set on the original
   2138    marker function.  */
   2139 
   2140 static void
   2141 svr4_create_solib_event_breakpoints (struct gdbarch *gdbarch,
   2142 				     CORE_ADDR address)
   2143 {
   2144   struct obj_section *os;
   2145 
   2146   os = find_pc_section (address);
   2147   if (os != NULL)
   2148     {
   2149       int with_prefix;
   2150 
   2151       for (with_prefix = 0; with_prefix <= 1; with_prefix++)
   2152 	{
   2153 	  VEC (probe_p) *probes[NUM_PROBES];
   2154 	  int all_probes_found = 1;
   2155 	  int checked_can_use_probe_arguments = 0;
   2156 	  int i;
   2157 
   2158 	  memset (probes, 0, sizeof (probes));
   2159 	  for (i = 0; i < NUM_PROBES; i++)
   2160 	    {
   2161 	      const char *name = probe_info[i].name;
   2162 	      struct probe *p;
   2163 	      char buf[32];
   2164 
   2165 	      /* Fedora 17 and Red Hat Enterprise Linux 6.2-6.4
   2166 		 shipped with an early version of the probes code in
   2167 		 which the probes' names were prefixed with "rtld_"
   2168 		 and the "map_failed" probe did not exist.  The
   2169 		 locations of the probes are otherwise the same, so
   2170 		 we check for probes with prefixed names if probes
   2171 		 with unprefixed names are not present.  */
   2172 	      if (with_prefix)
   2173 		{
   2174 		  xsnprintf (buf, sizeof (buf), "rtld_%s", name);
   2175 		  name = buf;
   2176 		}
   2177 
   2178 	      probes[i] = find_probes_in_objfile (os->objfile, "rtld", name);
   2179 
   2180 	      /* The "map_failed" probe did not exist in early
   2181 		 versions of the probes code in which the probes'
   2182 		 names were prefixed with "rtld_".  */
   2183 	      if (strcmp (name, "rtld_map_failed") == 0)
   2184 		continue;
   2185 
   2186 	      if (VEC_empty (probe_p, probes[i]))
   2187 		{
   2188 		  all_probes_found = 0;
   2189 		  break;
   2190 		}
   2191 
   2192 	      /* Ensure probe arguments can be evaluated.  */
   2193 	      if (!checked_can_use_probe_arguments)
   2194 		{
   2195 		  p = VEC_index (probe_p, probes[i], 0);
   2196 		  if (!can_evaluate_probe_arguments (p))
   2197 		    {
   2198 		      all_probes_found = 0;
   2199 		      break;
   2200 		    }
   2201 		  checked_can_use_probe_arguments = 1;
   2202 		}
   2203 	    }
   2204 
   2205 	  if (all_probes_found)
   2206 	    svr4_create_probe_breakpoints (gdbarch, probes, os->objfile);
   2207 
   2208 	  for (i = 0; i < NUM_PROBES; i++)
   2209 	    VEC_free (probe_p, probes[i]);
   2210 
   2211 	  if (all_probes_found)
   2212 	    return;
   2213 	}
   2214     }
   2215 
   2216   create_solib_event_breakpoint (gdbarch, address);
   2217 }
   2218 
   2219 /* Helper function for gdb_bfd_lookup_symbol.  */
   2220 
   2221 static int
   2222 cmp_name_and_sec_flags (const asymbol *sym, const void *data)
   2223 {
   2224   return (strcmp (sym->name, (const char *) data) == 0
   2225 	  && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0);
   2226 }
   2227 /* Arrange for dynamic linker to hit breakpoint.
   2228 
   2229    Both the SunOS and the SVR4 dynamic linkers have, as part of their
   2230    debugger interface, support for arranging for the inferior to hit
   2231    a breakpoint after mapping in the shared libraries.  This function
   2232    enables that breakpoint.
   2233 
   2234    For SunOS, there is a special flag location (in_debugger) which we
   2235    set to 1.  When the dynamic linker sees this flag set, it will set
   2236    a breakpoint at a location known only to itself, after saving the
   2237    original contents of that place and the breakpoint address itself,
   2238    in it's own internal structures.  When we resume the inferior, it
   2239    will eventually take a SIGTRAP when it runs into the breakpoint.
   2240    We handle this (in a different place) by restoring the contents of
   2241    the breakpointed location (which is only known after it stops),
   2242    chasing around to locate the shared libraries that have been
   2243    loaded, then resuming.
   2244 
   2245    For SVR4, the debugger interface structure contains a member (r_brk)
   2246    which is statically initialized at the time the shared library is
   2247    built, to the offset of a function (_r_debug_state) which is guaran-
   2248    teed to be called once before mapping in a library, and again when
   2249    the mapping is complete.  At the time we are examining this member,
   2250    it contains only the unrelocated offset of the function, so we have
   2251    to do our own relocation.  Later, when the dynamic linker actually
   2252    runs, it relocates r_brk to be the actual address of _r_debug_state().
   2253 
   2254    The debugger interface structure also contains an enumeration which
   2255    is set to either RT_ADD or RT_DELETE prior to changing the mapping,
   2256    depending upon whether or not the library is being mapped or unmapped,
   2257    and then set to RT_CONSISTENT after the library is mapped/unmapped.  */
   2258 
   2259 static int
   2260 enable_break (struct svr4_info *info, int from_tty)
   2261 {
   2262   struct bound_minimal_symbol msymbol;
   2263   const char * const *bkpt_namep;
   2264   asection *interp_sect;
   2265   char *interp_name;
   2266   CORE_ADDR sym_addr;
   2267 
   2268   info->interp_text_sect_low = info->interp_text_sect_high = 0;
   2269   info->interp_plt_sect_low = info->interp_plt_sect_high = 0;
   2270 
   2271   /* If we already have a shared library list in the target, and
   2272      r_debug contains r_brk, set the breakpoint there - this should
   2273      mean r_brk has already been relocated.  Assume the dynamic linker
   2274      is the object containing r_brk.  */
   2275 
   2276   solib_add (NULL, from_tty, &current_target, auto_solib_add);
   2277   sym_addr = 0;
   2278   if (info->debug_base && solib_svr4_r_map (info) != 0)
   2279     sym_addr = solib_svr4_r_brk (info);
   2280 
   2281   if (sym_addr != 0)
   2282     {
   2283       struct obj_section *os;
   2284 
   2285       sym_addr = gdbarch_addr_bits_remove
   2286 	(target_gdbarch (), gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
   2287 							     sym_addr,
   2288 							     &current_target));
   2289 
   2290       /* On at least some versions of Solaris there's a dynamic relocation
   2291 	 on _r_debug.r_brk and SYM_ADDR may not be relocated yet, e.g., if
   2292 	 we get control before the dynamic linker has self-relocated.
   2293 	 Check if SYM_ADDR is in a known section, if it is assume we can
   2294 	 trust its value.  This is just a heuristic though, it could go away
   2295 	 or be replaced if it's getting in the way.
   2296 
   2297 	 On ARM we need to know whether the ISA of rtld_db_dlactivity (or
   2298 	 however it's spelled in your particular system) is ARM or Thumb.
   2299 	 That knowledge is encoded in the address, if it's Thumb the low bit
   2300 	 is 1.  However, we've stripped that info above and it's not clear
   2301 	 what all the consequences are of passing a non-addr_bits_remove'd
   2302 	 address to svr4_create_solib_event_breakpoints.  The call to
   2303 	 find_pc_section verifies we know about the address and have some
   2304 	 hope of computing the right kind of breakpoint to use (via
   2305 	 symbol info).  It does mean that GDB needs to be pointed at a
   2306 	 non-stripped version of the dynamic linker in order to obtain
   2307 	 information it already knows about.  Sigh.  */
   2308 
   2309       os = find_pc_section (sym_addr);
   2310       if (os != NULL)
   2311 	{
   2312 	  /* Record the relocated start and end address of the dynamic linker
   2313 	     text and plt section for svr4_in_dynsym_resolve_code.  */
   2314 	  bfd *tmp_bfd;
   2315 	  CORE_ADDR load_addr;
   2316 
   2317 	  tmp_bfd = os->objfile->obfd;
   2318 	  load_addr = ANOFFSET (os->objfile->section_offsets,
   2319 				SECT_OFF_TEXT (os->objfile));
   2320 
   2321 	  interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
   2322 	  if (interp_sect)
   2323 	    {
   2324 	      info->interp_text_sect_low =
   2325 		bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
   2326 	      info->interp_text_sect_high =
   2327 		info->interp_text_sect_low
   2328 		+ bfd_section_size (tmp_bfd, interp_sect);
   2329 	    }
   2330 	  interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt");
   2331 	  if (interp_sect)
   2332 	    {
   2333 	      info->interp_plt_sect_low =
   2334 		bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
   2335 	      info->interp_plt_sect_high =
   2336 		info->interp_plt_sect_low
   2337 		+ bfd_section_size (tmp_bfd, interp_sect);
   2338 	    }
   2339 
   2340 	  svr4_create_solib_event_breakpoints (target_gdbarch (), sym_addr);
   2341 	  return 1;
   2342 	}
   2343     }
   2344 
   2345   /* Find the program interpreter; if not found, warn the user and drop
   2346      into the old breakpoint at symbol code.  */
   2347   interp_name = find_program_interpreter ();
   2348   if (interp_name)
   2349     {
   2350       CORE_ADDR load_addr = 0;
   2351       int load_addr_found = 0;
   2352       int loader_found_in_list = 0;
   2353       struct so_list *so;
   2354       bfd *tmp_bfd = NULL;
   2355       struct target_ops *tmp_bfd_target;
   2356 
   2357       sym_addr = 0;
   2358 
   2359       /* Now we need to figure out where the dynamic linker was
   2360          loaded so that we can load its symbols and place a breakpoint
   2361          in the dynamic linker itself.
   2362 
   2363          This address is stored on the stack.  However, I've been unable
   2364          to find any magic formula to find it for Solaris (appears to
   2365          be trivial on GNU/Linux).  Therefore, we have to try an alternate
   2366          mechanism to find the dynamic linker's base address.  */
   2367 
   2368       TRY
   2369         {
   2370 	  tmp_bfd = solib_bfd_open (interp_name);
   2371 	}
   2372       CATCH (ex, RETURN_MASK_ALL)
   2373 	{
   2374 	}
   2375       END_CATCH
   2376 
   2377       if (tmp_bfd == NULL)
   2378 	goto bkpt_at_symbol;
   2379 
   2380       /* Now convert the TMP_BFD into a target.  That way target, as
   2381          well as BFD operations can be used.  */
   2382       tmp_bfd_target = target_bfd_reopen (tmp_bfd);
   2383       /* target_bfd_reopen acquired its own reference, so we can
   2384          release ours now.  */
   2385       gdb_bfd_unref (tmp_bfd);
   2386 
   2387       /* On a running target, we can get the dynamic linker's base
   2388          address from the shared library table.  */
   2389       so = master_so_list ();
   2390       while (so)
   2391 	{
   2392 	  if (svr4_same_1 (interp_name, so->so_original_name))
   2393 	    {
   2394 	      load_addr_found = 1;
   2395 	      loader_found_in_list = 1;
   2396 	      load_addr = lm_addr_check (so, tmp_bfd);
   2397 	      break;
   2398 	    }
   2399 	  so = so->next;
   2400 	}
   2401 
   2402       /* If we were not able to find the base address of the loader
   2403          from our so_list, then try using the AT_BASE auxilliary entry.  */
   2404       if (!load_addr_found)
   2405         if (target_auxv_search (&current_target, AT_BASE, &load_addr) > 0)
   2406 	  {
   2407 	    int addr_bit = gdbarch_addr_bit (target_gdbarch ());
   2408 
   2409 	    /* Ensure LOAD_ADDR has proper sign in its possible upper bits so
   2410 	       that `+ load_addr' will overflow CORE_ADDR width not creating
   2411 	       invalid addresses like 0x101234567 for 32bit inferiors on 64bit
   2412 	       GDB.  */
   2413 
   2414 	    if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
   2415 	      {
   2416 		CORE_ADDR space_size = (CORE_ADDR) 1 << addr_bit;
   2417 		CORE_ADDR tmp_entry_point = exec_entry_point (tmp_bfd,
   2418 							      tmp_bfd_target);
   2419 
   2420 		gdb_assert (load_addr < space_size);
   2421 
   2422 		/* TMP_ENTRY_POINT exceeding SPACE_SIZE would be for prelinked
   2423 		   64bit ld.so with 32bit executable, it should not happen.  */
   2424 
   2425 		if (tmp_entry_point < space_size
   2426 		    && tmp_entry_point + load_addr >= space_size)
   2427 		  load_addr -= space_size;
   2428 	      }
   2429 
   2430 	    load_addr_found = 1;
   2431 	  }
   2432 
   2433       /* Otherwise we find the dynamic linker's base address by examining
   2434 	 the current pc (which should point at the entry point for the
   2435 	 dynamic linker) and subtracting the offset of the entry point.
   2436 
   2437          This is more fragile than the previous approaches, but is a good
   2438          fallback method because it has actually been working well in
   2439          most cases.  */
   2440       if (!load_addr_found)
   2441 	{
   2442 	  struct regcache *regcache
   2443 	    = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
   2444 
   2445 	  load_addr = (regcache_read_pc (regcache)
   2446 		       - exec_entry_point (tmp_bfd, tmp_bfd_target));
   2447 	}
   2448 
   2449       if (!loader_found_in_list)
   2450 	{
   2451 	  info->debug_loader_name = xstrdup (interp_name);
   2452 	  info->debug_loader_offset_p = 1;
   2453 	  info->debug_loader_offset = load_addr;
   2454 	  solib_add (NULL, from_tty, &current_target, auto_solib_add);
   2455 	}
   2456 
   2457       /* Record the relocated start and end address of the dynamic linker
   2458          text and plt section for svr4_in_dynsym_resolve_code.  */
   2459       interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
   2460       if (interp_sect)
   2461 	{
   2462 	  info->interp_text_sect_low =
   2463 	    bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
   2464 	  info->interp_text_sect_high =
   2465 	    info->interp_text_sect_low
   2466 	    + bfd_section_size (tmp_bfd, interp_sect);
   2467 	}
   2468       interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt");
   2469       if (interp_sect)
   2470 	{
   2471 	  info->interp_plt_sect_low =
   2472 	    bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
   2473 	  info->interp_plt_sect_high =
   2474 	    info->interp_plt_sect_low
   2475 	    + bfd_section_size (tmp_bfd, interp_sect);
   2476 	}
   2477 
   2478       /* Now try to set a breakpoint in the dynamic linker.  */
   2479       for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
   2480 	{
   2481 	  sym_addr = gdb_bfd_lookup_symbol (tmp_bfd, cmp_name_and_sec_flags,
   2482 					    *bkpt_namep);
   2483 	  if (sym_addr != 0)
   2484 	    break;
   2485 	}
   2486 
   2487       if (sym_addr != 0)
   2488 	/* Convert 'sym_addr' from a function pointer to an address.
   2489 	   Because we pass tmp_bfd_target instead of the current
   2490 	   target, this will always produce an unrelocated value.  */
   2491 	sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
   2492 						       sym_addr,
   2493 						       tmp_bfd_target);
   2494 
   2495       /* We're done with both the temporary bfd and target.  Closing
   2496          the target closes the underlying bfd, because it holds the
   2497          only remaining reference.  */
   2498       target_close (tmp_bfd_target);
   2499 
   2500       if (sym_addr != 0)
   2501 	{
   2502 	  svr4_create_solib_event_breakpoints (target_gdbarch (),
   2503 					       load_addr + sym_addr);
   2504 	  xfree (interp_name);
   2505 	  return 1;
   2506 	}
   2507 
   2508       /* For whatever reason we couldn't set a breakpoint in the dynamic
   2509          linker.  Warn and drop into the old code.  */
   2510     bkpt_at_symbol:
   2511       xfree (interp_name);
   2512       warning (_("Unable to find dynamic linker breakpoint function.\n"
   2513                "GDB will be unable to debug shared library initializers\n"
   2514                "and track explicitly loaded dynamic code."));
   2515     }
   2516 
   2517   /* Scan through the lists of symbols, trying to look up the symbol and
   2518      set a breakpoint there.  Terminate loop when we/if we succeed.  */
   2519 
   2520   for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
   2521     {
   2522       msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
   2523       if ((msymbol.minsym != NULL)
   2524 	  && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
   2525 	{
   2526 	  sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
   2527 	  sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
   2528 							 sym_addr,
   2529 							 &current_target);
   2530 	  svr4_create_solib_event_breakpoints (target_gdbarch (), sym_addr);
   2531 	  return 1;
   2532 	}
   2533     }
   2534 
   2535   if (interp_name != NULL && !current_inferior ()->attach_flag)
   2536     {
   2537       for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
   2538 	{
   2539 	  msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
   2540 	  if ((msymbol.minsym != NULL)
   2541 	      && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
   2542 	    {
   2543 	      sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
   2544 	      sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
   2545 							     sym_addr,
   2546 							     &current_target);
   2547 	      svr4_create_solib_event_breakpoints (target_gdbarch (), sym_addr);
   2548 	      return 1;
   2549 	    }
   2550 	}
   2551     }
   2552   return 0;
   2553 }
   2554 
   2555 /* Implement the "special_symbol_handling" target_so_ops method.  */
   2556 
   2557 static void
   2558 svr4_special_symbol_handling (void)
   2559 {
   2560   /* Nothing to do.  */
   2561 }
   2562 
   2563 /* Read the ELF program headers from ABFD.  Return the contents and
   2564    set *PHDRS_SIZE to the size of the program headers.  */
   2565 
   2566 static gdb_byte *
   2567 read_program_headers_from_bfd (bfd *abfd, int *phdrs_size)
   2568 {
   2569   Elf_Internal_Ehdr *ehdr;
   2570   gdb_byte *buf;
   2571 
   2572   ehdr = elf_elfheader (abfd);
   2573 
   2574   *phdrs_size = ehdr->e_phnum * ehdr->e_phentsize;
   2575   if (*phdrs_size == 0)
   2576     return NULL;
   2577 
   2578   buf = (gdb_byte *) xmalloc (*phdrs_size);
   2579   if (bfd_seek (abfd, ehdr->e_phoff, SEEK_SET) != 0
   2580       || bfd_bread (buf, *phdrs_size, abfd) != *phdrs_size)
   2581     {
   2582       xfree (buf);
   2583       return NULL;
   2584     }
   2585 
   2586   return buf;
   2587 }
   2588 
   2589 /* Return 1 and fill *DISPLACEMENTP with detected PIE offset of inferior
   2590    exec_bfd.  Otherwise return 0.
   2591 
   2592    We relocate all of the sections by the same amount.  This
   2593    behavior is mandated by recent editions of the System V ABI.
   2594    According to the System V Application Binary Interface,
   2595    Edition 4.1, page 5-5:
   2596 
   2597      ...  Though the system chooses virtual addresses for
   2598      individual processes, it maintains the segments' relative
   2599      positions.  Because position-independent code uses relative
   2600      addressesing between segments, the difference between
   2601      virtual addresses in memory must match the difference
   2602      between virtual addresses in the file.  The difference
   2603      between the virtual address of any segment in memory and
   2604      the corresponding virtual address in the file is thus a
   2605      single constant value for any one executable or shared
   2606      object in a given process.  This difference is the base
   2607      address.  One use of the base address is to relocate the
   2608      memory image of the program during dynamic linking.
   2609 
   2610    The same language also appears in Edition 4.0 of the System V
   2611    ABI and is left unspecified in some of the earlier editions.
   2612 
   2613    Decide if the objfile needs to be relocated.  As indicated above, we will
   2614    only be here when execution is stopped.  But during attachment PC can be at
   2615    arbitrary address therefore regcache_read_pc can be misleading (contrary to
   2616    the auxv AT_ENTRY value).  Moreover for executable with interpreter section
   2617    regcache_read_pc would point to the interpreter and not the main executable.
   2618 
   2619    So, to summarize, relocations are necessary when the start address obtained
   2620    from the executable is different from the address in auxv AT_ENTRY entry.
   2621 
   2622    [ The astute reader will note that we also test to make sure that
   2623      the executable in question has the DYNAMIC flag set.  It is my
   2624      opinion that this test is unnecessary (undesirable even).  It
   2625      was added to avoid inadvertent relocation of an executable
   2626      whose e_type member in the ELF header is not ET_DYN.  There may
   2627      be a time in the future when it is desirable to do relocations
   2628      on other types of files as well in which case this condition
   2629      should either be removed or modified to accomodate the new file
   2630      type.  - Kevin, Nov 2000. ]  */
   2631 
   2632 static int
   2633 svr4_exec_displacement (CORE_ADDR *displacementp)
   2634 {
   2635   /* ENTRY_POINT is a possible function descriptor - before
   2636      a call to gdbarch_convert_from_func_ptr_addr.  */
   2637   CORE_ADDR entry_point, exec_displacement;
   2638 
   2639   if (exec_bfd == NULL)
   2640     return 0;
   2641 
   2642   /* Therefore for ELF it is ET_EXEC and not ET_DYN.  Both shared libraries
   2643      being executed themselves and PIE (Position Independent Executable)
   2644      executables are ET_DYN.  */
   2645 
   2646   if ((bfd_get_file_flags (exec_bfd) & DYNAMIC) == 0)
   2647     return 0;
   2648 
   2649   if (target_auxv_search (&current_target, AT_ENTRY, &entry_point) <= 0)
   2650     return 0;
   2651 
   2652   exec_displacement = entry_point - bfd_get_start_address (exec_bfd);
   2653 
   2654   /* Verify the EXEC_DISPLACEMENT candidate complies with the required page
   2655      alignment.  It is cheaper than the program headers comparison below.  */
   2656 
   2657   if (bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour)
   2658     {
   2659       const struct elf_backend_data *elf = get_elf_backend_data (exec_bfd);
   2660 
   2661       /* p_align of PT_LOAD segments does not specify any alignment but
   2662 	 only congruency of addresses:
   2663 	   p_offset % p_align == p_vaddr % p_align
   2664 	 Kernel is free to load the executable with lower alignment.  */
   2665 
   2666       if ((exec_displacement & (elf->minpagesize - 1)) != 0)
   2667 	return 0;
   2668     }
   2669 
   2670   /* Verify that the auxilliary vector describes the same file as exec_bfd, by
   2671      comparing their program headers.  If the program headers in the auxilliary
   2672      vector do not match the program headers in the executable, then we are
   2673      looking at a different file than the one used by the kernel - for
   2674      instance, "gdb program" connected to "gdbserver :PORT ld.so program".  */
   2675 
   2676   if (bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour)
   2677     {
   2678       /* Be optimistic and clear OK only if GDB was able to verify the headers
   2679 	 really do not match.  */
   2680       int phdrs_size, phdrs2_size, ok = 1;
   2681       gdb_byte *buf, *buf2;
   2682       int arch_size;
   2683 
   2684       buf = read_program_header (-1, &phdrs_size, &arch_size, NULL);
   2685       buf2 = read_program_headers_from_bfd (exec_bfd, &phdrs2_size);
   2686       if (buf != NULL && buf2 != NULL)
   2687 	{
   2688 	  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
   2689 
   2690 	  /* We are dealing with three different addresses.  EXEC_BFD
   2691 	     represents current address in on-disk file.  target memory content
   2692 	     may be different from EXEC_BFD as the file may have been prelinked
   2693 	     to a different address after the executable has been loaded.
   2694 	     Moreover the address of placement in target memory can be
   2695 	     different from what the program headers in target memory say -
   2696 	     this is the goal of PIE.
   2697 
   2698 	     Detected DISPLACEMENT covers both the offsets of PIE placement and
   2699 	     possible new prelink performed after start of the program.  Here
   2700 	     relocate BUF and BUF2 just by the EXEC_BFD vs. target memory
   2701 	     content offset for the verification purpose.  */
   2702 
   2703 	  if (phdrs_size != phdrs2_size
   2704 	      || bfd_get_arch_size (exec_bfd) != arch_size)
   2705 	    ok = 0;
   2706 	  else if (arch_size == 32
   2707 		   && phdrs_size >= sizeof (Elf32_External_Phdr)
   2708 	           && phdrs_size % sizeof (Elf32_External_Phdr) == 0)
   2709 	    {
   2710 	      Elf_Internal_Ehdr *ehdr2 = elf_tdata (exec_bfd)->elf_header;
   2711 	      Elf_Internal_Phdr *phdr2 = elf_tdata (exec_bfd)->phdr;
   2712 	      CORE_ADDR displacement = 0;
   2713 	      int i;
   2714 
   2715 	      /* DISPLACEMENT could be found more easily by the difference of
   2716 		 ehdr2->e_entry.  But we haven't read the ehdr yet, and we
   2717 		 already have enough information to compute that displacement
   2718 		 with what we've read.  */
   2719 
   2720 	      for (i = 0; i < ehdr2->e_phnum; i++)
   2721 		if (phdr2[i].p_type == PT_LOAD)
   2722 		  {
   2723 		    Elf32_External_Phdr *phdrp;
   2724 		    gdb_byte *buf_vaddr_p, *buf_paddr_p;
   2725 		    CORE_ADDR vaddr, paddr;
   2726 		    CORE_ADDR displacement_vaddr = 0;
   2727 		    CORE_ADDR displacement_paddr = 0;
   2728 
   2729 		    phdrp = &((Elf32_External_Phdr *) buf)[i];
   2730 		    buf_vaddr_p = (gdb_byte *) &phdrp->p_vaddr;
   2731 		    buf_paddr_p = (gdb_byte *) &phdrp->p_paddr;
   2732 
   2733 		    vaddr = extract_unsigned_integer (buf_vaddr_p, 4,
   2734 						      byte_order);
   2735 		    displacement_vaddr = vaddr - phdr2[i].p_vaddr;
   2736 
   2737 		    paddr = extract_unsigned_integer (buf_paddr_p, 4,
   2738 						      byte_order);
   2739 		    displacement_paddr = paddr - phdr2[i].p_paddr;
   2740 
   2741 		    if (displacement_vaddr == displacement_paddr)
   2742 		      displacement = displacement_vaddr;
   2743 
   2744 		    break;
   2745 		  }
   2746 
   2747 	      /* Now compare BUF and BUF2 with optional DISPLACEMENT.  */
   2748 
   2749 	      for (i = 0; i < phdrs_size / sizeof (Elf32_External_Phdr); i++)
   2750 		{
   2751 		  Elf32_External_Phdr *phdrp;
   2752 		  Elf32_External_Phdr *phdr2p;
   2753 		  gdb_byte *buf_vaddr_p, *buf_paddr_p;
   2754 		  CORE_ADDR vaddr, paddr;
   2755 		  asection *plt2_asect;
   2756 
   2757 		  phdrp = &((Elf32_External_Phdr *) buf)[i];
   2758 		  buf_vaddr_p = (gdb_byte *) &phdrp->p_vaddr;
   2759 		  buf_paddr_p = (gdb_byte *) &phdrp->p_paddr;
   2760 		  phdr2p = &((Elf32_External_Phdr *) buf2)[i];
   2761 
   2762 		  /* PT_GNU_STACK is an exception by being never relocated by
   2763 		     prelink as its addresses are always zero.  */
   2764 
   2765 		  if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0)
   2766 		    continue;
   2767 
   2768 		  /* Check also other adjustment combinations - PR 11786.  */
   2769 
   2770 		  vaddr = extract_unsigned_integer (buf_vaddr_p, 4,
   2771 						    byte_order);
   2772 		  vaddr -= displacement;
   2773 		  store_unsigned_integer (buf_vaddr_p, 4, byte_order, vaddr);
   2774 
   2775 		  paddr = extract_unsigned_integer (buf_paddr_p, 4,
   2776 						    byte_order);
   2777 		  paddr -= displacement;
   2778 		  store_unsigned_integer (buf_paddr_p, 4, byte_order, paddr);
   2779 
   2780 		  if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0)
   2781 		    continue;
   2782 
   2783 		  /* Strip modifies the flags and alignment of PT_GNU_RELRO.
   2784 		     CentOS-5 has problems with filesz, memsz as well.
   2785 		     See PR 11786.  */
   2786 		  if (phdr2[i].p_type == PT_GNU_RELRO)
   2787 		    {
   2788 		      Elf32_External_Phdr tmp_phdr = *phdrp;
   2789 		      Elf32_External_Phdr tmp_phdr2 = *phdr2p;
   2790 
   2791 		      memset (tmp_phdr.p_filesz, 0, 4);
   2792 		      memset (tmp_phdr.p_memsz, 0, 4);
   2793 		      memset (tmp_phdr.p_flags, 0, 4);
   2794 		      memset (tmp_phdr.p_align, 0, 4);
   2795 		      memset (tmp_phdr2.p_filesz, 0, 4);
   2796 		      memset (tmp_phdr2.p_memsz, 0, 4);
   2797 		      memset (tmp_phdr2.p_flags, 0, 4);
   2798 		      memset (tmp_phdr2.p_align, 0, 4);
   2799 
   2800 		      if (memcmp (&tmp_phdr, &tmp_phdr2, sizeof (tmp_phdr))
   2801 			  == 0)
   2802 			continue;
   2803 		    }
   2804 
   2805 		  /* prelink can convert .plt SHT_NOBITS to SHT_PROGBITS.  */
   2806 		  plt2_asect = bfd_get_section_by_name (exec_bfd, ".plt");
   2807 		  if (plt2_asect)
   2808 		    {
   2809 		      int content2;
   2810 		      gdb_byte *buf_filesz_p = (gdb_byte *) &phdrp->p_filesz;
   2811 		      CORE_ADDR filesz;
   2812 
   2813 		      content2 = (bfd_get_section_flags (exec_bfd, plt2_asect)
   2814 				  & SEC_HAS_CONTENTS) != 0;
   2815 
   2816 		      filesz = extract_unsigned_integer (buf_filesz_p, 4,
   2817 							 byte_order);
   2818 
   2819 		      /* PLT2_ASECT is from on-disk file (exec_bfd) while
   2820 			 FILESZ is from the in-memory image.  */
   2821 		      if (content2)
   2822 			filesz += bfd_get_section_size (plt2_asect);
   2823 		      else
   2824 			filesz -= bfd_get_section_size (plt2_asect);
   2825 
   2826 		      store_unsigned_integer (buf_filesz_p, 4, byte_order,
   2827 					      filesz);
   2828 
   2829 		      if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0)
   2830 			continue;
   2831 		    }
   2832 
   2833 		  ok = 0;
   2834 		  break;
   2835 		}
   2836 	    }
   2837 	  else if (arch_size == 64
   2838 		   && phdrs_size >= sizeof (Elf64_External_Phdr)
   2839 	           && phdrs_size % sizeof (Elf64_External_Phdr) == 0)
   2840 	    {
   2841 	      Elf_Internal_Ehdr *ehdr2 = elf_tdata (exec_bfd)->elf_header;
   2842 	      Elf_Internal_Phdr *phdr2 = elf_tdata (exec_bfd)->phdr;
   2843 	      CORE_ADDR displacement = 0;
   2844 	      int i;
   2845 
   2846 	      /* DISPLACEMENT could be found more easily by the difference of
   2847 		 ehdr2->e_entry.  But we haven't read the ehdr yet, and we
   2848 		 already have enough information to compute that displacement
   2849 		 with what we've read.  */
   2850 
   2851 	      for (i = 0; i < ehdr2->e_phnum; i++)
   2852 		if (phdr2[i].p_type == PT_LOAD)
   2853 		  {
   2854 		    Elf64_External_Phdr *phdrp;
   2855 		    gdb_byte *buf_vaddr_p, *buf_paddr_p;
   2856 		    CORE_ADDR vaddr, paddr;
   2857 		    CORE_ADDR displacement_vaddr = 0;
   2858 		    CORE_ADDR displacement_paddr = 0;
   2859 
   2860 		    phdrp = &((Elf64_External_Phdr *) buf)[i];
   2861 		    buf_vaddr_p = (gdb_byte *) &phdrp->p_vaddr;
   2862 		    buf_paddr_p = (gdb_byte *) &phdrp->p_paddr;
   2863 
   2864 		    vaddr = extract_unsigned_integer (buf_vaddr_p, 8,
   2865 						      byte_order);
   2866 		    displacement_vaddr = vaddr - phdr2[i].p_vaddr;
   2867 
   2868 		    paddr = extract_unsigned_integer (buf_paddr_p, 8,
   2869 						      byte_order);
   2870 		    displacement_paddr = paddr - phdr2[i].p_paddr;
   2871 
   2872 		    if (displacement_vaddr == displacement_paddr)
   2873 		      displacement = displacement_vaddr;
   2874 
   2875 		    break;
   2876 		  }
   2877 
   2878 	      /* Now compare BUF and BUF2 with optional DISPLACEMENT.  */
   2879 
   2880 	      for (i = 0; i < phdrs_size / sizeof (Elf64_External_Phdr); i++)
   2881 		{
   2882 		  Elf64_External_Phdr *phdrp;
   2883 		  Elf64_External_Phdr *phdr2p;
   2884 		  gdb_byte *buf_vaddr_p, *buf_paddr_p;
   2885 		  CORE_ADDR vaddr, paddr;
   2886 		  asection *plt2_asect;
   2887 
   2888 		  phdrp = &((Elf64_External_Phdr *) buf)[i];
   2889 		  buf_vaddr_p = (gdb_byte *) &phdrp->p_vaddr;
   2890 		  buf_paddr_p = (gdb_byte *) &phdrp->p_paddr;
   2891 		  phdr2p = &((Elf64_External_Phdr *) buf2)[i];
   2892 
   2893 		  /* PT_GNU_STACK is an exception by being never relocated by
   2894 		     prelink as its addresses are always zero.  */
   2895 
   2896 		  if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0)
   2897 		    continue;
   2898 
   2899 		  /* Check also other adjustment combinations - PR 11786.  */
   2900 
   2901 		  vaddr = extract_unsigned_integer (buf_vaddr_p, 8,
   2902 						    byte_order);
   2903 		  vaddr -= displacement;
   2904 		  store_unsigned_integer (buf_vaddr_p, 8, byte_order, vaddr);
   2905 
   2906 		  paddr = extract_unsigned_integer (buf_paddr_p, 8,
   2907 						    byte_order);
   2908 		  paddr -= displacement;
   2909 		  store_unsigned_integer (buf_paddr_p, 8, byte_order, paddr);
   2910 
   2911 		  if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0)
   2912 		    continue;
   2913 
   2914 		  /* Strip modifies the flags and alignment of PT_GNU_RELRO.
   2915 		     CentOS-5 has problems with filesz, memsz as well.
   2916 		     See PR 11786.  */
   2917 		  if (phdr2[i].p_type == PT_GNU_RELRO)
   2918 		    {
   2919 		      Elf64_External_Phdr tmp_phdr = *phdrp;
   2920 		      Elf64_External_Phdr tmp_phdr2 = *phdr2p;
   2921 
   2922 		      memset (tmp_phdr.p_filesz, 0, 8);
   2923 		      memset (tmp_phdr.p_memsz, 0, 8);
   2924 		      memset (tmp_phdr.p_flags, 0, 4);
   2925 		      memset (tmp_phdr.p_align, 0, 8);
   2926 		      memset (tmp_phdr2.p_filesz, 0, 8);
   2927 		      memset (tmp_phdr2.p_memsz, 0, 8);
   2928 		      memset (tmp_phdr2.p_flags, 0, 4);
   2929 		      memset (tmp_phdr2.p_align, 0, 8);
   2930 
   2931 		      if (memcmp (&tmp_phdr, &tmp_phdr2, sizeof (tmp_phdr))
   2932 			  == 0)
   2933 			continue;
   2934 		    }
   2935 
   2936 		  /* prelink can convert .plt SHT_NOBITS to SHT_PROGBITS.  */
   2937 		  plt2_asect = bfd_get_section_by_name (exec_bfd, ".plt");
   2938 		  if (plt2_asect)
   2939 		    {
   2940 		      int content2;
   2941 		      gdb_byte *buf_filesz_p = (gdb_byte *) &phdrp->p_filesz;
   2942 		      CORE_ADDR filesz;
   2943 
   2944 		      content2 = (bfd_get_section_flags (exec_bfd, plt2_asect)
   2945 				  & SEC_HAS_CONTENTS) != 0;
   2946 
   2947 		      filesz = extract_unsigned_integer (buf_filesz_p, 8,
   2948 							 byte_order);
   2949 
   2950 		      /* PLT2_ASECT is from on-disk file (exec_bfd) while
   2951 			 FILESZ is from the in-memory image.  */
   2952 		      if (content2)
   2953 			filesz += bfd_get_section_size (plt2_asect);
   2954 		      else
   2955 			filesz -= bfd_get_section_size (plt2_asect);
   2956 
   2957 		      store_unsigned_integer (buf_filesz_p, 8, byte_order,
   2958 					      filesz);
   2959 
   2960 		      if (memcmp (phdrp, phdr2p, sizeof (*phdrp)) == 0)
   2961 			continue;
   2962 		    }
   2963 
   2964 		  ok = 0;
   2965 		  break;
   2966 		}
   2967 	    }
   2968 	  else
   2969 	    ok = 0;
   2970 	}
   2971 
   2972       xfree (buf);
   2973       xfree (buf2);
   2974 
   2975       if (!ok)
   2976 	return 0;
   2977     }
   2978 
   2979   if (info_verbose)
   2980     {
   2981       /* It can be printed repeatedly as there is no easy way to check
   2982 	 the executable symbols/file has been already relocated to
   2983 	 displacement.  */
   2984 
   2985       printf_unfiltered (_("Using PIE (Position Independent Executable) "
   2986 			   "displacement %s for \"%s\".\n"),
   2987 			 paddress (target_gdbarch (), exec_displacement),
   2988 			 bfd_get_filename (exec_bfd));
   2989     }
   2990 
   2991   *displacementp = exec_displacement;
   2992   return 1;
   2993 }
   2994 
   2995 /* Relocate the main executable.  This function should be called upon
   2996    stopping the inferior process at the entry point to the program.
   2997    The entry point from BFD is compared to the AT_ENTRY of AUXV and if they are
   2998    different, the main executable is relocated by the proper amount.  */
   2999 
   3000 static void
   3001 svr4_relocate_main_executable (void)
   3002 {
   3003   CORE_ADDR displacement;
   3004 
   3005   /* If we are re-running this executable, SYMFILE_OBJFILE->SECTION_OFFSETS
   3006      probably contains the offsets computed using the PIE displacement
   3007      from the previous run, which of course are irrelevant for this run.
   3008      So we need to determine the new PIE displacement and recompute the
   3009      section offsets accordingly, even if SYMFILE_OBJFILE->SECTION_OFFSETS
   3010      already contains pre-computed offsets.
   3011 
   3012      If we cannot compute the PIE displacement, either:
   3013 
   3014        - The executable is not PIE.
   3015 
   3016        - SYMFILE_OBJFILE does not match the executable started in the target.
   3017 	 This can happen for main executable symbols loaded at the host while
   3018 	 `ld.so --ld-args main-executable' is loaded in the target.
   3019 
   3020      Then we leave the section offsets untouched and use them as is for
   3021      this run.  Either:
   3022 
   3023        - These section offsets were properly reset earlier, and thus
   3024 	 already contain the correct values.  This can happen for instance
   3025 	 when reconnecting via the remote protocol to a target that supports
   3026 	 the `qOffsets' packet.
   3027 
   3028        - The section offsets were not reset earlier, and the best we can
   3029 	 hope is that the old offsets are still applicable to the new run.  */
   3030 
   3031   if (! svr4_exec_displacement (&displacement))
   3032     return;
   3033 
   3034   /* Even DISPLACEMENT 0 is a valid new difference of in-memory vs. in-file
   3035      addresses.  */
   3036 
   3037   if (symfile_objfile)
   3038     {
   3039       struct section_offsets *new_offsets;
   3040       int i;
   3041 
   3042       new_offsets = XALLOCAVEC (struct section_offsets,
   3043 				symfile_objfile->num_sections);
   3044 
   3045       for (i = 0; i < symfile_objfile->num_sections; i++)
   3046 	new_offsets->offsets[i] = displacement;
   3047 
   3048       objfile_relocate (symfile_objfile, new_offsets);
   3049     }
   3050   else if (exec_bfd)
   3051     {
   3052       asection *asect;
   3053 
   3054       for (asect = exec_bfd->sections; asect != NULL; asect = asect->next)
   3055 	exec_set_section_address (bfd_get_filename (exec_bfd), asect->index,
   3056 				  (bfd_section_vma (exec_bfd, asect)
   3057 				   + displacement));
   3058     }
   3059 }
   3060 
   3061 /* Implement the "create_inferior_hook" target_solib_ops method.
   3062 
   3063    For SVR4 executables, this first instruction is either the first
   3064    instruction in the dynamic linker (for dynamically linked
   3065    executables) or the instruction at "start" for statically linked
   3066    executables.  For dynamically linked executables, the system
   3067    first exec's /lib/libc.so.N, which contains the dynamic linker,
   3068    and starts it running.  The dynamic linker maps in any needed
   3069    shared libraries, maps in the actual user executable, and then
   3070    jumps to "start" in the user executable.
   3071 
   3072    We can arrange to cooperate with the dynamic linker to discover the
   3073    names of shared libraries that are dynamically linked, and the base
   3074    addresses to which they are linked.
   3075 
   3076    This function is responsible for discovering those names and
   3077    addresses, and saving sufficient information about them to allow
   3078    their symbols to be read at a later time.  */
   3079 
   3080 static void
   3081 svr4_solib_create_inferior_hook (int from_tty)
   3082 {
   3083   struct svr4_info *info;
   3084 
   3085   info = get_svr4_info ();
   3086 
   3087   /* Clear the probes-based interface's state.  */
   3088   free_probes_table (info);
   3089   free_solib_list (info);
   3090 
   3091   /* Relocate the main executable if necessary.  */
   3092   svr4_relocate_main_executable ();
   3093 
   3094   /* No point setting a breakpoint in the dynamic linker if we can't
   3095      hit it (e.g., a core file, or a trace file).  */
   3096   if (!target_has_execution)
   3097     return;
   3098 
   3099   if (!svr4_have_link_map_offsets ())
   3100     return;
   3101 
   3102   if (!enable_break (info, from_tty))
   3103     return;
   3104 }
   3105 
   3106 static void
   3107 svr4_clear_solib (void)
   3108 {
   3109   struct svr4_info *info;
   3110 
   3111   info = get_svr4_info ();
   3112   info->debug_base = 0;
   3113   info->debug_loader_offset_p = 0;
   3114   info->debug_loader_offset = 0;
   3115   xfree (info->debug_loader_name);
   3116   info->debug_loader_name = NULL;
   3117 }
   3118 
   3119 /* Clear any bits of ADDR that wouldn't fit in a target-format
   3120    data pointer.  "Data pointer" here refers to whatever sort of
   3121    address the dynamic linker uses to manage its sections.  At the
   3122    moment, we don't support shared libraries on any processors where
   3123    code and data pointers are different sizes.
   3124 
   3125    This isn't really the right solution.  What we really need here is
   3126    a way to do arithmetic on CORE_ADDR values that respects the
   3127    natural pointer/address correspondence.  (For example, on the MIPS,
   3128    converting a 32-bit pointer to a 64-bit CORE_ADDR requires you to
   3129    sign-extend the value.  There, simply truncating the bits above
   3130    gdbarch_ptr_bit, as we do below, is no good.)  This should probably
   3131    be a new gdbarch method or something.  */
   3132 static CORE_ADDR
   3133 svr4_truncate_ptr (CORE_ADDR addr)
   3134 {
   3135   if (gdbarch_ptr_bit (target_gdbarch ()) == sizeof (CORE_ADDR) * 8)
   3136     /* We don't need to truncate anything, and the bit twiddling below
   3137        will fail due to overflow problems.  */
   3138     return addr;
   3139   else
   3140     return addr & (((CORE_ADDR) 1 << gdbarch_ptr_bit (target_gdbarch ())) - 1);
   3141 }
   3142 
   3143 
   3144 static void
   3145 svr4_relocate_section_addresses (struct so_list *so,
   3146                                  struct target_section *sec)
   3147 {
   3148   bfd *abfd = sec->the_bfd_section->owner;
   3149 
   3150   sec->addr = svr4_truncate_ptr (sec->addr + lm_addr_check (so, abfd));
   3151   sec->endaddr = svr4_truncate_ptr (sec->endaddr + lm_addr_check (so, abfd));
   3152 }
   3153 
   3154 
   3156 /* Architecture-specific operations.  */
   3157 
   3158 /* Per-architecture data key.  */
   3159 static struct gdbarch_data *solib_svr4_data;
   3160 
   3161 struct solib_svr4_ops
   3162 {
   3163   /* Return a description of the layout of `struct link_map'.  */
   3164   struct link_map_offsets *(*fetch_link_map_offsets)(void);
   3165 };
   3166 
   3167 /* Return a default for the architecture-specific operations.  */
   3168 
   3169 static void *
   3170 solib_svr4_init (struct obstack *obstack)
   3171 {
   3172   struct solib_svr4_ops *ops;
   3173 
   3174   ops = OBSTACK_ZALLOC (obstack, struct solib_svr4_ops);
   3175   ops->fetch_link_map_offsets = NULL;
   3176   return ops;
   3177 }
   3178 
   3179 /* Set the architecture-specific `struct link_map_offsets' fetcher for
   3180    GDBARCH to FLMO.  Also, install SVR4 solib_ops into GDBARCH.  */
   3181 
   3182 void
   3183 set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch,
   3184                                        struct link_map_offsets *(*flmo) (void))
   3185 {
   3186   struct solib_svr4_ops *ops
   3187     = (struct solib_svr4_ops *) gdbarch_data (gdbarch, solib_svr4_data);
   3188 
   3189   ops->fetch_link_map_offsets = flmo;
   3190 
   3191   set_solib_ops (gdbarch, &svr4_so_ops);
   3192 }
   3193 
   3194 /* Fetch a link_map_offsets structure using the architecture-specific
   3195    `struct link_map_offsets' fetcher.  */
   3196 
   3197 static struct link_map_offsets *
   3198 svr4_fetch_link_map_offsets (void)
   3199 {
   3200   struct solib_svr4_ops *ops
   3201     = (struct solib_svr4_ops *) gdbarch_data (target_gdbarch (),
   3202 					      solib_svr4_data);
   3203 
   3204   gdb_assert (ops->fetch_link_map_offsets);
   3205   return ops->fetch_link_map_offsets ();
   3206 }
   3207 
   3208 /* Return 1 if a link map offset fetcher has been defined, 0 otherwise.  */
   3209 
   3210 static int
   3211 svr4_have_link_map_offsets (void)
   3212 {
   3213   struct solib_svr4_ops *ops
   3214     = (struct solib_svr4_ops *) gdbarch_data (target_gdbarch (),
   3215 					      solib_svr4_data);
   3216 
   3217   return (ops->fetch_link_map_offsets != NULL);
   3218 }
   3219 
   3220 
   3222 /* Most OS'es that have SVR4-style ELF dynamic libraries define a
   3223    `struct r_debug' and a `struct link_map' that are binary compatible
   3224    with the origional SVR4 implementation.  */
   3225 
   3226 /* Fetch (and possibly build) an appropriate `struct link_map_offsets'
   3227    for an ILP32 SVR4 system.  */
   3228 
   3229 struct link_map_offsets *
   3230 svr4_ilp32_fetch_link_map_offsets (void)
   3231 {
   3232   static struct link_map_offsets lmo;
   3233   static struct link_map_offsets *lmp = NULL;
   3234 
   3235   if (lmp == NULL)
   3236     {
   3237       lmp = &lmo;
   3238 
   3239       lmo.r_version_offset = 0;
   3240       lmo.r_version_size = 4;
   3241       lmo.r_map_offset = 4;
   3242       lmo.r_brk_offset = 8;
   3243       lmo.r_ldsomap_offset = 20;
   3244 
   3245       /* Everything we need is in the first 20 bytes.  */
   3246       lmo.link_map_size = 20;
   3247       lmo.l_addr_offset = 0;
   3248       lmo.l_name_offset = 4;
   3249       lmo.l_ld_offset = 8;
   3250       lmo.l_next_offset = 12;
   3251       lmo.l_prev_offset = 16;
   3252     }
   3253 
   3254   return lmp;
   3255 }
   3256 
   3257 /* Fetch (and possibly build) an appropriate `struct link_map_offsets'
   3258    for an LP64 SVR4 system.  */
   3259 
   3260 struct link_map_offsets *
   3261 svr4_lp64_fetch_link_map_offsets (void)
   3262 {
   3263   static struct link_map_offsets lmo;
   3264   static struct link_map_offsets *lmp = NULL;
   3265 
   3266   if (lmp == NULL)
   3267     {
   3268       lmp = &lmo;
   3269 
   3270       lmo.r_version_offset = 0;
   3271       lmo.r_version_size = 4;
   3272       lmo.r_map_offset = 8;
   3273       lmo.r_brk_offset = 16;
   3274       lmo.r_ldsomap_offset = 40;
   3275 
   3276       /* Everything we need is in the first 40 bytes.  */
   3277       lmo.link_map_size = 40;
   3278       lmo.l_addr_offset = 0;
   3279       lmo.l_name_offset = 8;
   3280       lmo.l_ld_offset = 16;
   3281       lmo.l_next_offset = 24;
   3282       lmo.l_prev_offset = 32;
   3283     }
   3284 
   3285   return lmp;
   3286 }
   3287 
   3288 
   3290 struct target_so_ops svr4_so_ops;
   3291 
   3292 /* Lookup global symbol for ELF DSOs linked with -Bsymbolic.  Those DSOs have a
   3293    different rule for symbol lookup.  The lookup begins here in the DSO, not in
   3294    the main executable.  */
   3295 
   3296 static struct block_symbol
   3297 elf_lookup_lib_symbol (struct objfile *objfile,
   3298 		       const char *name,
   3299 		       const domain_enum domain)
   3300 {
   3301   bfd *abfd;
   3302 
   3303   if (objfile == symfile_objfile)
   3304     abfd = exec_bfd;
   3305   else
   3306     {
   3307       /* OBJFILE should have been passed as the non-debug one.  */
   3308       gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
   3309 
   3310       abfd = objfile->obfd;
   3311     }
   3312 
   3313   if (abfd == NULL || scan_dyntag (DT_SYMBOLIC, abfd, NULL, NULL) != 1)
   3314     return (struct block_symbol) {NULL, NULL};
   3315 
   3316   return lookup_global_symbol_from_objfile (objfile, name, domain);
   3317 }
   3318 
   3319 extern initialize_file_ftype _initialize_svr4_solib; /* -Wmissing-prototypes */
   3320 
   3321 void
   3322 _initialize_svr4_solib (void)
   3323 {
   3324   solib_svr4_data = gdbarch_data_register_pre_init (solib_svr4_init);
   3325   solib_svr4_pspace_data
   3326     = register_program_space_data_with_cleanup (NULL, svr4_pspace_data_cleanup);
   3327 
   3328   svr4_so_ops.relocate_section_addresses = svr4_relocate_section_addresses;
   3329   svr4_so_ops.free_so = svr4_free_so;
   3330   svr4_so_ops.clear_so = svr4_clear_so;
   3331   svr4_so_ops.clear_solib = svr4_clear_solib;
   3332   svr4_so_ops.solib_create_inferior_hook = svr4_solib_create_inferior_hook;
   3333   svr4_so_ops.special_symbol_handling = svr4_special_symbol_handling;
   3334   svr4_so_ops.current_sos = svr4_current_sos;
   3335   svr4_so_ops.open_symbol_file_object = open_symbol_file_object;
   3336   svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
   3337   svr4_so_ops.bfd_open = solib_bfd_open;
   3338   svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol;
   3339   svr4_so_ops.same = svr4_same;
   3340   svr4_so_ops.keep_data_in_core = svr4_keep_data_in_core;
   3341   svr4_so_ops.update_breakpoints = svr4_update_solib_event_breakpoints;
   3342   svr4_so_ops.handle_event = svr4_handle_solib_event;
   3343 }
   3344