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