OSDN Git Service

* gdb.texinfo (Target Description Format): Add version attribute
[pf3gnuchains/pf3gnuchains4x.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 Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street, Fifth Floor,
21    Boston, MA 02110-1301, USA.  */
22
23 #include "defs.h"
24
25 #include <sys/types.h>
26 #include <fcntl.h>
27 #include "gdb_string.h"
28 #include "symtab.h"
29 #include "bfd.h"
30 #include "symfile.h"
31 #include "objfiles.h"
32 #include "exceptions.h"
33 #include "gdbcore.h"
34 #include "command.h"
35 #include "target.h"
36 #include "frame.h"
37 #include "gdb_regex.h"
38 #include "inferior.h"
39 #include "environ.h"
40 #include "language.h"
41 #include "gdbcmd.h"
42 #include "completer.h"
43 #include "filenames.h"          /* for DOSish file names */
44 #include "exec.h"
45 #include "solist.h"
46 #include "observer.h"
47 #include "readline/readline.h"
48
49 /* Architecture-specific operations.  */
50
51 /* Per-architecture data key.  */
52 static struct gdbarch_data *solib_data;
53
54 static void *
55 solib_init (struct obstack *obstack)
56 {
57   struct target_so_ops **ops;
58
59   ops = OBSTACK_ZALLOC (obstack, struct target_so_ops *);
60   *ops = current_target_so_ops;
61   return ops;
62 }
63
64 static struct target_so_ops *
65 solib_ops (struct gdbarch *gdbarch)
66 {
67   struct target_so_ops **ops = gdbarch_data (gdbarch, solib_data);
68   return *ops;
69 }
70
71 /* Set the solib operations for GDBARCH to NEW_OPS.  */
72
73 void
74 set_solib_ops (struct gdbarch *gdbarch, struct target_so_ops *new_ops)
75 {
76   struct target_so_ops **ops = gdbarch_data (gdbarch, solib_data);
77   *ops = new_ops;
78 }
79 \f
80
81 /* external data declarations */
82
83 /* FIXME: gdbarch needs to control this variable, or else every
84    configuration needs to call set_solib_ops.  */
85 struct target_so_ops *current_target_so_ops;
86
87 /* local data declarations */
88
89 static struct so_list *so_list_head;    /* List of known shared objects */
90
91 static int solib_cleanup_queued = 0;    /* make_run_cleanup called */
92
93 /* Local function prototypes */
94
95 static void do_clear_solib (void *);
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, _("\
106 The search path for loading non-absolute shared library symbol files is %s.\n"),
107                     value);
108 }
109
110 /*
111
112    GLOBAL FUNCTION
113
114    solib_open -- Find a shared library file and open it.
115
116    SYNOPSIS
117
118    int solib_open (char *in_patname, char **found_pathname);
119
120    DESCRIPTION
121
122    Global variable GDB_SYSROOT is used as a prefix directory
123    to search for shared libraries if they have an absolute path.
124
125    Global variable SOLIB_SEARCH_PATH is used as a prefix directory
126    (or set of directories, as in LD_LIBRARY_PATH) to search for all
127    shared libraries if not found in GDB_SYSROOT.
128
129    Search algorithm:
130    * If there is a gdb_sysroot and path is absolute:
131    *   Search for gdb_sysroot/path.
132    * else
133    *   Look for it literally (unmodified).
134    * Look in SOLIB_SEARCH_PATH.
135    * If available, use target defined search function.
136    * If gdb_sysroot is NOT set, perform the following two searches:
137    *   Look in inferior's $PATH.
138    *   Look in inferior's $LD_LIBRARY_PATH.
139    *   
140    * The last check avoids doing this search when targetting remote
141    * machines since gdb_sysroot will almost always be set.
142
143    RETURNS
144
145    file handle for opened solib, or -1 for failure.  */
146
147 int
148 solib_open (char *in_pathname, char **found_pathname)
149 {
150   struct target_so_ops *ops = solib_ops (current_gdbarch);
151   int found_file = -1;
152   char *temp_pathname = NULL;
153   char *p = in_pathname;
154   int gdb_sysroot_is_empty;
155
156   gdb_sysroot_is_empty = (gdb_sysroot == NULL || *gdb_sysroot == 0);
157
158   if (! IS_ABSOLUTE_PATH (in_pathname) || gdb_sysroot_is_empty)
159     temp_pathname = in_pathname;
160   else
161     {
162       int prefix_len = strlen (gdb_sysroot);
163
164       /* Remove trailing slashes from absolute prefix.  */
165       while (prefix_len > 0
166              && IS_DIR_SEPARATOR (gdb_sysroot[prefix_len - 1]))
167         prefix_len--;
168
169       /* Cat the prefixed pathname together.  */
170       temp_pathname = alloca (prefix_len + strlen (in_pathname) + 1);
171       strncpy (temp_pathname, gdb_sysroot, prefix_len);
172       temp_pathname[prefix_len] = '\0';
173       strcat (temp_pathname, in_pathname);
174     }
175
176   /* Now see if we can open it.  */
177   found_file = open (temp_pathname, O_RDONLY | O_BINARY, 0);
178
179   /* If the search in gdb_sysroot failed, and the path name is
180      absolute at this point, make it relative.  (openp will try and open the
181      file according to its absolute path otherwise, which is not what we want.)
182      Affects subsequent searches for this solib.  */
183   if (found_file < 0 && IS_ABSOLUTE_PATH (in_pathname))
184     {
185       /* First, get rid of any drive letters etc.  */
186       while (!IS_DIR_SEPARATOR (*in_pathname))
187         in_pathname++;
188
189       /* Next, get rid of all leading dir separators.  */
190       while (IS_DIR_SEPARATOR (*in_pathname))
191         in_pathname++;
192     }
193   
194   /* If not found, search the solib_search_path (if any).  */
195   if (found_file < 0 && solib_search_path != NULL)
196     found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST,
197                         in_pathname, O_RDONLY | O_BINARY, 0, &temp_pathname);
198   
199   /* If not found, next search the solib_search_path (if any) for the basename
200      only (ignoring the path).  This is to allow reading solibs from a path
201      that differs from the opened path.  */
202   if (found_file < 0 && solib_search_path != NULL)
203     found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST,
204                         lbasename (in_pathname), O_RDONLY | O_BINARY, 0,
205                         &temp_pathname);
206
207   /* If not found, try to use target supplied solib search method */
208   if (found_file < 0 && ops->find_and_open_solib)
209     found_file = ops->find_and_open_solib (in_pathname, O_RDONLY | O_BINARY,
210                                            &temp_pathname);
211
212   /* If not found, next search the inferior's $PATH environment variable. */
213   if (found_file < 0 && gdb_sysroot_is_empty)
214     found_file = openp (get_in_environ (inferior_environ, "PATH"),
215                         OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY | O_BINARY, 0,
216                         &temp_pathname);
217
218   /* If not found, next search the inferior's $LD_LIBRARY_PATH 
219      environment variable. */
220   if (found_file < 0 && gdb_sysroot_is_empty)
221     found_file = openp (get_in_environ (inferior_environ, "LD_LIBRARY_PATH"),
222                         OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY | O_BINARY, 0,
223                         &temp_pathname);
224
225   /* Done.  If not found, tough luck.  Return found_file and 
226      (optionally) found_pathname.  */
227   if (found_pathname != NULL && temp_pathname != NULL)
228     *found_pathname = xstrdup (temp_pathname);
229   return found_file;
230 }
231
232
233 /*
234
235    LOCAL FUNCTION
236
237    solib_map_sections -- open bfd and build sections for shared lib
238
239    SYNOPSIS
240
241    static int solib_map_sections (struct so_list *so)
242
243    DESCRIPTION
244
245    Given a pointer to one of the shared objects in our list
246    of mapped objects, use the recorded name to open a bfd
247    descriptor for the object, build a section table, and then
248    relocate all the section addresses by the base address at
249    which the shared object was mapped.
250
251    FIXMES
252
253    In most (all?) cases the shared object file name recorded in the
254    dynamic linkage tables will be a fully qualified pathname.  For
255    cases where it isn't, do we really mimic the systems search
256    mechanism correctly in the below code (particularly the tilde
257    expansion stuff?).
258  */
259
260 static int
261 solib_map_sections (void *arg)
262 {
263   struct so_list *so = (struct so_list *) arg;  /* catch_errors bogon */
264   char *filename;
265   char *scratch_pathname;
266   int scratch_chan;
267   struct section_table *p;
268   struct cleanup *old_chain;
269   bfd *abfd;
270
271   filename = tilde_expand (so->so_name);
272
273   old_chain = make_cleanup (xfree, filename);
274   scratch_chan = solib_open (filename, &scratch_pathname);
275
276   if (scratch_chan < 0)
277     {
278       perror_with_name (filename);
279     }
280
281   /* Leave scratch_pathname allocated.  abfd->name will point to it.  */
282   abfd = bfd_fopen (scratch_pathname, gnutarget, FOPEN_RB, scratch_chan);
283   if (!abfd)
284     {
285       close (scratch_chan);
286       error (_("Could not open `%s' as an executable file: %s"),
287              scratch_pathname, bfd_errmsg (bfd_get_error ()));
288     }
289
290   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
291   so->abfd = abfd;
292   bfd_set_cacheable (abfd, 1);
293
294   /* copy full path name into so_name, so that later symbol_file_add
295      can find it */
296   if (strlen (scratch_pathname) >= SO_NAME_MAX_PATH_SIZE)
297     error (_("Full path name length of shared library exceeds SO_NAME_MAX_PATH_SIZE in so_list structure."));
298   strcpy (so->so_name, scratch_pathname);
299
300   if (!bfd_check_format (abfd, bfd_object))
301     {
302       error (_("\"%s\": not in executable format: %s."),
303              scratch_pathname, bfd_errmsg (bfd_get_error ()));
304     }
305   if (build_section_table (abfd, &so->sections, &so->sections_end))
306     {
307       error (_("Can't find the file sections in `%s': %s"),
308              bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
309     }
310
311   for (p = so->sections; p < so->sections_end; p++)
312     {
313       struct target_so_ops *ops = solib_ops (current_gdbarch);
314
315       /* Relocate the section binding addresses as recorded in the shared
316          object's file by the base address to which the object was actually
317          mapped. */
318       ops->relocate_section_addresses (so, p);
319       if (strcmp (p->the_bfd_section->name, ".text") == 0)
320         {
321           so->textsection = p;
322         }
323     }
324
325   /* Free the file names, close the file now.  */
326   do_cleanups (old_chain);
327
328   return (1);
329 }
330
331 /* LOCAL FUNCTION
332
333    free_so --- free a `struct so_list' object
334
335    SYNOPSIS
336
337    void free_so (struct so_list *so)
338
339    DESCRIPTION
340
341    Free the storage associated with the `struct so_list' object SO.
342    If we have opened a BFD for SO, close it.  
343
344    The caller is responsible for removing SO from whatever list it is
345    a member of.  If we have placed SO's sections in some target's
346    section table, the caller is responsible for removing them.
347
348    This function doesn't mess with objfiles at all.  If there is an
349    objfile associated with SO that needs to be removed, the caller is
350    responsible for taking care of that.  */
351
352 void
353 free_so (struct so_list *so)
354 {
355   struct target_so_ops *ops = solib_ops (current_gdbarch);
356   char *bfd_filename = 0;
357
358   if (so->sections)
359     xfree (so->sections);
360       
361   if (so->abfd)
362     {
363       bfd_filename = bfd_get_filename (so->abfd);
364       if (! bfd_close (so->abfd))
365         warning (_("cannot close \"%s\": %s"),
366                  bfd_filename, bfd_errmsg (bfd_get_error ()));
367     }
368
369   if (bfd_filename)
370     xfree (bfd_filename);
371
372   ops->free_so (so);
373
374   xfree (so);
375 }
376
377
378 /* Return address of first so_list entry in master shared object list.  */
379 struct so_list *
380 master_so_list (void)
381 {
382   return so_list_head;
383 }
384
385
386 /* A small stub to get us past the arg-passing pinhole of catch_errors.  */
387
388 static int
389 symbol_add_stub (void *arg)
390 {
391   struct so_list *so = (struct so_list *) arg;  /* catch_errs bogon */
392   struct section_addr_info *sap;
393
394   /* Have we already loaded this shared object?  */
395   ALL_OBJFILES (so->objfile)
396     {
397       if (strcmp (so->objfile->name, so->so_name) == 0)
398         return 1;
399     }
400
401   sap = build_section_addr_info_from_section_table (so->sections,
402                                                     so->sections_end);
403
404   so->objfile = symbol_file_add (so->so_name, so->from_tty,
405                                  sap, 0, OBJF_SHARED);
406   free_section_addr_info (sap);
407
408   return (1);
409 }
410
411 /* Read in symbols for shared object SO.  If FROM_TTY is non-zero, be
412    chatty about it.  Return non-zero if any symbols were actually
413    loaded.  */
414
415 int
416 solib_read_symbols (struct so_list *so, int from_tty)
417 {
418   if (so->symbols_loaded)
419     {
420       if (from_tty)
421         printf_unfiltered (_("Symbols already loaded for %s\n"), so->so_name);
422     }
423   else if (so->abfd == NULL)
424     {
425       if (from_tty)
426         printf_unfiltered (_("Symbol file not found for %s\n"), so->so_name);
427     }
428   else
429     {
430       if (catch_errors (symbol_add_stub, so,
431                         "Error while reading shared library symbols:\n",
432                         RETURN_MASK_ALL))
433         {
434           if (from_tty)
435             printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
436           so->symbols_loaded = 1;
437           return 1;
438         }
439     }
440
441   return 0;
442 }
443
444 /* LOCAL FUNCTION
445
446    update_solib_list --- synchronize GDB's shared object list with inferior's
447
448    SYNOPSIS
449
450    void update_solib_list (int from_tty, struct target_ops *TARGET)
451
452    Extract the list of currently loaded shared objects from the
453    inferior, and compare it with the list of shared objects currently
454    in GDB's so_list_head list.  Edit so_list_head to bring it in sync
455    with the inferior's new list.
456
457    If we notice that the inferior has unloaded some shared objects,
458    free any symbolic info GDB had read about those shared objects.
459
460    Don't load symbolic info for any new shared objects; just add them
461    to the list, and leave their symbols_loaded flag clear.
462
463    If FROM_TTY is non-null, feel free to print messages about what
464    we're doing.
465
466    If TARGET is non-null, add the sections of all new shared objects
467    to TARGET's section table.  Note that this doesn't remove any
468    sections for shared objects that have been unloaded, and it
469    doesn't check to see if the new shared objects are already present in
470    the section table.  But we only use this for core files and
471    processes we've just attached to, so that's okay.  */
472
473 static void
474 update_solib_list (int from_tty, struct target_ops *target)
475 {
476   struct target_so_ops *ops = solib_ops (current_gdbarch);
477   struct so_list *inferior = ops->current_sos();
478   struct so_list *gdb, **gdb_link;
479
480   /* If we are attaching to a running process for which we 
481      have not opened a symbol file, we may be able to get its 
482      symbols now!  */
483   if (attach_flag &&
484       symfile_objfile == NULL)
485     catch_errors (ops->open_symbol_file_object, &from_tty, 
486                   "Error reading attached process's symbol file.\n",
487                   RETURN_MASK_ALL);
488
489   /* Since this function might actually add some elements to the
490      so_list_head list, arrange for it to be cleaned up when
491      appropriate.  */
492   if (!solib_cleanup_queued)
493     {
494       make_run_cleanup (do_clear_solib, NULL);
495       solib_cleanup_queued = 1;
496     }
497
498   /* GDB and the inferior's dynamic linker each maintain their own
499      list of currently loaded shared objects; we want to bring the
500      former in sync with the latter.  Scan both lists, seeing which
501      shared objects appear where.  There are three cases:
502
503      - A shared object appears on both lists.  This means that GDB
504      knows about it already, and it's still loaded in the inferior.
505      Nothing needs to happen.
506
507      - A shared object appears only on GDB's list.  This means that
508      the inferior has unloaded it.  We should remove the shared
509      object from GDB's tables.
510
511      - A shared object appears only on the inferior's list.  This
512      means that it's just been loaded.  We should add it to GDB's
513      tables.
514
515      So we walk GDB's list, checking each entry to see if it appears
516      in the inferior's list too.  If it does, no action is needed, and
517      we remove it from the inferior's list.  If it doesn't, the
518      inferior has unloaded it, and we remove it from GDB's list.  By
519      the time we're done walking GDB's list, the inferior's list
520      contains only the new shared objects, which we then add.  */
521
522   gdb = so_list_head;
523   gdb_link = &so_list_head;
524   while (gdb)
525     {
526       struct so_list *i = inferior;
527       struct so_list **i_link = &inferior;
528
529       /* Check to see whether the shared object *gdb also appears in
530          the inferior's current list.  */
531       while (i)
532         {
533           if (! strcmp (gdb->so_original_name, i->so_original_name))
534             break;
535
536           i_link = &i->next;
537           i = *i_link;
538         }
539
540       /* If the shared object appears on the inferior's list too, then
541          it's still loaded, so we don't need to do anything.  Delete
542          it from the inferior's list, and leave it on GDB's list.  */
543       if (i)
544         {
545           *i_link = i->next;
546           free_so (i);
547           gdb_link = &gdb->next;
548           gdb = *gdb_link;
549         }
550
551       /* If it's not on the inferior's list, remove it from GDB's tables.  */
552       else
553         {
554           /* Notify any observer that the shared object has been
555              unloaded before we remove it from GDB's tables.  */
556           observer_notify_solib_unloaded (gdb);
557
558           *gdb_link = gdb->next;
559
560           /* Unless the user loaded it explicitly, free SO's objfile.  */
561           if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
562             free_objfile (gdb->objfile);
563
564           /* Some targets' section tables might be referring to
565              sections from so->abfd; remove them.  */
566           remove_target_sections (gdb->abfd);
567
568           free_so (gdb);
569           gdb = *gdb_link;
570         }
571     }
572
573   /* Now the inferior's list contains only shared objects that don't
574      appear in GDB's list --- those that are newly loaded.  Add them
575      to GDB's shared object list.  */
576   if (inferior)
577     {
578       struct so_list *i;
579
580       /* Add the new shared objects to GDB's list.  */
581       *gdb_link = inferior;
582
583       /* Fill in the rest of each of the `struct so_list' nodes.  */
584       for (i = inferior; i; i = i->next)
585         {
586           i->from_tty = from_tty;
587
588           /* Fill in the rest of the `struct so_list' node.  */
589           catch_errors (solib_map_sections, i,
590                         "Error while mapping shared library sections:\n",
591                         RETURN_MASK_ALL);
592
593           /* If requested, add the shared object's sections to the TARGET's
594              section table.  Do this immediately after mapping the object so
595              that later nodes in the list can query this object, as is needed
596              in solib-osf.c.  */
597           if (target)
598             {
599               int count = (i->sections_end - i->sections);
600               if (count > 0)
601                 {
602                   int space = target_resize_to_sections (target, count);
603                   memcpy (target->to_sections + space,
604                           i->sections,
605                           count * sizeof (i->sections[0]));
606                 }
607             }
608
609           /* Notify any observer that the shared object has been
610              loaded now that we've added it to GDB's tables.  */
611           observer_notify_solib_loaded (i);
612         }
613     }
614 }
615
616 /* Return non-zero if SO is the libpthread shared library.
617
618    Uses a fairly simplistic heuristic approach where we check
619    the file name against "/libpthread".  This can lead to false
620    positives, but this should be good enough in practice.  */
621
622 static int
623 libpthread_solib_p (struct so_list *so)
624 {
625   return (strstr (so->so_name, "/libpthread") != NULL);
626 }
627
628 /* GLOBAL FUNCTION
629
630    solib_add -- read in symbol info for newly added shared libraries
631
632    SYNOPSIS
633
634    void solib_add (char *pattern, int from_tty, struct target_ops
635    *TARGET, int readsyms)
636
637    DESCRIPTION
638
639    Read in symbolic information for any shared objects whose names
640    match PATTERN.  (If we've already read a shared object's symbol
641    info, leave it alone.)  If PATTERN is zero, read them all.
642
643    If READSYMS is 0, defer reading symbolic information until later
644    but still do any needed low level processing.
645
646    FROM_TTY and TARGET are as described for update_solib_list, above.  */
647
648 void
649 solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
650 {
651   struct so_list *gdb;
652
653   if (pattern)
654     {
655       char *re_err = re_comp (pattern);
656
657       if (re_err)
658         error (_("Invalid regexp: %s"), re_err);
659     }
660
661   update_solib_list (from_tty, target);
662
663   /* Walk the list of currently loaded shared libraries, and read
664      symbols for any that match the pattern --- or any whose symbols
665      aren't already loaded, if no pattern was given.  */
666   {
667     int any_matches = 0;
668     int loaded_any_symbols = 0;
669
670     for (gdb = so_list_head; gdb; gdb = gdb->next)
671       if (! pattern || re_exec (gdb->so_name))
672         {
673           /* Normally, we would read the symbols from that library
674              only if READSYMS is set.  However, we're making a small
675              exception for the pthread library, because we sometimes
676              need the library symbols to be loaded in order to provide
677              thread support (x86-linux for instance).  */
678           const int add_this_solib =
679             (readsyms || libpthread_solib_p (gdb));
680
681           any_matches = 1;
682           if (add_this_solib && solib_read_symbols (gdb, from_tty))
683             loaded_any_symbols = 1;
684         }
685
686     if (from_tty && pattern && ! any_matches)
687       printf_unfiltered
688         ("No loaded shared libraries match the pattern `%s'.\n", pattern);
689
690     if (loaded_any_symbols)
691       {
692         struct target_so_ops *ops = solib_ops (current_gdbarch);
693
694         /* Getting new symbols may change our opinion about what is
695            frameless.  */
696         reinit_frame_cache ();
697
698         ops->special_symbol_handling ();
699       }
700   }
701 }
702
703
704 /*
705
706    LOCAL FUNCTION
707
708    info_sharedlibrary_command -- code for "info sharedlibrary"
709
710    SYNOPSIS
711
712    static void info_sharedlibrary_command ()
713
714    DESCRIPTION
715
716    Walk through the shared library list and print information
717    about each attached library.
718  */
719
720 static void
721 info_sharedlibrary_command (char *ignore, int from_tty)
722 {
723   struct so_list *so = NULL;    /* link map state variable */
724   int header_done = 0;
725   int addr_width;
726
727   /* "0x", a little whitespace, and two hex digits per byte of pointers.  */
728   addr_width = 4 + (gdbarch_ptr_bit (current_gdbarch) / 4);
729
730   update_solib_list (from_tty, 0);
731
732   for (so = so_list_head; so; so = so->next)
733     {
734       if (so->so_name[0])
735         {
736           if (!header_done)
737             {
738               printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
739                                  addr_width, "To", "Syms Read",
740                                  "Shared Object Library");
741               header_done++;
742             }
743
744           printf_unfiltered ("%-*s", addr_width,
745                              so->textsection != NULL 
746                                ? hex_string_custom (
747                                    (LONGEST) so->textsection->addr,
748                                    addr_width - 4)
749                                : "");
750           printf_unfiltered ("%-*s", addr_width,
751                              so->textsection != NULL 
752                                ? hex_string_custom (
753                                    (LONGEST) so->textsection->endaddr,
754                                    addr_width - 4)
755                                : "");
756           printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
757           printf_unfiltered ("%s\n", so->so_name);
758         }
759     }
760   if (so_list_head == NULL)
761     {
762       printf_unfiltered (_("No shared libraries loaded at this time.\n"));
763     }
764 }
765
766 /*
767
768    GLOBAL FUNCTION
769
770    solib_address -- check to see if an address is in a shared lib
771
772    SYNOPSIS
773
774    char * solib_address (CORE_ADDR address)
775
776    DESCRIPTION
777
778    Provides a hook for other gdb routines to discover whether or
779    not a particular address is within the mapped address space of
780    a shared library.
781
782    For example, this routine is called at one point to disable
783    breakpoints which are in shared libraries that are not currently
784    mapped in.
785  */
786
787 char *
788 solib_address (CORE_ADDR address)
789 {
790   struct so_list *so = 0;       /* link map state variable */
791
792   for (so = so_list_head; so; so = so->next)
793     {
794       struct section_table *p;
795
796       for (p = so->sections; p < so->sections_end; p++)
797         {
798           if (p->addr <= address && address < p->endaddr)
799             return (so->so_name);
800         }
801     }
802
803   return (0);
804 }
805
806 /* Called by free_all_symtabs */
807
808 void
809 clear_solib (void)
810 {
811   struct target_so_ops *ops = solib_ops (current_gdbarch);
812
813   /* This function is expected to handle ELF shared libraries.  It is
814      also used on Solaris, which can run either ELF or a.out binaries
815      (for compatibility with SunOS 4), both of which can use shared
816      libraries.  So we don't know whether we have an ELF executable or
817      an a.out executable until the user chooses an executable file.
818
819      ELF shared libraries don't get mapped into the address space
820      until after the program starts, so we'd better not try to insert
821      breakpoints in them immediately.  We have to wait until the
822      dynamic linker has loaded them; we'll hit a bp_shlib_event
823      breakpoint (look for calls to create_solib_event_breakpoint) when
824      it's ready.
825
826      SunOS shared libraries seem to be different --- they're present
827      as soon as the process begins execution, so there's no need to
828      put off inserting breakpoints.  There's also nowhere to put a
829      bp_shlib_event breakpoint, so if we put it off, we'll never get
830      around to it.
831
832      So: disable breakpoints only if we're using ELF shared libs.  */
833   if (exec_bfd != NULL
834       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
835     disable_breakpoints_in_shlibs (1);
836
837   while (so_list_head)
838     {
839       struct so_list *so = so_list_head;
840       so_list_head = so->next;
841       if (so->abfd)
842         remove_target_sections (so->abfd);
843       free_so (so);
844     }
845
846   ops->clear_solib ();
847 }
848
849 static void
850 do_clear_solib (void *dummy)
851 {
852   solib_cleanup_queued = 0;
853   clear_solib ();
854 }
855
856 /* GLOBAL FUNCTION
857
858    solib_create_inferior_hook -- shared library startup support
859
860    SYNOPSIS
861
862    void solib_create_inferior_hook ()
863
864    DESCRIPTION
865
866    When gdb starts up the inferior, it nurses it along (through the
867    shell) until it is ready to execute it's first instruction.  At this
868    point, this function gets called via expansion of the macro
869    SOLIB_CREATE_INFERIOR_HOOK.  */
870
871 void
872 solib_create_inferior_hook (void)
873 {
874   struct target_so_ops *ops = solib_ops (current_gdbarch);
875   ops->solib_create_inferior_hook();
876 }
877
878 /* GLOBAL FUNCTION
879
880    in_solib_dynsym_resolve_code -- check to see if an address is in
881                                    dynamic loader's dynamic symbol
882                                    resolution code
883
884    SYNOPSIS
885
886    int in_solib_dynsym_resolve_code (CORE_ADDR pc)
887
888    DESCRIPTION
889
890    Determine if PC is in the dynamic linker's symbol resolution
891    code.  Return 1 if so, 0 otherwise.
892 */
893
894 int
895 in_solib_dynsym_resolve_code (CORE_ADDR pc)
896 {
897   struct target_so_ops *ops = solib_ops (current_gdbarch);
898   return ops->in_dynsym_resolve_code (pc);
899 }
900
901 /*
902
903    LOCAL FUNCTION
904
905    sharedlibrary_command -- handle command to explicitly add library
906
907    SYNOPSIS
908
909    static void sharedlibrary_command (char *args, int from_tty)
910
911    DESCRIPTION
912
913  */
914
915 static void
916 sharedlibrary_command (char *args, int from_tty)
917 {
918   dont_repeat ();
919   solib_add (args, from_tty, (struct target_ops *) 0, 1);
920 }
921
922 /* LOCAL FUNCTION
923
924    no_shared_libraries -- handle command to explicitly discard symbols
925    from shared libraries.
926
927    DESCRIPTION
928
929    Implements the command "nosharedlibrary", which discards symbols
930    that have been auto-loaded from shared libraries.  Symbols from
931    shared libraries that were added by explicit request of the user
932    are not discarded.  Also called from remote.c.  */
933
934 void
935 no_shared_libraries (char *ignored, int from_tty)
936 {
937   objfile_purge_solibs ();
938   do_clear_solib (NULL);
939 }
940
941 static void
942 reload_shared_libraries (char *ignored, int from_tty,
943                          struct cmd_list_element *e)
944 {
945   no_shared_libraries (NULL, from_tty);
946   solib_add (NULL, from_tty, NULL, auto_solib_add);
947 }
948
949 static void
950 show_auto_solib_add (struct ui_file *file, int from_tty,
951                      struct cmd_list_element *c, const char *value)
952 {
953   fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"),
954                     value);
955 }
956
957
958 extern initialize_file_ftype _initialize_solib; /* -Wmissing-prototypes */
959
960 void
961 _initialize_solib (void)
962 {
963   struct cmd_list_element *c;
964
965   solib_data = gdbarch_data_register_pre_init (solib_init);
966
967   add_com ("sharedlibrary", class_files, sharedlibrary_command,
968            _("Load shared object library symbols for files matching REGEXP."));
969   add_info ("sharedlibrary", info_sharedlibrary_command,
970             _("Status of loaded shared object libraries."));
971   add_com ("nosharedlibrary", class_files, no_shared_libraries,
972            _("Unload all shared object library symbols."));
973
974   add_setshow_boolean_cmd ("auto-solib-add", class_support,
975                            &auto_solib_add, _("\
976 Set autoloading of shared library symbols."), _("\
977 Show autoloading of shared library symbols."), _("\
978 If \"on\", symbols from all shared object libraries will be loaded\n\
979 automatically when the inferior begins execution, when the dynamic linker\n\
980 informs gdb that a new library has been loaded, or when attaching to the\n\
981 inferior.  Otherwise, symbols must be loaded manually, using `sharedlibrary'."),
982                            NULL,
983                            show_auto_solib_add,
984                            &setlist, &showlist);
985
986   add_setshow_filename_cmd ("sysroot", class_support,
987                             &gdb_sysroot, _("\
988 Set an alternate system root."), _("\
989 Show the current system root."), _("\
990 The system root is used to load absolute shared library symbol files.\n\
991 For other (relative) files, you can add directories using\n\
992 `set solib-search-path'."),
993                             reload_shared_libraries,
994                             NULL,
995                             &setlist, &showlist);
996
997   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
998                  &setlist);
999   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1000                  &showlist);
1001
1002   add_setshow_optional_filename_cmd ("solib-search-path", class_support,
1003                                      &solib_search_path, _("\
1004 Set the search path for loading non-absolute shared library symbol files."), _("\
1005 Show the search path for loading non-absolute shared library symbol files."), _("\
1006 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH."),
1007                                      reload_shared_libraries,
1008                                      show_solib_search_path,
1009                                      &setlist, &showlist);
1010 }