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