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