* demangle.c (demangling_style_names): New variable.
[external/binutils.git] / gdb / solib.c
1 /* Handle shared libraries for GDB, the GNU Debugger.
2    Copyright 1990, 91, 92, 93, 94, 95, 96, 98, 1999, 2000, 2001
3    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 2 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, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
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 "gdbcore.h"
32 #include "command.h"
33 #include "target.h"
34 #include "frame.h"
35 #include "gdb_regex.h"
36 #include "inferior.h"
37 #include "environ.h"
38 #include "language.h"
39 #include "gdbcmd.h"
40 #include "completer.h"
41
42 #include "solist.h"
43
44 /* external data declarations */
45
46 /* FIXME: gdbarch needs to control this variable */
47 struct target_so_ops *current_target_so_ops;
48
49 /* local data declarations */
50
51 static struct so_list *so_list_head;    /* List of known shared objects */
52
53 static int solib_cleanup_queued = 0;    /* make_run_cleanup called */
54
55 /* Local function prototypes */
56
57 static void do_clear_solib (PTR);
58
59 /* If non-zero, this is a prefix that will be added to the front of the name
60    shared libraries with an absolute filename for loading.  */
61 static char *solib_absolute_prefix = NULL;
62
63 /* If non-empty, this is a search path for loading non-absolute shared library
64    symbol files.  This takes precedence over the environment variables PATH
65    and LD_LIBRARY_PATH.  */
66 static char *solib_search_path = NULL;
67
68 /*
69
70    GLOBAL FUNCTION
71
72    solib_open -- Find a shared library file and open it.
73
74    SYNOPSIS
75
76    int solib_open (char *in_patname, char **found_pathname);
77
78    DESCRIPTION
79
80    Global variable SOLIB_ABSOLUTE_PREFIX is used as a prefix directory
81    to search for shared libraries if they have an absolute path.
82
83    Global variable SOLIB_SEARCH_PATH is used as a prefix directory
84    (or set of directories, as in LD_LIBRARY_PATH) to search for all
85    shared libraries if not found in SOLIB_ABSOLUTE_PREFIX.
86
87    Search order:
88    * If path is absolute, look in SOLIB_ABSOLUTE_PREFIX.
89    * If path is absolute or relative, look for it literally (unmodified).
90    * Look in SOLIB_SEARCH_PATH.
91    * Look in inferior's $PATH.
92    * Look in inferior's $LD_LIBRARY_PATH.
93
94    RETURNS
95
96    file handle for opened solib, or -1 for failure.  */
97
98 int
99 solib_open (char *in_pathname, char **found_pathname)
100 {
101   int found_file = -1;
102   char *temp_pathname = NULL;
103
104   if (strchr (in_pathname, SLASH_CHAR))
105     {
106       if (! ROOTED_P (in_pathname) || solib_absolute_prefix == NULL)
107         temp_pathname = in_pathname;
108       else
109         {
110           int prefix_len = strlen (solib_absolute_prefix);
111
112           /* Remove trailing slashes from absolute prefix.  */
113           while (prefix_len > 0
114                  && SLASH_P (solib_absolute_prefix[prefix_len - 1]))
115             prefix_len--;
116
117           /* Cat the prefixed pathname together.  */
118           temp_pathname = alloca (prefix_len + strlen (in_pathname) + 1);
119           strncpy (temp_pathname, solib_absolute_prefix, prefix_len);
120           temp_pathname[prefix_len] = '\0';
121           strcat (temp_pathname, in_pathname);
122         }
123
124       /* Now see if we can open it.  */
125       found_file = open (temp_pathname, O_RDONLY, 0);
126     }
127
128   /* If not found, next search the solib_search_path (if any).  */
129   if (found_file < 0 && solib_search_path != NULL)
130     found_file = openp (solib_search_path,
131                         1, in_pathname, O_RDONLY, 0, &temp_pathname);
132
133   /* If not found, next search the inferior's $PATH environment variable. */
134   if (found_file < 0 && solib_search_path != NULL)
135     found_file = openp (get_in_environ (inferior_environ, "PATH"),
136                         1, in_pathname, O_RDONLY, 0, &temp_pathname);
137
138   /* If not found, next search the inferior's $LD_LIBRARY_PATH 
139      environment variable. */
140   if (found_file < 0 && solib_search_path != NULL)
141     found_file = openp (get_in_environ (inferior_environ, "LD_LIBRARY_PATH"),
142                         1, in_pathname, O_RDONLY, 0, &temp_pathname);
143
144   /* Done.  If not found, tough luck.  Return found_file and 
145      (optionally) found_pathname.  */
146   if (found_pathname != NULL && temp_pathname != NULL)
147     *found_pathname = xstrdup (temp_pathname);
148   return found_file;
149 }
150
151
152 /*
153
154    LOCAL FUNCTION
155
156    solib_map_sections -- open bfd and build sections for shared lib
157
158    SYNOPSIS
159
160    static int solib_map_sections (struct so_list *so)
161
162    DESCRIPTION
163
164    Given a pointer to one of the shared objects in our list
165    of mapped objects, use the recorded name to open a bfd
166    descriptor for the object, build a section table, and then
167    relocate all the section addresses by the base address at
168    which the shared object was mapped.
169
170    FIXMES
171
172    In most (all?) cases the shared object file name recorded in the
173    dynamic linkage tables will be a fully qualified pathname.  For
174    cases where it isn't, do we really mimic the systems search
175    mechanism correctly in the below code (particularly the tilde
176    expansion stuff?).
177  */
178
179 static int
180 solib_map_sections (PTR arg)
181 {
182   struct so_list *so = (struct so_list *) arg;  /* catch_errors bogon */
183   char *filename;
184   char *scratch_pathname;
185   int scratch_chan;
186   struct section_table *p;
187   struct cleanup *old_chain;
188   bfd *abfd;
189
190   filename = tilde_expand (so->so_name);
191
192   old_chain = make_cleanup (xfree, filename);
193   scratch_chan = solib_open (filename, &scratch_pathname);
194
195   if (scratch_chan < 0)
196     {
197       perror_with_name (filename);
198     }
199
200   /* Leave scratch_pathname allocated.  abfd->name will point to it.  */
201   abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
202   if (!abfd)
203     {
204       close (scratch_chan);
205       error ("Could not open `%s' as an executable file: %s",
206              scratch_pathname, bfd_errmsg (bfd_get_error ()));
207     }
208
209   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
210   so->abfd = abfd;
211   abfd->cacheable = true;
212
213   /* copy full path name into so_name, so that later symbol_file_add
214      can find it */
215   if (strlen (scratch_pathname) >= SO_NAME_MAX_PATH_SIZE)
216     error ("Full path name length of shared library exceeds SO_NAME_MAX_PATH_SIZE in so_list structure.");
217   strcpy (so->so_name, scratch_pathname);
218
219   if (!bfd_check_format (abfd, bfd_object))
220     {
221       error ("\"%s\": not in executable format: %s.",
222              scratch_pathname, bfd_errmsg (bfd_get_error ()));
223     }
224   if (build_section_table (abfd, &so->sections, &so->sections_end))
225     {
226       error ("Can't find the file sections in `%s': %s",
227              bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
228     }
229
230   for (p = so->sections; p < so->sections_end; p++)
231     {
232       /* Relocate the section binding addresses as recorded in the shared
233          object's file by the base address to which the object was actually
234          mapped. */
235       TARGET_SO_RELOCATE_SECTION_ADDRESSES (so, p);
236       if (STREQ (p->the_bfd_section->name, ".text"))
237         {
238           so->textsection = p;
239         }
240     }
241
242   /* Free the file names, close the file now.  */
243   do_cleanups (old_chain);
244
245   return (1);
246 }
247
248 /* LOCAL FUNCTION
249
250    free_so --- free a `struct so_list' object
251
252    SYNOPSIS
253
254    void free_so (struct so_list *so)
255
256    DESCRIPTION
257
258    Free the storage associated with the `struct so_list' object SO.
259    If we have opened a BFD for SO, close it.  
260
261    The caller is responsible for removing SO from whatever list it is
262    a member of.  If we have placed SO's sections in some target's
263    section table, the caller is responsible for removing them.
264
265    This function doesn't mess with objfiles at all.  If there is an
266    objfile associated with SO that needs to be removed, the caller is
267    responsible for taking care of that.  */
268
269 void
270 free_so (struct so_list *so)
271 {
272   char *bfd_filename = 0;
273
274   if (so->sections)
275     xfree (so->sections);
276       
277   if (so->abfd)
278     {
279       bfd_filename = bfd_get_filename (so->abfd);
280       if (! bfd_close (so->abfd))
281         warning ("cannot close \"%s\": %s",
282                  bfd_filename, bfd_errmsg (bfd_get_error ()));
283     }
284
285   if (bfd_filename)
286     xfree (bfd_filename);
287
288   TARGET_SO_FREE_SO (so);
289
290   xfree (so);
291 }
292
293
294 /* A small stub to get us past the arg-passing pinhole of catch_errors.  */
295
296 static int
297 symbol_add_stub (PTR arg)
298 {
299   register struct so_list *so = (struct so_list *) arg;  /* catch_errs bogon */
300   struct section_addr_info *sap;
301
302   /* Have we already loaded this shared object?  */
303   ALL_OBJFILES (so->objfile)
304     {
305       if (strcmp (so->objfile->name, so->so_name) == 0)
306         return 1;
307     }
308
309   sap = build_section_addr_info_from_section_table (so->sections,
310                                                     so->sections_end);
311
312   so->objfile = symbol_file_add (so->so_name, so->from_tty,
313                                  sap, 0, OBJF_SHARED);
314   free_section_addr_info (sap);
315
316   return (1);
317 }
318
319
320 /* LOCAL FUNCTION
321
322    update_solib_list --- synchronize GDB's shared object list with inferior's
323
324    SYNOPSIS
325
326    void update_solib_list (int from_tty, struct target_ops *TARGET)
327
328    Extract the list of currently loaded shared objects from the
329    inferior, and compare it with the list of shared objects currently
330    in GDB's so_list_head list.  Edit so_list_head to bring it in sync
331    with the inferior's new list.
332
333    If we notice that the inferior has unloaded some shared objects,
334    free any symbolic info GDB had read about those shared objects.
335
336    Don't load symbolic info for any new shared objects; just add them
337    to the list, and leave their symbols_loaded flag clear.
338
339    If FROM_TTY is non-null, feel free to print messages about what
340    we're doing.
341
342    If TARGET is non-null, add the sections of all new shared objects
343    to TARGET's section table.  Note that this doesn't remove any
344    sections for shared objects that have been unloaded, and it
345    doesn't check to see if the new shared objects are already present in
346    the section table.  But we only use this for core files and
347    processes we've just attached to, so that's okay.  */
348
349 void
350 update_solib_list (int from_tty, struct target_ops *target)
351 {
352   struct so_list *inferior = TARGET_SO_CURRENT_SOS ();
353   struct so_list *gdb, **gdb_link;
354
355   /* If we are attaching to a running process for which we 
356      have not opened a symbol file, we may be able to get its 
357      symbols now!  */
358   if (attach_flag &&
359       symfile_objfile == NULL)
360     catch_errors (TARGET_SO_OPEN_SYMBOL_FILE_OBJECT, (PTR) &from_tty, 
361                   "Error reading attached process's symbol file.\n",
362                   RETURN_MASK_ALL);
363
364   /* Since this function might actually add some elements to the
365      so_list_head list, arrange for it to be cleaned up when
366      appropriate.  */
367   if (!solib_cleanup_queued)
368     {
369       make_run_cleanup (do_clear_solib, NULL);
370       solib_cleanup_queued = 1;
371     }
372
373   /* GDB and the inferior's dynamic linker each maintain their own
374      list of currently loaded shared objects; we want to bring the
375      former in sync with the latter.  Scan both lists, seeing which
376      shared objects appear where.  There are three cases:
377
378      - A shared object appears on both lists.  This means that GDB
379      knows about it already, and it's still loaded in the inferior.
380      Nothing needs to happen.
381
382      - A shared object appears only on GDB's list.  This means that
383      the inferior has unloaded it.  We should remove the shared
384      object from GDB's tables.
385
386      - A shared object appears only on the inferior's list.  This
387      means that it's just been loaded.  We should add it to GDB's
388      tables.
389
390      So we walk GDB's list, checking each entry to see if it appears
391      in the inferior's list too.  If it does, no action is needed, and
392      we remove it from the inferior's list.  If it doesn't, the
393      inferior has unloaded it, and we remove it from GDB's list.  By
394      the time we're done walking GDB's list, the inferior's list
395      contains only the new shared objects, which we then add.  */
396
397   gdb = so_list_head;
398   gdb_link = &so_list_head;
399   while (gdb)
400     {
401       struct so_list *i = inferior;
402       struct so_list **i_link = &inferior;
403
404       /* Check to see whether the shared object *gdb also appears in
405          the inferior's current list.  */
406       while (i)
407         {
408           if (! strcmp (gdb->so_original_name, i->so_original_name))
409             break;
410
411           i_link = &i->next;
412           i = *i_link;
413         }
414
415       /* If the shared object appears on the inferior's list too, then
416          it's still loaded, so we don't need to do anything.  Delete
417          it from the inferior's list, and leave it on GDB's list.  */
418       if (i)
419         {
420           *i_link = i->next;
421           free_so (i);
422           gdb_link = &gdb->next;
423           gdb = *gdb_link;
424         }
425
426       /* If it's not on the inferior's list, remove it from GDB's tables.  */
427       else
428         {
429           *gdb_link = gdb->next;
430
431           /* Unless the user loaded it explicitly, free SO's objfile.  */
432           if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
433             free_objfile (gdb->objfile);
434
435           /* Some targets' section tables might be referring to
436              sections from so->abfd; remove them.  */
437           remove_target_sections (gdb->abfd);
438
439           free_so (gdb);
440           gdb = *gdb_link;
441         }
442     }
443
444   /* Now the inferior's list contains only shared objects that don't
445      appear in GDB's list --- those that are newly loaded.  Add them
446      to GDB's shared object list.  */
447   if (inferior)
448     {
449       struct so_list *i;
450
451       /* Add the new shared objects to GDB's list.  */
452       *gdb_link = inferior;
453
454       /* Fill in the rest of each of the `struct so_list' nodes.  */
455       for (i = inferior; i; i = i->next)
456         {
457           i->from_tty = from_tty;
458
459           /* Fill in the rest of the `struct so_list' node.  */
460           catch_errors (solib_map_sections, i,
461                         "Error while mapping shared library sections:\n",
462                         RETURN_MASK_ALL);
463         }
464
465       /* If requested, add the shared objects' sections to the the
466          TARGET's section table.  */
467       if (target)
468         {
469           int new_sections;
470
471           /* Figure out how many sections we'll need to add in total.  */
472           new_sections = 0;
473           for (i = inferior; i; i = i->next)
474             new_sections += (i->sections_end - i->sections);
475
476           if (new_sections > 0)
477             {
478               int space = target_resize_to_sections (target, new_sections);
479
480               for (i = inferior; i; i = i->next)
481                 {
482                   int count = (i->sections_end - i->sections);
483                   memcpy (target->to_sections + space,
484                           i->sections,
485                           count * sizeof (i->sections[0]));
486                   space += count;
487                 }
488             }
489         }
490     }
491 }
492
493
494 /* GLOBAL FUNCTION
495
496    solib_add -- read in symbol info for newly added shared libraries
497
498    SYNOPSIS
499
500    void solib_add (char *pattern, int from_tty, struct target_ops *TARGET)
501
502    DESCRIPTION
503
504    Read in symbolic information for any shared objects whose names
505    match PATTERN.  (If we've already read a shared object's symbol
506    info, leave it alone.)  If PATTERN is zero, read them all.
507
508    FROM_TTY and TARGET are as described for update_solib_list, above.  */
509
510 void
511 solib_add (char *pattern, int from_tty, struct target_ops *target)
512 {
513   struct so_list *gdb;
514
515   if (pattern)
516     {
517       char *re_err = re_comp (pattern);
518
519       if (re_err)
520         error ("Invalid regexp: %s", re_err);
521     }
522
523   update_solib_list (from_tty, target);
524
525   /* Walk the list of currently loaded shared libraries, and read
526      symbols for any that match the pattern --- or any whose symbols
527      aren't already loaded, if no pattern was given.  */
528   {
529     int any_matches = 0;
530     int loaded_any_symbols = 0;
531
532     for (gdb = so_list_head; gdb; gdb = gdb->next)
533       if (! pattern || re_exec (gdb->so_name))
534         {
535           any_matches = 1;
536
537           if (gdb->symbols_loaded)
538             {
539               if (from_tty)
540                 printf_unfiltered ("Symbols already loaded for %s\n",
541                                    gdb->so_name);
542             }
543           else
544             {
545               if (catch_errors
546                   (symbol_add_stub, gdb,
547                    "Error while reading shared library symbols:\n",
548                    RETURN_MASK_ALL))
549                 {
550                   if (from_tty)
551                     printf_unfiltered ("Loaded symbols for %s\n",
552                                        gdb->so_name);
553                   gdb->symbols_loaded = 1;
554                   loaded_any_symbols = 1;
555                 }
556             }
557         }
558
559     if (from_tty && pattern && ! any_matches)
560       printf_unfiltered
561         ("No loaded shared libraries match the pattern `%s'.\n", pattern);
562
563     if (loaded_any_symbols)
564       {
565         /* Getting new symbols may change our opinion about what is
566            frameless.  */
567         reinit_frame_cache ();
568
569         TARGET_SO_SPECIAL_SYMBOL_HANDLING ();
570       }
571   }
572 }
573
574
575 /*
576
577    LOCAL FUNCTION
578
579    info_sharedlibrary_command -- code for "info sharedlibrary"
580
581    SYNOPSIS
582
583    static void info_sharedlibrary_command ()
584
585    DESCRIPTION
586
587    Walk through the shared library list and print information
588    about each attached library.
589  */
590
591 static void
592 info_sharedlibrary_command (char *ignore, int from_tty)
593 {
594   register struct so_list *so = NULL;   /* link map state variable */
595   int header_done = 0;
596   int addr_width;
597   char *addr_fmt;
598   int arch_size;
599
600   if (exec_bfd == NULL)
601     {
602       printf_unfiltered ("No executable file.\n");
603       return;
604     }
605
606   arch_size = bfd_get_arch_size (exec_bfd);
607   /* Default to 32-bit in case of failure (non-elf). */
608   if (arch_size == 32 || arch_size == -1)
609     {
610       addr_width = 8 + 4;
611       addr_fmt = "08l";
612     }
613   else if (arch_size == 64)
614     {
615       addr_width = 16 + 4;
616       addr_fmt = "016l";
617     }
618   else
619     {
620       internal_error (__FILE__, __LINE__,
621                       "bfd_get_arch_size() returned unknown size %d",
622                       arch_size);
623     }
624
625   update_solib_list (from_tty, 0);
626
627   for (so = so_list_head; so; so = so->next)
628     {
629       if (so->so_name[0])
630         {
631           if (!header_done)
632             {
633               printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
634                                  addr_width, "To", "Syms Read",
635                                  "Shared Object Library");
636               header_done++;
637             }
638
639           printf_unfiltered ("%-*s", addr_width,
640                              so->textsection != NULL 
641                                ? local_hex_string_custom (
642                                    (unsigned long) so->textsection->addr,
643                                    addr_fmt)
644                                : "");
645           printf_unfiltered ("%-*s", addr_width,
646                              so->textsection != NULL 
647                                ? local_hex_string_custom (
648                                    (unsigned long) so->textsection->endaddr,
649                                    addr_fmt)
650                                : "");
651           printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
652           printf_unfiltered ("%s\n", so->so_name);
653         }
654     }
655   if (so_list_head == NULL)
656     {
657       printf_unfiltered ("No shared libraries loaded at this time.\n");
658     }
659 }
660
661 /*
662
663    GLOBAL FUNCTION
664
665    solib_address -- check to see if an address is in a shared lib
666
667    SYNOPSIS
668
669    char * solib_address (CORE_ADDR address)
670
671    DESCRIPTION
672
673    Provides a hook for other gdb routines to discover whether or
674    not a particular address is within the mapped address space of
675    a shared library.
676
677    For example, this routine is called at one point to disable
678    breakpoints which are in shared libraries that are not currently
679    mapped in.
680  */
681
682 char *
683 solib_address (CORE_ADDR address)
684 {
685   register struct so_list *so = 0;      /* link map state variable */
686
687   for (so = so_list_head; so; so = so->next)
688     {
689       struct section_table *p;
690
691       for (p = so->sections; p < so->sections_end; p++)
692         {
693           if (p->addr <= address && address < p->endaddr)
694             return (so->so_name);
695         }
696     }
697
698   return (0);
699 }
700
701 /* Called by free_all_symtabs */
702
703 void
704 clear_solib (void)
705 {
706   /* This function is expected to handle ELF shared libraries.  It is
707      also used on Solaris, which can run either ELF or a.out binaries
708      (for compatibility with SunOS 4), both of which can use shared
709      libraries.  So we don't know whether we have an ELF executable or
710      an a.out executable until the user chooses an executable file.
711
712      ELF shared libraries don't get mapped into the address space
713      until after the program starts, so we'd better not try to insert
714      breakpoints in them immediately.  We have to wait until the
715      dynamic linker has loaded them; we'll hit a bp_shlib_event
716      breakpoint (look for calls to create_solib_event_breakpoint) when
717      it's ready.
718
719      SunOS shared libraries seem to be different --- they're present
720      as soon as the process begins execution, so there's no need to
721      put off inserting breakpoints.  There's also nowhere to put a
722      bp_shlib_event breakpoint, so if we put it off, we'll never get
723      around to it.
724
725      So: disable breakpoints only if we're using ELF shared libs.  */
726   if (exec_bfd != NULL
727       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
728     disable_breakpoints_in_shlibs (1);
729
730   while (so_list_head)
731     {
732       struct so_list *so = so_list_head;
733       so_list_head = so->next;
734       free_so (so);
735     }
736
737   TARGET_SO_CLEAR_SOLIB ();
738 }
739
740 static void
741 do_clear_solib (PTR dummy)
742 {
743   solib_cleanup_queued = 0;
744   clear_solib ();
745 }
746
747 /* GLOBAL FUNCTION
748
749    solib_create_inferior_hook -- shared library startup support
750
751    SYNOPSIS
752
753    void solib_create_inferior_hook()
754
755    DESCRIPTION
756
757    When gdb starts up the inferior, it nurses it along (through the
758    shell) until it is ready to execute it's first instruction.  At this
759    point, this function gets called via expansion of the macro
760    SOLIB_CREATE_INFERIOR_HOOK.  */
761
762 void
763 solib_create_inferior_hook (void)
764 {
765   TARGET_SO_SOLIB_CREATE_INFERIOR_HOOK ();
766 }
767
768
769 /*
770
771    LOCAL FUNCTION
772
773    sharedlibrary_command -- handle command to explicitly add library
774
775    SYNOPSIS
776
777    static void sharedlibrary_command (char *args, int from_tty)
778
779    DESCRIPTION
780
781  */
782
783 static void
784 sharedlibrary_command (char *args, int from_tty)
785 {
786   dont_repeat ();
787   solib_add (args, from_tty, (struct target_ops *) 0);
788 }
789
790
791 void
792 _initialize_solib (void)
793 {
794   struct cmd_list_element *c;
795
796   add_com ("sharedlibrary", class_files, sharedlibrary_command,
797            "Load shared object library symbols for files matching REGEXP.");
798   add_info ("sharedlibrary", info_sharedlibrary_command,
799             "Status of loaded shared object libraries.");
800
801   add_show_from_set
802     (add_set_cmd ("auto-solib-add", class_support, var_zinteger,
803                   (char *) &auto_solib_add,
804                   "Set autoloading of shared library symbols.\n\
805 If nonzero, symbols from all shared object libraries will be loaded\n\
806 automatically when the inferior begins execution or when the dynamic linker\n\
807 informs gdb that a new library has been loaded.  Otherwise, symbols\n\
808 must be loaded manually, using `sharedlibrary'.",
809                   &setlist),
810      &showlist);
811
812   c = add_set_cmd ("solib-absolute-prefix", class_support, var_filename,
813                    (char *) &solib_absolute_prefix,
814                    "Set prefix for loading absolute shared library symbol files.\n\
815 For other (relative) files, you can add values using `set solib-search-path'.",
816                    &setlist);
817   add_show_from_set (c, &showlist);
818   c->completer = filename_completer;
819
820   c = add_set_cmd ("solib-search-path", class_support, var_string,
821                    (char *) &solib_search_path,
822                    "Set the search path for loading non-absolute shared library symbol files.\n\
823 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.",
824                    &setlist);
825   add_show_from_set (c, &showlist);
826   c->completer = filename_completer;
827 }