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