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