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