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