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