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