]> Git Repo - binutils.git/blob - gdb/solib.c
gdb: move go_language class declaration into header file
[binutils.git] / gdb / solib.c
1 /* Handle 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 <sys/types.h>
23 #include <fcntl.h>
24 #include "symtab.h"
25 #include "bfd.h"
26 #include "symfile.h"
27 #include "objfiles.h"
28 #include "gdbcore.h"
29 #include "command.h"
30 #include "target.h"
31 #include "frame.h"
32 #include "gdb_regex.h"
33 #include "inferior.h"
34 #include "gdbsupport/environ.h"
35 #include "language.h"
36 #include "gdbcmd.h"
37 #include "completer.h"
38 #include "filenames.h"          /* for DOSish file names */
39 #include "exec.h"
40 #include "solist.h"
41 #include "observable.h"
42 #include "readline/tilde.h"
43 #include "remote.h"
44 #include "solib.h"
45 #include "interps.h"
46 #include "filesystem.h"
47 #include "gdb_bfd.h"
48 #include "gdbsupport/filestuff.h"
49 #include "source.h"
50 #include "cli/cli-style.h"
51
52 /* Architecture-specific operations.  */
53
54 /* Per-architecture data key.  */
55 static struct gdbarch_data *solib_data;
56
57 static void *
58 solib_init (struct obstack *obstack)
59 {
60   struct target_so_ops **ops;
61
62   ops = OBSTACK_ZALLOC (obstack, struct target_so_ops *);
63   *ops = current_target_so_ops;
64   return ops;
65 }
66
67 static const struct target_so_ops *
68 solib_ops (struct gdbarch *gdbarch)
69 {
70   const struct target_so_ops **ops
71     = (const struct target_so_ops **) gdbarch_data (gdbarch, solib_data);
72
73   return *ops;
74 }
75
76 /* Set the solib operations for GDBARCH to NEW_OPS.  */
77
78 void
79 set_solib_ops (struct gdbarch *gdbarch, const struct target_so_ops *new_ops)
80 {
81   const struct target_so_ops **ops
82     = (const struct target_so_ops **) gdbarch_data (gdbarch, solib_data);
83
84   *ops = new_ops;
85 }
86 \f
87
88 /* external data declarations */
89
90 /* FIXME: gdbarch needs to control this variable, or else every
91    configuration needs to call set_solib_ops.  */
92 struct target_so_ops *current_target_so_ops;
93
94 /* Local function prototypes */
95
96 /* If non-empty, this is a search path for loading non-absolute shared library
97    symbol files.  This takes precedence over the environment variables PATH
98    and LD_LIBRARY_PATH.  */
99 static char *solib_search_path = NULL;
100 static void
101 show_solib_search_path (struct ui_file *file, int from_tty,
102                         struct cmd_list_element *c, const char *value)
103 {
104   fprintf_filtered (file, _("The search path for loading non-absolute "
105                             "shared library symbol files is %s.\n"),
106                     value);
107 }
108
109 /* Same as HAVE_DOS_BASED_FILE_SYSTEM, but useable as an rvalue.  */
110 #if (HAVE_DOS_BASED_FILE_SYSTEM)
111 #  define DOS_BASED_FILE_SYSTEM 1
112 #else
113 #  define DOS_BASED_FILE_SYSTEM 0
114 #endif
115
116 /* Return the full pathname of a binary file (the main executable or a
117    shared library file), or NULL if not found.  If FD is non-NULL, *FD
118    is set to either -1 or an open file handle for the binary file.
119
120    Global variable GDB_SYSROOT is used as a prefix directory
121    to search for binary files if they have an absolute path.
122    If GDB_SYSROOT starts with "target:" and target filesystem
123    is the local filesystem then the "target:" prefix will be
124    stripped before the search starts.  This ensures that the
125    same search algorithm is used for local files regardless of
126    whether a "target:" prefix was used.
127
128    Global variable SOLIB_SEARCH_PATH is used as a prefix directory
129    (or set of directories, as in LD_LIBRARY_PATH) to search for all
130    shared libraries if not found in either the sysroot (if set) or
131    the local filesystem.  SOLIB_SEARCH_PATH is not used when searching
132    for the main executable.
133
134    Search algorithm:
135    * If a sysroot is set and path is absolute:
136    *   Search for sysroot/path.
137    * else
138    *   Look for it literally (unmodified).
139    * If IS_SOLIB is non-zero:
140    *   Look in SOLIB_SEARCH_PATH.
141    *   If available, use target defined search function.
142    * If NO sysroot is set, perform the following two searches:
143    *   Look in inferior's $PATH.
144    *   If IS_SOLIB is non-zero:
145    *     Look in inferior's $LD_LIBRARY_PATH.
146    *
147    * The last check avoids doing this search when targeting remote
148    * machines since a sysroot will almost always be set.
149 */
150
151 static gdb::unique_xmalloc_ptr<char>
152 solib_find_1 (const char *in_pathname, int *fd, bool is_solib)
153 {
154   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
155   int found_file = -1;
156   gdb::unique_xmalloc_ptr<char> temp_pathname;
157   const char *fskind = effective_target_file_system_kind ();
158   const char *sysroot = gdb_sysroot;
159   int prefix_len, orig_prefix_len;
160
161   /* If the absolute prefix starts with "target:" but the filesystem
162      accessed by the target_fileio_* methods is the local filesystem
163      then we strip the "target:" prefix now and work with the local
164      filesystem.  This ensures that the same search algorithm is used
165      for all local files regardless of whether a "target:" prefix was
166      used.  */
167   if (is_target_filename (sysroot) && target_filesystem_is_local ())
168     sysroot += strlen (TARGET_SYSROOT_PREFIX);
169
170   /* Strip any trailing slashes from the absolute prefix.  */
171   prefix_len = orig_prefix_len = strlen (sysroot);
172
173   while (prefix_len > 0 && IS_DIR_SEPARATOR (sysroot[prefix_len - 1]))
174     prefix_len--;
175
176   std::string sysroot_holder;
177   if (prefix_len == 0)
178     sysroot = NULL;
179   else if (prefix_len != orig_prefix_len)
180     {
181       sysroot_holder = std::string (sysroot, prefix_len);
182       sysroot = sysroot_holder.c_str ();
183     }
184
185   /* If we're on a non-DOS-based system, backslashes won't be
186      understood as directory separator, so, convert them to forward
187      slashes, iff we're supposed to handle DOS-based file system
188      semantics for target paths.  */
189   if (!DOS_BASED_FILE_SYSTEM && fskind == file_system_kind_dos_based)
190     {
191       char *p;
192
193       /* Avoid clobbering our input.  */
194       p = (char *) alloca (strlen (in_pathname) + 1);
195       strcpy (p, in_pathname);
196       in_pathname = p;
197
198       for (; *p; p++)
199         {
200           if (*p == '\\')
201             *p = '/';
202         }
203     }
204
205   /* Note, we're interested in IS_TARGET_ABSOLUTE_PATH, not
206      IS_ABSOLUTE_PATH.  The latter is for host paths only, while
207      IN_PATHNAME is a target path.  For example, if we're supposed to
208      be handling DOS-like semantics we want to consider a
209      'c:/foo/bar.dll' path as an absolute path, even on a Unix box.
210      With such a path, before giving up on the sysroot, we'll try:
211
212        1st attempt, c:/foo/bar.dll ==> /sysroot/c:/foo/bar.dll
213        2nd attempt, c:/foo/bar.dll ==> /sysroot/c/foo/bar.dll
214        3rd attempt, c:/foo/bar.dll ==> /sysroot/foo/bar.dll
215   */
216
217   if (!IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname) || sysroot == NULL)
218     temp_pathname.reset (xstrdup (in_pathname));
219   else
220     {
221       bool need_dir_separator;
222
223       /* Concatenate the sysroot and the target reported filename.  We
224          may need to glue them with a directory separator.  Cases to
225          consider:
226
227         | sysroot         | separator | in_pathname    |
228         |-----------------+-----------+----------------|
229         | /some/dir       | /         | c:/foo/bar.dll |
230         | /some/dir       |           | /foo/bar.dll   |
231         | target:         |           | c:/foo/bar.dll |
232         | target:         |           | /foo/bar.dll   |
233         | target:some/dir | /         | c:/foo/bar.dll |
234         | target:some/dir |           | /foo/bar.dll   |
235
236         IOW, we don't need to add a separator if IN_PATHNAME already
237         has one, or when the sysroot is exactly "target:".
238         There's no need to check for drive spec explicitly, as we only
239         get here if IN_PATHNAME is considered an absolute path.  */
240       need_dir_separator = !(IS_DIR_SEPARATOR (in_pathname[0])
241                              || strcmp (TARGET_SYSROOT_PREFIX, sysroot) == 0);
242
243       /* Cat the prefixed pathname together.  */
244       temp_pathname.reset (concat (sysroot,
245                                    need_dir_separator ? SLASH_STRING : "",
246                                    in_pathname, (char *) NULL));
247     }
248
249   /* Handle files to be accessed via the target.  */
250   if (is_target_filename (temp_pathname.get ()))
251     {
252       if (fd != NULL)
253         *fd = -1;
254       return temp_pathname;
255     }
256
257   /* Now see if we can open it.  */
258   found_file = gdb_open_cloexec (temp_pathname.get (), O_RDONLY | O_BINARY, 0);
259
260   /* If the search in gdb_sysroot failed, and the path name has a
261      drive spec (e.g, c:/foo), try stripping ':' from the drive spec,
262      and retrying in the sysroot:
263        c:/foo/bar.dll ==> /sysroot/c/foo/bar.dll.  */
264
265   if (found_file < 0
266       && sysroot != NULL
267       && HAS_TARGET_DRIVE_SPEC (fskind, in_pathname))
268     {
269       bool need_dir_separator = !IS_DIR_SEPARATOR (in_pathname[2]);
270       char drive[2] = { in_pathname[0], '\0' };
271
272       temp_pathname.reset (concat (sysroot,
273                                    SLASH_STRING,
274                                    drive,
275                                    need_dir_separator ? SLASH_STRING : "",
276                                    in_pathname + 2, (char *) NULL));
277
278       found_file = gdb_open_cloexec (temp_pathname.get (),
279                                      O_RDONLY | O_BINARY, 0);
280       if (found_file < 0)
281         {
282           /* If the search in gdb_sysroot still failed, try fully
283              stripping the drive spec, and trying once more in the
284              sysroot before giving up.
285
286              c:/foo/bar.dll ==> /sysroot/foo/bar.dll.  */
287
288           temp_pathname.reset (concat (sysroot,
289                                        need_dir_separator ? SLASH_STRING : "",
290                                        in_pathname + 2, (char *) NULL));
291
292           found_file = gdb_open_cloexec (temp_pathname.get (),
293                                          O_RDONLY | O_BINARY, 0);
294         }
295     }
296
297   /* We try to find the library in various ways.  After each attempt,
298      either found_file >= 0 and temp_pathname is a malloc'd string, or
299      found_file < 0 and temp_pathname does not point to storage that
300      needs to be freed.  */
301
302   if (found_file < 0)
303     temp_pathname.reset (NULL);
304
305   /* If the search in gdb_sysroot failed, and the path name is
306      absolute at this point, make it relative.  (openp will try and open the
307      file according to its absolute path otherwise, which is not what we want.)
308      Affects subsequent searches for this solib.  */
309   if (found_file < 0 && IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname))
310     {
311       /* First, get rid of any drive letters etc.  */
312       while (!IS_TARGET_DIR_SEPARATOR (fskind, *in_pathname))
313         in_pathname++;
314
315       /* Next, get rid of all leading dir separators.  */
316       while (IS_TARGET_DIR_SEPARATOR (fskind, *in_pathname))
317         in_pathname++;
318     }
319
320   /* If not found, and we're looking for a solib, search the
321      solib_search_path (if any).  */
322   if (is_solib && found_file < 0 && solib_search_path != NULL)
323     found_file = openp (solib_search_path,
324                         OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
325                         in_pathname, O_RDONLY | O_BINARY, &temp_pathname);
326
327   /* If not found, and we're looking for a solib, next search the
328      solib_search_path (if any) for the basename only (ignoring the
329      path).  This is to allow reading solibs from a path that differs
330      from the opened path.  */
331   if (is_solib && found_file < 0 && solib_search_path != NULL)
332     found_file = openp (solib_search_path,
333                         OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
334                         target_lbasename (fskind, in_pathname),
335                         O_RDONLY | O_BINARY, &temp_pathname);
336
337   /* If not found, and we're looking for a solib, try to use target
338      supplied solib search method.  */
339   if (is_solib && found_file < 0 && ops->find_and_open_solib)
340     found_file = ops->find_and_open_solib (in_pathname, O_RDONLY | O_BINARY,
341                                            &temp_pathname);
342
343   /* If not found, next search the inferior's $PATH environment variable.  */
344   if (found_file < 0 && sysroot == NULL)
345     found_file = openp (current_inferior ()->environment.get ("PATH"),
346                         OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname,
347                         O_RDONLY | O_BINARY, &temp_pathname);
348
349   /* If not found, and we're looking for a solib, next search the
350      inferior's $LD_LIBRARY_PATH environment variable.  */
351   if (is_solib && found_file < 0 && sysroot == NULL)
352     found_file = openp (current_inferior ()->environment.get
353                         ("LD_LIBRARY_PATH"),
354                         OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname,
355                         O_RDONLY | O_BINARY, &temp_pathname);
356
357   if (fd == NULL)
358     {
359       if (found_file >= 0)
360         close (found_file);
361     }
362   else
363     *fd = found_file;
364
365   return temp_pathname;
366 }
367
368 /* Return the full pathname of the main executable, or NULL if not
369    found.  If FD is non-NULL, *FD is set to either -1 or an open file
370    handle for the main executable.  */
371
372 gdb::unique_xmalloc_ptr<char>
373 exec_file_find (const char *in_pathname, int *fd)
374 {
375   gdb::unique_xmalloc_ptr<char> result;
376   const char *fskind = effective_target_file_system_kind ();
377
378   if (in_pathname == NULL)
379     return NULL;
380
381   if (*gdb_sysroot != '\0' && IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname))
382     {
383       result = solib_find_1 (in_pathname, fd, false);
384
385       if (result == NULL && fskind == file_system_kind_dos_based)
386         {
387           char *new_pathname;
388
389           new_pathname = (char *) alloca (strlen (in_pathname) + 5);
390           strcpy (new_pathname, in_pathname);
391           strcat (new_pathname, ".exe");
392
393           result = solib_find_1 (new_pathname, fd, false);
394         }
395     }
396   else
397     {
398       /* It's possible we don't have a full path, but rather just a
399          filename.  Some targets, such as HP-UX, don't provide the
400          full path, sigh.
401
402          Attempt to qualify the filename against the source path.
403          (If that fails, we'll just fall back on the original
404          filename.  Not much more we can do...)  */
405
406       if (!source_full_path_of (in_pathname, &result))
407         result.reset (xstrdup (in_pathname));
408       if (fd != NULL)
409         *fd = -1;
410     }
411
412   return result;
413 }
414
415 /* Return the full pathname of a shared library file, or NULL if not
416    found.  If FD is non-NULL, *FD is set to either -1 or an open file
417    handle for the shared library.
418
419    The search algorithm used is described in solib_find_1's comment
420    above.  */
421
422 gdb::unique_xmalloc_ptr<char>
423 solib_find (const char *in_pathname, int *fd)
424 {
425   const char *solib_symbols_extension
426     = gdbarch_solib_symbols_extension (target_gdbarch ());
427
428   /* If solib_symbols_extension is set, replace the file's
429      extension.  */
430   if (solib_symbols_extension != NULL)
431     {
432       const char *p = in_pathname + strlen (in_pathname);
433
434       while (p > in_pathname && *p != '.')
435         p--;
436
437       if (*p == '.')
438         {
439           char *new_pathname;
440
441           new_pathname
442             = (char *) alloca (p - in_pathname + 1
443                                + strlen (solib_symbols_extension) + 1);
444           memcpy (new_pathname, in_pathname, p - in_pathname + 1);
445           strcpy (new_pathname + (p - in_pathname) + 1,
446                   solib_symbols_extension);
447
448           in_pathname = new_pathname;
449         }
450     }
451
452   return solib_find_1 (in_pathname, fd, true);
453 }
454
455 /* Open and return a BFD for the shared library PATHNAME.  If FD is not -1,
456    it is used as file handle to open the file.  Throws an error if the file
457    could not be opened.  Handles both local and remote file access.
458
459    If unsuccessful, the FD will be closed (unless FD was -1).  */
460
461 gdb_bfd_ref_ptr
462 solib_bfd_fopen (const char *pathname, int fd)
463 {
464   gdb_bfd_ref_ptr abfd (gdb_bfd_open (pathname, gnutarget, fd));
465
466   if (abfd != NULL && !gdb_bfd_has_target_filename (abfd.get ()))
467     bfd_set_cacheable (abfd.get (), 1);
468
469   if (abfd == NULL)
470     {
471       /* Arrange to free PATHNAME when the error is thrown.  */
472       error (_("Could not open `%s' as an executable file: %s"),
473              pathname, bfd_errmsg (bfd_get_error ()));
474     }
475
476   return abfd;
477 }
478
479 /* Find shared library PATHNAME and open a BFD for it.  */
480
481 gdb_bfd_ref_ptr
482 solib_bfd_open (const char *pathname)
483 {
484   int found_file;
485   const struct bfd_arch_info *b;
486
487   /* Search for shared library file.  */
488   gdb::unique_xmalloc_ptr<char> found_pathname
489     = solib_find (pathname, &found_file);
490   if (found_pathname == NULL)
491     {
492       /* Return failure if the file could not be found, so that we can
493          accumulate messages about missing libraries.  */
494       if (errno == ENOENT)
495         return NULL;
496
497       perror_with_name (pathname);
498     }
499
500   /* Open bfd for shared library.  */
501   gdb_bfd_ref_ptr abfd (solib_bfd_fopen (found_pathname.get (), found_file));
502
503   /* Check bfd format.  */
504   if (!bfd_check_format (abfd.get (), bfd_object))
505     error (_("`%s': not in executable format: %s"),
506            bfd_get_filename (abfd.get ()), bfd_errmsg (bfd_get_error ()));
507
508   /* Check bfd arch.  */
509   b = gdbarch_bfd_arch_info (target_gdbarch ());
510   if (!b->compatible (b, bfd_get_arch_info (abfd.get ())))
511     warning (_("`%s': Shared library architecture %s is not compatible "
512                "with target architecture %s."), bfd_get_filename (abfd.get ()),
513              bfd_get_arch_info (abfd.get ())->printable_name,
514              b->printable_name);
515
516   return abfd;
517 }
518
519 /* Given a pointer to one of the shared objects in our list of mapped
520    objects, use the recorded name to open a bfd descriptor for the
521    object, build a section table, relocate all the section addresses
522    by the base address at which the shared object was mapped, and then
523    add the sections to the target's section table.
524
525    FIXME: In most (all?) cases the shared object file name recorded in
526    the dynamic linkage tables will be a fully qualified pathname.  For
527    cases where it isn't, do we really mimic the systems search
528    mechanism correctly in the below code (particularly the tilde
529    expansion stuff?).  */
530
531 static int
532 solib_map_sections (struct so_list *so)
533 {
534   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
535
536   gdb::unique_xmalloc_ptr<char> filename (tilde_expand (so->so_name));
537   gdb_bfd_ref_ptr abfd (ops->bfd_open (filename.get ()));
538
539   if (abfd == NULL)
540     return 0;
541
542   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
543   so->abfd = abfd.release ();
544
545   /* Copy the full path name into so_name, allowing symbol_file_add
546      to find it later.  This also affects the =library-loaded GDB/MI
547      event, and in particular the part of that notification providing
548      the library's host-side path.  If we let the target dictate
549      that objfile's path, and the target is different from the host,
550      GDB/MI will not provide the correct host-side path.  */
551   if (strlen (bfd_get_filename (so->abfd)) >= SO_NAME_MAX_PATH_SIZE)
552     error (_("Shared library file name is too long."));
553   strcpy (so->so_name, bfd_get_filename (so->abfd));
554
555   if (so->sections == nullptr)
556     so->sections = new target_section_table;
557   *so->sections = build_section_table (so->abfd);
558
559   for (target_section &p : *so->sections)
560     {
561       /* Relocate the section binding addresses as recorded in the shared
562          object's file by the base address to which the object was actually
563          mapped.  */
564       ops->relocate_section_addresses (so, &p);
565
566       /* If the target didn't provide information about the address
567          range of the shared object, assume we want the location of
568          the .text section.  */
569       if (so->addr_low == 0 && so->addr_high == 0
570           && strcmp (p.the_bfd_section->name, ".text") == 0)
571         {
572           so->addr_low = p.addr;
573           so->addr_high = p.endaddr;
574         }
575     }
576
577   /* Add the shared object's sections to the current set of file
578      section tables.  Do this immediately after mapping the object so
579      that later nodes in the list can query this object, as is needed
580      in solib-osf.c.  */
581   current_program_space->add_target_sections (so, *so->sections);
582
583   return 1;
584 }
585
586 /* Free symbol-file related contents of SO and reset for possible reloading
587    of SO.  If we have opened a BFD for SO, close it.  If we have placed SO's
588    sections in some target's section table, the caller is responsible for
589    removing them.
590
591    This function doesn't mess with objfiles at all.  If there is an
592    objfile associated with SO that needs to be removed, the caller is
593    responsible for taking care of that.  */
594
595 static void
596 clear_so (struct so_list *so)
597 {
598   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
599
600   delete so->sections;
601   so->sections = NULL;
602
603   gdb_bfd_unref (so->abfd);
604   so->abfd = NULL;
605
606   /* Our caller closed the objfile, possibly via objfile_purge_solibs.  */
607   so->symbols_loaded = 0;
608   so->objfile = NULL;
609
610   so->addr_low = so->addr_high = 0;
611
612   /* Restore the target-supplied file name.  SO_NAME may be the path
613      of the symbol file.  */
614   strcpy (so->so_name, so->so_original_name);
615
616   /* Do the same for target-specific data.  */
617   if (ops->clear_so != NULL)
618     ops->clear_so (so);
619 }
620
621 /* Free the storage associated with the `struct so_list' object SO.
622    If we have opened a BFD for SO, close it.
623
624    The caller is responsible for removing SO from whatever list it is
625    a member of.  If we have placed SO's sections in some target's
626    section table, the caller is responsible for removing them.
627
628    This function doesn't mess with objfiles at all.  If there is an
629    objfile associated with SO that needs to be removed, the caller is
630    responsible for taking care of that.  */
631
632 void
633 free_so (struct so_list *so)
634 {
635   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
636
637   clear_so (so);
638   ops->free_so (so);
639
640   xfree (so);
641 }
642
643
644 /* Read in symbols for shared object SO.  If SYMFILE_VERBOSE is set in FLAGS,
645    be chatty about it.  Return true if any symbols were actually loaded.  */
646
647 bool
648 solib_read_symbols (struct so_list *so, symfile_add_flags flags)
649 {
650   if (so->symbols_loaded)
651     {
652       /* If needed, we've already warned in our caller.  */
653     }
654   else if (so->abfd == NULL)
655     {
656       /* We've already warned about this library, when trying to open
657          it.  */
658     }
659   else
660     {
661
662       flags |= current_inferior ()->symfile_flags;
663
664       try
665         {
666           /* Have we already loaded this shared object?  */
667           so->objfile = nullptr;
668           for (objfile *objfile : current_program_space->objfiles ())
669             {
670               if (filename_cmp (objfile_name (objfile), so->so_name) == 0
671                   && objfile->addr_low == so->addr_low)
672                 {
673                   so->objfile = objfile;
674                   break;
675                 }
676             }
677           if (so->objfile == NULL)
678             {
679               section_addr_info sap
680                 = build_section_addr_info_from_section_table (*so->sections);
681               so->objfile = symbol_file_add_from_bfd (so->abfd, so->so_name,
682                                                       flags, &sap,
683                                                       OBJF_SHARED, NULL);
684               so->objfile->addr_low = so->addr_low;
685             }
686
687           so->symbols_loaded = 1;
688         }
689       catch (const gdb_exception_error &e)
690         {
691           exception_fprintf (gdb_stderr, e, _("Error while reading shared"
692                                               " library symbols for %s:\n"),
693                              so->so_name);
694         }
695
696       return true;
697     }
698
699   return false;
700 }
701
702 /* Return true if KNOWN->objfile is used by any other so_list object
703    in the list of shared libraries.  Return false otherwise.  */
704
705 static bool
706 solib_used (const struct so_list *const known)
707 {
708   for (const struct so_list *pivot : current_program_space->solibs ())
709     if (pivot != known && pivot->objfile == known->objfile)
710       return true;
711   return false;
712 }
713
714 /* See solib.h.  */
715
716 void
717 update_solib_list (int from_tty)
718 {
719   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
720   struct so_list *inferior = ops->current_sos();
721   struct so_list *gdb, **gdb_link;
722
723   /* We can reach here due to changing solib-search-path or the
724      sysroot, before having any inferior.  */
725   if (target_has_execution () && inferior_ptid != null_ptid)
726     {
727       struct inferior *inf = current_inferior ();
728
729       /* If we are attaching to a running process for which we
730          have not opened a symbol file, we may be able to get its
731          symbols now!  */
732       if (inf->attach_flag
733           && current_program_space->symfile_object_file == NULL)
734         {
735           try
736             {
737               ops->open_symbol_file_object (from_tty);
738             }
739           catch (const gdb_exception &ex)
740             {
741               exception_fprintf (gdb_stderr, ex,
742                                  "Error reading attached "
743                                  "process's symbol file.\n");
744             }
745         }
746     }
747
748   /* GDB and the inferior's dynamic linker each maintain their own
749      list of currently loaded shared objects; we want to bring the
750      former in sync with the latter.  Scan both lists, seeing which
751      shared objects appear where.  There are three cases:
752
753      - A shared object appears on both lists.  This means that GDB
754      knows about it already, and it's still loaded in the inferior.
755      Nothing needs to happen.
756
757      - A shared object appears only on GDB's list.  This means that
758      the inferior has unloaded it.  We should remove the shared
759      object from GDB's tables.
760
761      - A shared object appears only on the inferior's list.  This
762      means that it's just been loaded.  We should add it to GDB's
763      tables.
764
765      So we walk GDB's list, checking each entry to see if it appears
766      in the inferior's list too.  If it does, no action is needed, and
767      we remove it from the inferior's list.  If it doesn't, the
768      inferior has unloaded it, and we remove it from GDB's list.  By
769      the time we're done walking GDB's list, the inferior's list
770      contains only the new shared objects, which we then add.  */
771
772   gdb = current_program_space->so_list;
773   gdb_link = &current_program_space->so_list;
774   while (gdb)
775     {
776       struct so_list *i = inferior;
777       struct so_list **i_link = &inferior;
778
779       /* Check to see whether the shared object *gdb also appears in
780          the inferior's current list.  */
781       while (i)
782         {
783           if (ops->same)
784             {
785               if (ops->same (gdb, i))
786                 break;
787             }
788           else
789             {
790               if (! filename_cmp (gdb->so_original_name, i->so_original_name))
791                 break;        
792             }
793
794           i_link = &i->next;
795           i = *i_link;
796         }
797
798       /* If the shared object appears on the inferior's list too, then
799          it's still loaded, so we don't need to do anything.  Delete
800          it from the inferior's list, and leave it on GDB's list.  */
801       if (i)
802         {
803           *i_link = i->next;
804           free_so (i);
805           gdb_link = &gdb->next;
806           gdb = *gdb_link;
807         }
808
809       /* If it's not on the inferior's list, remove it from GDB's tables.  */
810       else
811         {
812           /* Notify any observer that the shared object has been
813              unloaded before we remove it from GDB's tables.  */
814           gdb::observers::solib_unloaded.notify (gdb);
815
816           current_program_space->deleted_solibs.push_back (gdb->so_name);
817
818           *gdb_link = gdb->next;
819
820           /* Unless the user loaded it explicitly, free SO's objfile.  */
821           if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED)
822               && !solib_used (gdb))
823             gdb->objfile->unlink ();
824
825           /* Some targets' section tables might be referring to
826              sections from so->abfd; remove them.  */
827           current_program_space->remove_target_sections (gdb);
828
829           free_so (gdb);
830           gdb = *gdb_link;
831         }
832     }
833
834   /* Now the inferior's list contains only shared objects that don't
835      appear in GDB's list --- those that are newly loaded.  Add them
836      to GDB's shared object list.  */
837   if (inferior)
838     {
839       int not_found = 0;
840       const char *not_found_filename = NULL;
841
842       struct so_list *i;
843
844       /* Add the new shared objects to GDB's list.  */
845       *gdb_link = inferior;
846
847       /* Fill in the rest of each of the `struct so_list' nodes.  */
848       for (i = inferior; i; i = i->next)
849         {
850
851           i->pspace = current_program_space;
852           current_program_space->added_solibs.push_back (i);
853
854           try
855             {
856               /* Fill in the rest of the `struct so_list' node.  */
857               if (!solib_map_sections (i))
858                 {
859                   not_found++;
860                   if (not_found_filename == NULL)
861                     not_found_filename = i->so_original_name;
862                 }
863             }
864
865           catch (const gdb_exception_error &e)
866             {
867               exception_fprintf (gdb_stderr, e,
868                                  _("Error while mapping shared "
869                                    "library sections:\n"));
870             }
871
872           /* Notify any observer that the shared object has been
873              loaded now that we've added it to GDB's tables.  */
874           gdb::observers::solib_loaded.notify (i);
875         }
876
877       /* If a library was not found, issue an appropriate warning
878          message.  We have to use a single call to warning in case the
879          front end does something special with warnings, e.g., pop up
880          a dialog box.  It Would Be Nice if we could get a "warning: "
881          prefix on each line in the CLI front end, though - it doesn't
882          stand out well.  */
883
884       if (not_found == 1)
885         warning (_("Could not load shared library symbols for %s.\n"
886                    "Do you need \"set solib-search-path\" "
887                    "or \"set sysroot\"?"),
888                  not_found_filename);
889       else if (not_found > 1)
890         warning (_("\
891 Could not load shared library symbols for %d libraries, e.g. %s.\n\
892 Use the \"info sharedlibrary\" command to see the complete listing.\n\
893 Do you need \"set solib-search-path\" or \"set sysroot\"?"),
894                  not_found, not_found_filename);
895     }
896 }
897
898
899 /* Return non-zero if NAME is the libpthread shared library.
900
901    Uses a fairly simplistic heuristic approach where we check
902    the file name against "/libpthread".  This can lead to false
903    positives, but this should be good enough in practice.  */
904
905 bool
906 libpthread_name_p (const char *name)
907 {
908   return (strstr (name, "/libpthread") != NULL);
909 }
910
911 /* Return non-zero if SO is the libpthread shared library.  */
912
913 static bool
914 libpthread_solib_p (struct so_list *so)
915 {
916   return libpthread_name_p (so->so_name);
917 }
918
919 /* Read in symbolic information for any shared objects whose names
920    match PATTERN.  (If we've already read a shared object's symbol
921    info, leave it alone.)  If PATTERN is zero, read them all.
922
923    If READSYMS is 0, defer reading symbolic information until later
924    but still do any needed low level processing.
925
926    FROM_TTY is described for update_solib_list, above.  */
927
928 void
929 solib_add (const char *pattern, int from_tty, int readsyms)
930 {
931   if (print_symbol_loading_p (from_tty, 0, 0))
932     {
933       if (pattern != NULL)
934         {
935           printf_unfiltered (_("Loading symbols for shared libraries: %s\n"),
936                              pattern);
937         }
938       else
939         printf_unfiltered (_("Loading symbols for shared libraries.\n"));
940     }
941
942   current_program_space->solib_add_generation++;
943
944   if (pattern)
945     {
946       char *re_err = re_comp (pattern);
947
948       if (re_err)
949         error (_("Invalid regexp: %s"), re_err);
950     }
951
952   update_solib_list (from_tty);
953
954   /* Walk the list of currently loaded shared libraries, and read
955      symbols for any that match the pattern --- or any whose symbols
956      aren't already loaded, if no pattern was given.  */
957   {
958     bool any_matches = false;
959     bool loaded_any_symbols = false;
960     symfile_add_flags add_flags = SYMFILE_DEFER_BP_RESET;
961
962     if (from_tty)
963         add_flags |= SYMFILE_VERBOSE;
964
965     for (struct so_list *gdb : current_program_space->solibs ())
966       if (! pattern || re_exec (gdb->so_name))
967         {
968           /* Normally, we would read the symbols from that library
969              only if READSYMS is set.  However, we're making a small
970              exception for the pthread library, because we sometimes
971              need the library symbols to be loaded in order to provide
972              thread support (x86-linux for instance).  */
973           const int add_this_solib =
974             (readsyms || libpthread_solib_p (gdb));
975
976           any_matches = true;
977           if (add_this_solib)
978             {
979               if (gdb->symbols_loaded)
980                 {
981                   /* If no pattern was given, be quiet for shared
982                      libraries we have already loaded.  */
983                   if (pattern && (from_tty || info_verbose))
984                     printf_unfiltered (_("Symbols already loaded for %s\n"),
985                                        gdb->so_name);
986                 }
987               else if (solib_read_symbols (gdb, add_flags))
988                 loaded_any_symbols = true;
989             }
990         }
991
992     if (loaded_any_symbols)
993       breakpoint_re_set ();
994
995     if (from_tty && pattern && ! any_matches)
996       printf_unfiltered
997         ("No loaded shared libraries match the pattern `%s'.\n", pattern);
998
999     if (loaded_any_symbols)
1000       {
1001         /* Getting new symbols may change our opinion about what is
1002            frameless.  */
1003         reinit_frame_cache ();
1004       }
1005   }
1006 }
1007
1008 /* Implement the "info sharedlibrary" command.  Walk through the
1009    shared library list and print information about each attached
1010    library matching PATTERN.  If PATTERN is elided, print them
1011    all.  */
1012
1013 static void
1014 info_sharedlibrary_command (const char *pattern, int from_tty)
1015 {
1016   bool so_missing_debug_info = false;
1017   int addr_width;
1018   int nr_libs;
1019   struct gdbarch *gdbarch = target_gdbarch ();
1020   struct ui_out *uiout = current_uiout;
1021
1022   if (pattern)
1023     {
1024       char *re_err = re_comp (pattern);
1025
1026       if (re_err)
1027         error (_("Invalid regexp: %s"), re_err);
1028     }
1029
1030   /* "0x", a little whitespace, and two hex digits per byte of pointers.  */
1031   addr_width = 4 + (gdbarch_ptr_bit (gdbarch) / 4);
1032
1033   update_solib_list (from_tty);
1034
1035   /* ui_out_emit_table table_emitter needs to know the number of rows,
1036      so we need to make two passes over the libs.  */
1037
1038   nr_libs = 0;
1039   for (struct so_list *so : current_program_space->solibs ())
1040     {
1041       if (so->so_name[0])
1042         {
1043           if (pattern && ! re_exec (so->so_name))
1044             continue;
1045           ++nr_libs;
1046         }
1047     }
1048
1049   {
1050     ui_out_emit_table table_emitter (uiout, 4, nr_libs, "SharedLibraryTable");
1051
1052     /* The "- 1" is because ui_out adds one space between columns.  */
1053     uiout->table_header (addr_width - 1, ui_left, "from", "From");
1054     uiout->table_header (addr_width - 1, ui_left, "to", "To");
1055     uiout->table_header (12 - 1, ui_left, "syms-read", "Syms Read");
1056     uiout->table_header (0, ui_noalign, "name", "Shared Object Library");
1057
1058     uiout->table_body ();
1059
1060     for (struct so_list *so : current_program_space->solibs ())
1061       {
1062         if (! so->so_name[0])
1063           continue;
1064         if (pattern && ! re_exec (so->so_name))
1065           continue;
1066
1067         ui_out_emit_tuple tuple_emitter (uiout, "lib");
1068
1069         if (so->addr_high != 0)
1070           {
1071             uiout->field_core_addr ("from", gdbarch, so->addr_low);
1072             uiout->field_core_addr ("to", gdbarch, so->addr_high);
1073           }
1074         else
1075           {
1076             uiout->field_skip ("from");
1077             uiout->field_skip ("to");
1078           }
1079
1080         if (! top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ()
1081             && so->symbols_loaded
1082             && !objfile_has_symbols (so->objfile))
1083           {
1084             so_missing_debug_info = true;
1085             uiout->field_string ("syms-read", "Yes (*)");
1086           }
1087         else
1088           uiout->field_string ("syms-read", so->symbols_loaded ? "Yes" : "No");
1089
1090         uiout->field_string ("name", so->so_name, file_name_style.style ());
1091
1092         uiout->text ("\n");
1093       }
1094   }
1095
1096   if (nr_libs == 0)
1097     {
1098       if (pattern)
1099         uiout->message (_("No shared libraries matched.\n"));
1100       else
1101         uiout->message (_("No shared libraries loaded at this time.\n"));
1102     }
1103   else
1104     {
1105       if (so_missing_debug_info)
1106         uiout->message (_("(*): Shared library is missing "
1107                           "debugging information.\n"));
1108     }
1109 }
1110
1111 /* See solib.h.  */
1112
1113 bool
1114 solib_contains_address_p (const struct so_list *const solib,
1115                           CORE_ADDR address)
1116 {
1117   if (solib->sections == nullptr)
1118     return false;
1119
1120   for (target_section &p : *solib->sections)
1121     if (p.addr <= address && address < p.endaddr)
1122       return true;
1123
1124   return false;
1125 }
1126
1127 /* If ADDRESS is in a shared lib in program space PSPACE, return its
1128    name.
1129
1130    Provides a hook for other gdb routines to discover whether or not a
1131    particular address is within the mapped address space of a shared
1132    library.
1133
1134    For example, this routine is called at one point to disable
1135    breakpoints which are in shared libraries that are not currently
1136    mapped in.  */
1137
1138 char *
1139 solib_name_from_address (struct program_space *pspace, CORE_ADDR address)
1140 {
1141   struct so_list *so = NULL;
1142
1143   for (so = pspace->so_list; so; so = so->next)
1144     if (solib_contains_address_p (so, address))
1145       return (so->so_name);
1146
1147   return (0);
1148 }
1149
1150 /* See solib.h.  */
1151
1152 bool
1153 solib_keep_data_in_core (CORE_ADDR vaddr, unsigned long size)
1154 {
1155   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1156
1157   if (ops->keep_data_in_core)
1158     return ops->keep_data_in_core (vaddr, size) != 0;
1159   else
1160     return false;
1161 }
1162
1163 /* Called by free_all_symtabs */
1164
1165 void
1166 clear_solib (void)
1167 {
1168   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1169
1170   disable_breakpoints_in_shlibs ();
1171
1172   while (current_program_space->so_list)
1173     {
1174       struct so_list *so = current_program_space->so_list;
1175
1176       current_program_space->so_list = so->next;
1177       gdb::observers::solib_unloaded.notify (so);
1178       current_program_space->remove_target_sections (so);
1179       free_so (so);
1180     }
1181
1182   ops->clear_solib ();
1183 }
1184
1185 /* Shared library startup support.  When GDB starts up the inferior,
1186    it nurses it along (through the shell) until it is ready to execute
1187    its first instruction.  At this point, this function gets
1188    called.  */
1189
1190 void
1191 solib_create_inferior_hook (int from_tty)
1192 {
1193   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1194
1195   ops->solib_create_inferior_hook (from_tty);
1196 }
1197
1198 /* See solib.h.  */
1199
1200 bool
1201 in_solib_dynsym_resolve_code (CORE_ADDR pc)
1202 {
1203   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1204
1205   return ops->in_dynsym_resolve_code (pc) != 0;
1206 }
1207
1208 /* Implements the "sharedlibrary" command.  */
1209
1210 static void
1211 sharedlibrary_command (const char *args, int from_tty)
1212 {
1213   dont_repeat ();
1214   solib_add (args, from_tty, 1);
1215 }
1216
1217 /* Implements the command "nosharedlibrary", which discards symbols
1218    that have been auto-loaded from shared libraries.  Symbols from
1219    shared libraries that were added by explicit request of the user
1220    are not discarded.  Also called from remote.c.  */
1221
1222 void
1223 no_shared_libraries (const char *ignored, int from_tty)
1224 {
1225   /* The order of the two routines below is important: clear_solib notifies
1226      the solib_unloaded observers, and some of these observers might need
1227      access to their associated objfiles.  Therefore, we can not purge the
1228      solibs' objfiles before clear_solib has been called.  */
1229
1230   clear_solib ();
1231   objfile_purge_solibs ();
1232 }
1233
1234 /* See solib.h.  */
1235
1236 void
1237 update_solib_breakpoints (void)
1238 {
1239   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1240
1241   if (ops->update_breakpoints != NULL)
1242     ops->update_breakpoints ();
1243 }
1244
1245 /* See solib.h.  */
1246
1247 void
1248 handle_solib_event (void)
1249 {
1250   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1251
1252   if (ops->handle_event != NULL)
1253     ops->handle_event ();
1254
1255   current_inferior ()->pspace->clear_solib_cache ();
1256
1257   /* Check for any newly added shared libraries if we're supposed to
1258      be adding them automatically.  Switch terminal for any messages
1259      produced by breakpoint_re_set.  */
1260   target_terminal::ours_for_output ();
1261   solib_add (NULL, 0, auto_solib_add);
1262   target_terminal::inferior ();
1263 }
1264
1265 /* Reload shared libraries, but avoid reloading the same symbol file
1266    we already have loaded.  */
1267
1268 static void
1269 reload_shared_libraries_1 (int from_tty)
1270 {
1271   if (print_symbol_loading_p (from_tty, 0, 0))
1272     printf_unfiltered (_("Loading symbols for shared libraries.\n"));
1273
1274   for (struct so_list *so : current_program_space->solibs ())
1275     {
1276       const char *found_pathname = NULL;
1277       bool was_loaded = so->symbols_loaded != 0;
1278       symfile_add_flags add_flags = SYMFILE_DEFER_BP_RESET;
1279
1280       if (from_tty)
1281         add_flags |= SYMFILE_VERBOSE;
1282
1283       gdb::unique_xmalloc_ptr<char> filename
1284         (tilde_expand (so->so_original_name));
1285       gdb_bfd_ref_ptr abfd (solib_bfd_open (filename.get ()));
1286       if (abfd != NULL)
1287         found_pathname = bfd_get_filename (abfd.get ());
1288
1289       /* If this shared library is no longer associated with its previous
1290          symbol file, close that.  */
1291       if ((found_pathname == NULL && was_loaded)
1292           || (found_pathname != NULL
1293               && filename_cmp (found_pathname, so->so_name) != 0))
1294         {
1295           if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED)
1296               && !solib_used (so))
1297             so->objfile->unlink ();
1298           current_program_space->remove_target_sections (so);
1299           clear_so (so);
1300         }
1301
1302       /* If this shared library is now associated with a new symbol
1303          file, open it.  */
1304       if (found_pathname != NULL
1305           && (!was_loaded
1306               || filename_cmp (found_pathname, so->so_name) != 0))
1307         {
1308           bool got_error = false;
1309
1310           try
1311             {
1312               solib_map_sections (so);
1313             }
1314
1315           catch (const gdb_exception_error &e)
1316             {
1317               exception_fprintf (gdb_stderr, e,
1318                                  _("Error while mapping "
1319                                    "shared library sections:\n"));
1320               got_error = true;
1321             }
1322
1323             if (!got_error
1324                 && (auto_solib_add || was_loaded || libpthread_solib_p (so)))
1325               solib_read_symbols (so, add_flags);
1326         }
1327     }
1328 }
1329
1330 static void
1331 reload_shared_libraries (const char *ignored, int from_tty,
1332                          struct cmd_list_element *e)
1333 {
1334   const struct target_so_ops *ops;
1335
1336   reload_shared_libraries_1 (from_tty);
1337
1338   ops = solib_ops (target_gdbarch ());
1339
1340   /* Creating inferior hooks here has two purposes.  First, if we reload 
1341      shared libraries then the address of solib breakpoint we've computed
1342      previously might be no longer valid.  For example, if we forgot to set
1343      solib-absolute-prefix and are setting it right now, then the previous
1344      breakpoint address is plain wrong.  Second, installing solib hooks
1345      also implicitly figures were ld.so is and loads symbols for it.
1346      Absent this call, if we've just connected to a target and set 
1347      solib-absolute-prefix or solib-search-path, we'll lose all information
1348      about ld.so.  */
1349   if (target_has_execution ())
1350     {
1351       /* Reset or free private data structures not associated with
1352          so_list entries.  */
1353       ops->clear_solib ();
1354
1355       /* Remove any previous solib event breakpoint.  This is usually
1356          done in common code, at breakpoint_init_inferior time, but
1357          we're not really starting up the inferior here.  */
1358       remove_solib_event_breakpoints ();
1359
1360       solib_create_inferior_hook (from_tty);
1361     }
1362
1363   /* Sometimes the platform-specific hook loads initial shared
1364      libraries, and sometimes it doesn't.  If it doesn't FROM_TTY will be
1365      incorrectly 0 but such solib targets should be fixed anyway.  If we
1366      made all the inferior hook methods consistent, this call could be
1367      removed.  Call it only after the solib target has been initialized by
1368      solib_create_inferior_hook.  */
1369
1370   solib_add (NULL, 0, auto_solib_add);
1371
1372   breakpoint_re_set ();
1373
1374   /* We may have loaded or unloaded debug info for some (or all)
1375      shared libraries.  However, frames may still reference them.  For
1376      example, a frame's unwinder might still point at DWARF FDE
1377      structures that are now freed.  Also, getting new symbols may
1378      change our opinion about what is frameless.  */
1379   reinit_frame_cache ();
1380 }
1381
1382 /* Wrapper for reload_shared_libraries that replaces "remote:"
1383    at the start of gdb_sysroot with "target:".  */
1384
1385 static void
1386 gdb_sysroot_changed (const char *ignored, int from_tty,
1387                      struct cmd_list_element *e)
1388 {
1389   const char *old_prefix = "remote:";
1390   const char *new_prefix = TARGET_SYSROOT_PREFIX;
1391
1392   if (startswith (gdb_sysroot, old_prefix))
1393     {
1394       static bool warning_issued = false;
1395
1396       gdb_assert (strlen (old_prefix) == strlen (new_prefix));
1397       memcpy (gdb_sysroot, new_prefix, strlen (new_prefix));
1398
1399       if (!warning_issued)
1400         {
1401           warning (_("\"%s\" is deprecated, use \"%s\" instead."),
1402                    old_prefix, new_prefix);
1403           warning (_("sysroot set to \"%s\"."), gdb_sysroot);
1404
1405           warning_issued = true;
1406         }
1407     }
1408
1409   reload_shared_libraries (ignored, from_tty, e);
1410 }
1411
1412 static void
1413 show_auto_solib_add (struct ui_file *file, int from_tty,
1414                      struct cmd_list_element *c, const char *value)
1415 {
1416   fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"),
1417                     value);
1418 }
1419
1420
1421 /* Lookup the value for a specific symbol from dynamic symbol table.  Look
1422    up symbol from ABFD.  MATCH_SYM is a callback function to determine
1423    whether to pick up a symbol.  DATA is the input of this callback
1424    function.  Return NULL if symbol is not found.  */
1425
1426 CORE_ADDR
1427 gdb_bfd_lookup_symbol_from_symtab (bfd *abfd,
1428                                    int (*match_sym) (const asymbol *,
1429                                                      const void *),
1430                                    const void *data)
1431 {
1432   long storage_needed = bfd_get_symtab_upper_bound (abfd);
1433   CORE_ADDR symaddr = 0;
1434
1435   if (storage_needed > 0)
1436     {
1437       unsigned int i;
1438
1439       gdb::def_vector<asymbol *> storage (storage_needed / sizeof (asymbol *));
1440       asymbol **symbol_table = storage.data ();
1441       unsigned int number_of_symbols =
1442         bfd_canonicalize_symtab (abfd, symbol_table);
1443
1444       for (i = 0; i < number_of_symbols; i++)
1445         {
1446           asymbol *sym  = *symbol_table++;
1447
1448           if (match_sym (sym, data))
1449             {
1450               struct gdbarch *gdbarch = target_gdbarch ();
1451               symaddr = sym->value;
1452
1453               /* Some ELF targets fiddle with addresses of symbols they
1454                  consider special.  They use minimal symbols to do that
1455                  and this is needed for correct breakpoint placement,
1456                  but we do not have full data here to build a complete
1457                  minimal symbol, so just set the address and let the
1458                  targets cope with that.  */
1459               if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1460                   && gdbarch_elf_make_msymbol_special_p (gdbarch))
1461                 {
1462                   struct minimal_symbol msym {};
1463
1464                   SET_MSYMBOL_VALUE_ADDRESS (&msym, symaddr);
1465                   gdbarch_elf_make_msymbol_special (gdbarch, sym, &msym);
1466                   symaddr = MSYMBOL_VALUE_RAW_ADDRESS (&msym);
1467                 }
1468
1469               /* BFD symbols are section relative.  */
1470               symaddr += sym->section->vma;
1471               break;
1472             }
1473         }
1474     }
1475
1476   return symaddr;
1477 }
1478
1479 /* Lookup the value for a specific symbol from symbol table.  Look up symbol
1480    from ABFD.  MATCH_SYM is a callback function to determine whether to pick
1481    up a symbol.  DATA is the input of this callback function.  Return NULL
1482    if symbol is not found.  */
1483
1484 static CORE_ADDR
1485 bfd_lookup_symbol_from_dyn_symtab (bfd *abfd,
1486                                    int (*match_sym) (const asymbol *,
1487                                                      const void *),
1488                                    const void *data)
1489 {
1490   long storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
1491   CORE_ADDR symaddr = 0;
1492
1493   if (storage_needed > 0)
1494     {
1495       unsigned int i;
1496       gdb::def_vector<asymbol *> storage (storage_needed / sizeof (asymbol *));
1497       asymbol **symbol_table = storage.data ();
1498       unsigned int number_of_symbols =
1499         bfd_canonicalize_dynamic_symtab (abfd, symbol_table);
1500
1501       for (i = 0; i < number_of_symbols; i++)
1502         {
1503           asymbol *sym = *symbol_table++;
1504
1505           if (match_sym (sym, data))
1506             {
1507               /* BFD symbols are section relative.  */
1508               symaddr = sym->value + sym->section->vma;
1509               break;
1510             }
1511         }
1512     }
1513   return symaddr;
1514 }
1515
1516 /* Lookup the value for a specific symbol from symbol table and dynamic
1517    symbol table.  Look up symbol from ABFD.  MATCH_SYM is a callback
1518    function to determine whether to pick up a symbol.  DATA is the
1519    input of this callback function.  Return NULL if symbol is not
1520    found.  */
1521
1522 CORE_ADDR
1523 gdb_bfd_lookup_symbol (bfd *abfd,
1524                        int (*match_sym) (const asymbol *, const void *),
1525                        const void *data)
1526 {
1527   CORE_ADDR symaddr = gdb_bfd_lookup_symbol_from_symtab (abfd, match_sym, data);
1528
1529   /* On FreeBSD, the dynamic linker is stripped by default.  So we'll
1530      have to check the dynamic string table too.  */
1531   if (symaddr == 0)
1532     symaddr = bfd_lookup_symbol_from_dyn_symtab (abfd, match_sym, data);
1533
1534   return symaddr;
1535 }
1536
1537 /* The shared library list may contain user-loaded object files that
1538    can be removed out-of-band by the user.  So upon notification of
1539    free_objfile remove all references to any user-loaded file that is
1540    about to be freed.  */
1541
1542 static void
1543 remove_user_added_objfile (struct objfile *objfile)
1544 {
1545   if (objfile != 0 && objfile->flags & OBJF_USERLOADED)
1546     {
1547       for (struct so_list *so : current_program_space->solibs ())
1548         if (so->objfile == objfile)
1549           so->objfile = NULL;
1550     }
1551 }
1552
1553 void _initialize_solib ();
1554 void
1555 _initialize_solib ()
1556 {
1557   solib_data = gdbarch_data_register_pre_init (solib_init);
1558
1559   gdb::observers::free_objfile.attach (remove_user_added_objfile);
1560   gdb::observers::inferior_execd.attach ([] (inferior *inf)
1561     {
1562       solib_create_inferior_hook (0);
1563     });
1564
1565   add_com ("sharedlibrary", class_files, sharedlibrary_command,
1566            _("Load shared object library symbols for files matching REGEXP."));
1567   add_info ("sharedlibrary", info_sharedlibrary_command,
1568             _("Status of loaded shared object libraries."));
1569   add_info_alias ("dll", "sharedlibrary", 1);
1570   add_com ("nosharedlibrary", class_files, no_shared_libraries,
1571            _("Unload all shared object library symbols."));
1572
1573   add_setshow_boolean_cmd ("auto-solib-add", class_support,
1574                            &auto_solib_add, _("\
1575 Set autoloading of shared library symbols."), _("\
1576 Show autoloading of shared library symbols."), _("\
1577 If \"on\", symbols from all shared object libraries will be loaded\n\
1578 automatically when the inferior begins execution, when the dynamic linker\n\
1579 informs gdb that a new library has been loaded, or when attaching to the\n\
1580 inferior.  Otherwise, symbols must be loaded manually, using \
1581 `sharedlibrary'."),
1582                            NULL,
1583                            show_auto_solib_add,
1584                            &setlist, &showlist);
1585
1586   add_setshow_optional_filename_cmd ("sysroot", class_support,
1587                                      &gdb_sysroot, _("\
1588 Set an alternate system root."), _("\
1589 Show the current system root."), _("\
1590 The system root is used to load absolute shared library symbol files.\n\
1591 For other (relative) files, you can add directories using\n\
1592 `set solib-search-path'."),
1593                                      gdb_sysroot_changed,
1594                                      NULL,
1595                                      &setlist, &showlist);
1596
1597   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1598                  &setlist);
1599   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1600                  &showlist);
1601
1602   add_setshow_optional_filename_cmd ("solib-search-path", class_support,
1603                                      &solib_search_path, _("\
1604 Set the search path for loading non-absolute shared library symbol files."),
1605                                      _("\
1606 Show the search path for loading non-absolute shared library symbol files."),
1607                                      _("\
1608 This takes precedence over the environment variables \
1609 PATH and LD_LIBRARY_PATH."),
1610                                      reload_shared_libraries,
1611                                      show_solib_search_path,
1612                                      &setlist, &showlist);
1613 }
This page took 0.129036 seconds and 4 git commands to generate.