OSDN Git Service

aad2d59545a811cfe96d516ba36121908b429d0c
[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, 2008, 2009
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
50 /* Architecture-specific operations.  */
51
52 /* Per-architecture data key.  */
53 static struct gdbarch_data *solib_data;
54
55 static void *
56 solib_init (struct obstack *obstack)
57 {
58   struct target_so_ops **ops;
59
60   ops = OBSTACK_ZALLOC (obstack, struct target_so_ops *);
61   *ops = current_target_so_ops;
62   return ops;
63 }
64
65 static struct target_so_ops *
66 solib_ops (struct gdbarch *gdbarch)
67 {
68   struct target_so_ops **ops = gdbarch_data (gdbarch, solib_data);
69   return *ops;
70 }
71
72 /* Set the solib operations for GDBARCH to NEW_OPS.  */
73
74 void
75 set_solib_ops (struct gdbarch *gdbarch, struct target_so_ops *new_ops)
76 {
77   struct target_so_ops **ops = gdbarch_data (gdbarch, solib_data);
78   *ops = new_ops;
79 }
80 \f
81
82 /* external data declarations */
83
84 /* FIXME: gdbarch needs to control this variable, or else every
85    configuration needs to call set_solib_ops.  */
86 struct target_so_ops *current_target_so_ops;
87
88 /* local data declarations */
89
90 static struct so_list *so_list_head;    /* List of known shared objects */
91
92 /* Local function prototypes */
93
94 /* If non-empty, this is a search path for loading non-absolute shared library
95    symbol files.  This takes precedence over the environment variables PATH
96    and LD_LIBRARY_PATH.  */
97 static char *solib_search_path = NULL;
98 static void
99 show_solib_search_path (struct ui_file *file, int from_tty,
100                         struct cmd_list_element *c, const char *value)
101 {
102   fprintf_filtered (file, _("\
103 The search path for loading non-absolute shared library symbol files is %s.\n"),
104                     value);
105 }
106
107 /*
108
109    GLOBAL FUNCTION
110
111    solib_find -- Find a shared library file.
112
113    SYNOPSIS
114
115    char *solib_find (char *in_pathname, int *fd);
116
117    DESCRIPTION
118
119    Global variable GDB_SYSROOT is used as a prefix directory
120    to search for shared libraries if they have an absolute path.
121
122    Global variable SOLIB_SEARCH_PATH is used as a prefix directory
123    (or set of directories, as in LD_LIBRARY_PATH) to search for all
124    shared libraries if not found in GDB_SYSROOT.
125
126    Search algorithm:
127    * If there is a gdb_sysroot and path is absolute:
128    *   Search for gdb_sysroot/path.
129    * else
130    *   Look for it literally (unmodified).
131    * Look in SOLIB_SEARCH_PATH.
132    * If available, use target defined search function.
133    * If gdb_sysroot is NOT set, perform the following two searches:
134    *   Look in inferior's $PATH.
135    *   Look in inferior's $LD_LIBRARY_PATH.
136    *   
137    * The last check avoids doing this search when targetting remote
138    * machines since gdb_sysroot will almost always be set.
139
140    RETURNS
141
142    Full pathname of the shared library file, or NULL if not found.
143    (The pathname is malloc'ed; it needs to be freed by the caller.)
144    *FD is set to either -1 or an open file handle for the library.  */
145
146 char *
147 solib_find (char *in_pathname, int *fd)
148 {
149   struct target_so_ops *ops = solib_ops (target_gdbarch);
150   int found_file = -1;
151   char *temp_pathname = NULL;
152   int gdb_sysroot_is_empty;
153
154   gdb_sysroot_is_empty = (gdb_sysroot == NULL || *gdb_sysroot == 0);
155
156   if (! IS_ABSOLUTE_PATH (in_pathname) || gdb_sysroot_is_empty)
157     temp_pathname = in_pathname;
158   else
159     {
160       int prefix_len = strlen (gdb_sysroot);
161
162       /* Remove trailing slashes from absolute prefix.  */
163       while (prefix_len > 0
164              && IS_DIR_SEPARATOR (gdb_sysroot[prefix_len - 1]))
165         prefix_len--;
166
167       /* Cat the prefixed pathname together.  */
168       temp_pathname = alloca (prefix_len + strlen (in_pathname) + 1);
169       strncpy (temp_pathname, gdb_sysroot, prefix_len);
170       temp_pathname[prefix_len] = '\0';
171       strcat (temp_pathname, in_pathname);
172     }
173
174   /* Handle remote files.  */
175   if (remote_filename_p (temp_pathname))
176     {
177       *fd = -1;
178       return xstrdup (temp_pathname);
179     }
180
181   /* Now see if we can open it.  */
182   found_file = open (temp_pathname, O_RDONLY | O_BINARY, 0);
183
184   /* We try to find the library in various ways.  After each attempt
185      (except for the one above), either found_file >= 0 and
186      temp_pathname is a malloc'd string, or found_file < 0 and
187      temp_pathname does not point to storage that needs to be
188      freed.  */
189
190     if (found_file < 0)
191       temp_pathname = NULL;
192     else
193       temp_pathname = xstrdup (temp_pathname);
194
195   /* If the search in gdb_sysroot failed, and the path name is
196      absolute at this point, make it relative.  (openp will try and open the
197      file according to its absolute path otherwise, which is not what we want.)
198      Affects subsequent searches for this solib.  */
199   if (found_file < 0 && IS_ABSOLUTE_PATH (in_pathname))
200     {
201       /* First, get rid of any drive letters etc.  */
202       while (!IS_DIR_SEPARATOR (*in_pathname))
203         in_pathname++;
204
205       /* Next, get rid of all leading dir separators.  */
206       while (IS_DIR_SEPARATOR (*in_pathname))
207         in_pathname++;
208     }
209   
210   /* If not found, search the solib_search_path (if any).  */
211   if (found_file < 0 && solib_search_path != NULL)
212     found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST,
213                         in_pathname, O_RDONLY | O_BINARY, &temp_pathname);
214   
215   /* If not found, next search the solib_search_path (if any) for the basename
216      only (ignoring the path).  This is to allow reading solibs from a path
217      that differs from the opened path.  */
218   if (found_file < 0 && solib_search_path != NULL)
219     found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST,
220                         lbasename (in_pathname), O_RDONLY | O_BINARY,
221                         &temp_pathname);
222
223   /* If not found, try to use target supplied solib search method */
224   if (found_file < 0 && ops->find_and_open_solib)
225     found_file = ops->find_and_open_solib (in_pathname, O_RDONLY | O_BINARY,
226                                            &temp_pathname);
227
228   /* If not found, next search the inferior's $PATH environment variable. */
229   if (found_file < 0 && gdb_sysroot_is_empty)
230     found_file = openp (get_in_environ (inferior_environ, "PATH"),
231                         OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY | O_BINARY,
232                         &temp_pathname);
233
234   /* If not found, next search the inferior's $LD_LIBRARY_PATH 
235      environment variable. */
236   if (found_file < 0 && gdb_sysroot_is_empty)
237     found_file = openp (get_in_environ (inferior_environ, "LD_LIBRARY_PATH"),
238                         OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY | O_BINARY,
239                         &temp_pathname);
240
241   *fd = found_file;
242   return temp_pathname;
243 }
244
245 /* Open and return a BFD for the shared library PATHNAME.  If FD is not -1,
246    it is used as file handle to open the file.  Throws an error if the file
247    could not be opened.  Handles both local and remote file access.
248
249    PATHNAME must be malloc'ed by the caller.  If successful, the new BFD's
250    name will point to it.  If unsuccessful, PATHNAME will be freed and the
251    FD will be closed (unless FD was -1).  */
252
253 bfd *
254 solib_bfd_fopen (char *pathname, int fd)
255 {
256   bfd *abfd;
257
258   if (remote_filename_p (pathname))
259     {
260       gdb_assert (fd == -1);
261       abfd = remote_bfd_open (pathname, gnutarget);
262     }
263   else
264     {
265       abfd = bfd_fopen (pathname, gnutarget, FOPEN_RB, fd);
266
267       if (abfd)
268         bfd_set_cacheable (abfd, 1);
269       else if (fd != -1)
270         close (fd);
271     }
272
273   if (!abfd)
274     {
275       make_cleanup (xfree, pathname);
276       error (_("Could not open `%s' as an executable file: %s"),
277              pathname, bfd_errmsg (bfd_get_error ()));
278     }
279
280   return abfd;
281 }
282
283 /* Find shared library PATHNAME and open a BFD for it.  */
284
285 bfd *
286 solib_bfd_open (char *pathname)
287 {
288   char *found_pathname;
289   int found_file;
290   bfd *abfd;
291   const struct bfd_arch_info *b;
292
293   /* Search for shared library file.  */
294   found_pathname = solib_find (pathname, &found_file);
295   if (found_pathname == NULL)
296     perror_with_name (pathname);
297
298   /* Open bfd for shared library.  */
299   abfd = solib_bfd_fopen (found_pathname, found_file);
300
301   /* Check bfd format.  */
302   if (!bfd_check_format (abfd, bfd_object))
303     {
304       bfd_close (abfd);
305       make_cleanup (xfree, found_pathname);
306       error (_("`%s': not in executable format: %s"),
307              found_pathname, bfd_errmsg (bfd_get_error ()));
308     }
309
310   /* Check bfd arch.  */
311   b = gdbarch_bfd_arch_info (target_gdbarch);
312   if (b->compatible (b, bfd_get_arch_info (abfd)) != b)
313     warning (_("`%s': Shared library architecture %s is not compatible "
314                "with target architecture %s."), found_pathname,
315              bfd_get_arch_info (abfd)->printable_name, b->printable_name);
316
317   return abfd;
318 }
319
320
321 /*
322
323    LOCAL FUNCTION
324
325    solib_map_sections -- open bfd and build sections for shared lib
326
327    SYNOPSIS
328
329    static int solib_map_sections (struct so_list *so)
330
331    DESCRIPTION
332
333    Given a pointer to one of the shared objects in our list
334    of mapped objects, use the recorded name to open a bfd
335    descriptor for the object, build a section table, and then
336    relocate all the section addresses by the base address at
337    which the shared object was mapped.
338
339    FIXMES
340
341    In most (all?) cases the shared object file name recorded in the
342    dynamic linkage tables will be a fully qualified pathname.  For
343    cases where it isn't, do we really mimic the systems search
344    mechanism correctly in the below code (particularly the tilde
345    expansion stuff?).
346  */
347
348 static int
349 solib_map_sections (void *arg)
350 {
351   struct so_list *so = (struct so_list *) arg;  /* catch_errors bogon */
352   struct target_so_ops *ops = solib_ops (target_gdbarch);
353   char *filename;
354   struct target_section *p;
355   struct cleanup *old_chain;
356   bfd *abfd;
357
358   filename = tilde_expand (so->so_name);
359   old_chain = make_cleanup (xfree, filename);
360   abfd = ops->bfd_open (filename);
361   do_cleanups (old_chain);
362
363   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
364   so->abfd = abfd;
365
366   /* copy full path name into so_name, so that later symbol_file_add
367      can find it */
368   if (strlen (bfd_get_filename (abfd)) >= SO_NAME_MAX_PATH_SIZE)
369     error (_("Shared library file name is too long."));
370   strcpy (so->so_name, bfd_get_filename (abfd));
371
372   if (build_section_table (abfd, &so->sections, &so->sections_end))
373     {
374       error (_("Can't find the file sections in `%s': %s"),
375              bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
376     }
377
378   for (p = so->sections; p < so->sections_end; p++)
379     {
380       /* Relocate the section binding addresses as recorded in the shared
381          object's file by the base address to which the object was actually
382          mapped. */
383       ops->relocate_section_addresses (so, p);
384
385       /* If the target didn't provide information about the address
386          range of the shared object, assume we want the location of
387          the .text section.  */
388       if (so->addr_low == 0 && so->addr_high == 0
389           && strcmp (p->the_bfd_section->name, ".text") == 0)
390         {
391           so->addr_low = p->addr;
392           so->addr_high = p->endaddr;
393         }
394     }
395
396   return (1);
397 }
398
399 /* LOCAL FUNCTION
400
401    free_so --- free a `struct so_list' object
402
403    SYNOPSIS
404
405    void free_so (struct so_list *so)
406
407    DESCRIPTION
408
409    Free the storage associated with the `struct so_list' object SO.
410    If we have opened a BFD for SO, close it.  
411
412    The caller is responsible for removing SO from whatever list it is
413    a member of.  If we have placed SO's sections in some target's
414    section table, the caller is responsible for removing them.
415
416    This function doesn't mess with objfiles at all.  If there is an
417    objfile associated with SO that needs to be removed, the caller is
418    responsible for taking care of that.  */
419
420 void
421 free_so (struct so_list *so)
422 {
423   struct target_so_ops *ops = solib_ops (target_gdbarch);
424
425   if (so->sections)
426     xfree (so->sections);
427
428   gdb_bfd_unref (so->abfd);
429
430   ops->free_so (so);
431
432   xfree (so);
433 }
434
435
436 /* Return address of first so_list entry in master shared object list.  */
437 struct so_list *
438 master_so_list (void)
439 {
440   return so_list_head;
441 }
442
443 static void
444 symbol_add_stub (struct so_list *so, int flags)
445 {
446   struct section_addr_info *sap;
447   int *p_refcount;
448
449   /* Have we already loaded this shared object?  */
450   ALL_OBJFILES (so->objfile)
451     {
452       if (strcmp (so->objfile->name, so->so_name) == 0)
453         return;
454     }
455
456   sap = build_section_addr_info_from_section_table (so->sections,
457                                                     so->sections_end);
458
459   so->objfile = symbol_file_add_from_bfd (so->abfd, flags, sap, OBJF_SHARED);
460   p_refcount = xmalloc (sizeof (*p_refcount));
461   *p_refcount = 2;  /* Both solib and objfile refer to this abfd.  */
462   bfd_usrdata (so->abfd) = p_refcount;
463
464   free_section_addr_info (sap);
465
466   return;
467 }
468
469 /* Read in symbols for shared object SO.  If SYMFILE_VERBOSE is set in FLAGS,
470    be chatty about it.  Return non-zero if any symbols were actually
471    loaded.  */
472
473 int
474 solib_read_symbols (struct so_list *so, int flags)
475 {
476   const int from_tty = flags & SYMFILE_VERBOSE;
477
478   if (so->symbols_loaded)
479     {
480       if (from_tty)
481         printf_unfiltered (_("Symbols already loaded for %s\n"), so->so_name);
482     }
483   else if (so->abfd == NULL)
484     {
485       if (from_tty)
486         printf_unfiltered (_("Symbol file not found for %s\n"), so->so_name);
487     }
488   else
489     {
490       volatile struct gdb_exception exception;
491       TRY_CATCH (exception, RETURN_MASK_ALL)
492         {
493           symbol_add_stub (so, flags);
494         }
495       if (exception.reason != 0)
496         {
497           exception_fprintf (gdb_stderr, exception,
498                              "Error while reading shared library symbols:\n");
499           return 0;
500         }
501       if (from_tty && print_symbol_loading)
502         printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
503       so->symbols_loaded = 1;
504       return 1;
505     }
506
507   return 0;
508 }
509
510 /* LOCAL FUNCTION
511
512    update_solib_list --- synchronize GDB's shared object list with inferior's
513
514    SYNOPSIS
515
516    void update_solib_list (int from_tty, struct target_ops *TARGET)
517
518    Extract the list of currently loaded shared objects from the
519    inferior, and compare it with the list of shared objects currently
520    in GDB's so_list_head list.  Edit so_list_head to bring it in sync
521    with the inferior's new list.
522
523    If we notice that the inferior has unloaded some shared objects,
524    free any symbolic info GDB had read about those shared objects.
525
526    Don't load symbolic info for any new shared objects; just add them
527    to the list, and leave their symbols_loaded flag clear.
528
529    If FROM_TTY is non-null, feel free to print messages about what
530    we're doing.
531
532    If TARGET is non-null, add the sections of all new shared objects
533    to TARGET's section table.  Note that this doesn't remove any
534    sections for shared objects that have been unloaded, and it
535    doesn't check to see if the new shared objects are already present in
536    the section table.  But we only use this for core files and
537    processes we've just attached to, so that's okay.  */
538
539 static void
540 update_solib_list (int from_tty, struct target_ops *target)
541 {
542   struct target_so_ops *ops = solib_ops (target_gdbarch);
543   struct so_list *inferior = ops->current_sos();
544   struct so_list *gdb, **gdb_link;
545
546   /* We can reach here due to changing solib-search-path or the
547      sysroot, before having any inferior.  */
548   if (target_has_execution && !ptid_equal (inferior_ptid, null_ptid))
549     {
550       struct inferior *inf = current_inferior ();
551
552       /* If we are attaching to a running process for which we
553          have not opened a symbol file, we may be able to get its
554          symbols now!  */
555       if (inf->attach_flag && symfile_objfile == NULL)
556         catch_errors (ops->open_symbol_file_object, &from_tty,
557                       "Error reading attached process's symbol file.\n",
558                       RETURN_MASK_ALL);
559     }
560
561   /* GDB and the inferior's dynamic linker each maintain their own
562      list of currently loaded shared objects; we want to bring the
563      former in sync with the latter.  Scan both lists, seeing which
564      shared objects appear where.  There are three cases:
565
566      - A shared object appears on both lists.  This means that GDB
567      knows about it already, and it's still loaded in the inferior.
568      Nothing needs to happen.
569
570      - A shared object appears only on GDB's list.  This means that
571      the inferior has unloaded it.  We should remove the shared
572      object from GDB's tables.
573
574      - A shared object appears only on the inferior's list.  This
575      means that it's just been loaded.  We should add it to GDB's
576      tables.
577
578      So we walk GDB's list, checking each entry to see if it appears
579      in the inferior's list too.  If it does, no action is needed, and
580      we remove it from the inferior's list.  If it doesn't, the
581      inferior has unloaded it, and we remove it from GDB's list.  By
582      the time we're done walking GDB's list, the inferior's list
583      contains only the new shared objects, which we then add.  */
584
585   gdb = so_list_head;
586   gdb_link = &so_list_head;
587   while (gdb)
588     {
589       struct so_list *i = inferior;
590       struct so_list **i_link = &inferior;
591
592       /* Check to see whether the shared object *gdb also appears in
593          the inferior's current list.  */
594       while (i)
595         {
596           if (ops->same)
597             {
598               if (ops->same (gdb, i))
599                 break;
600             }
601           else
602             {
603               if (! strcmp (gdb->so_original_name, i->so_original_name))
604                 break;        
605             }
606
607           i_link = &i->next;
608           i = *i_link;
609         }
610
611       /* If the shared object appears on the inferior's list too, then
612          it's still loaded, so we don't need to do anything.  Delete
613          it from the inferior's list, and leave it on GDB's list.  */
614       if (i)
615         {
616           *i_link = i->next;
617           free_so (i);
618           gdb_link = &gdb->next;
619           gdb = *gdb_link;
620         }
621
622       /* If it's not on the inferior's list, remove it from GDB's tables.  */
623       else
624         {
625           /* Notify any observer that the shared object has been
626              unloaded before we remove it from GDB's tables.  */
627           observer_notify_solib_unloaded (gdb);
628
629           *gdb_link = gdb->next;
630
631           /* Unless the user loaded it explicitly, free SO's objfile.  */
632           if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
633             free_objfile (gdb->objfile);
634
635           /* Some targets' section tables might be referring to
636              sections from so->abfd; remove them.  */
637           remove_target_sections (gdb->abfd);
638
639           free_so (gdb);
640           gdb = *gdb_link;
641         }
642     }
643
644   /* Now the inferior's list contains only shared objects that don't
645      appear in GDB's list --- those that are newly loaded.  Add them
646      to GDB's shared object list.  */
647   if (inferior)
648     {
649       struct so_list *i;
650
651       /* Add the new shared objects to GDB's list.  */
652       *gdb_link = inferior;
653
654       /* Fill in the rest of each of the `struct so_list' nodes.  */
655       for (i = inferior; i; i = i->next)
656         {
657           i->from_tty = from_tty;
658
659           /* Fill in the rest of the `struct so_list' node.  */
660           catch_errors (solib_map_sections, i,
661                         "Error while mapping shared library sections:\n",
662                         RETURN_MASK_ALL);
663
664           /* Add the shared object's sections to the current set of
665              file section tables.  Do this immediately after mapping
666              the object so that later nodes in the list can query this
667              object, as is needed in solib-osf.c.  */
668           add_target_sections (i->sections, i->sections_end);
669
670           /* Notify any observer that the shared object has been
671              loaded now that we've added it to GDB's tables.  */
672           observer_notify_solib_loaded (i);
673         }
674     }
675 }
676
677
678 /* Return non-zero if NAME is the libpthread shared library.
679
680    Uses a fairly simplistic heuristic approach where we check
681    the file name against "/libpthread".  This can lead to false
682    positives, but this should be good enough in practice.  */
683
684 int
685 libpthread_name_p (const char *name)
686 {
687   return (strstr (name, "/libpthread") != NULL);
688 }
689
690 /* Return non-zero if SO is the libpthread shared library.  */
691
692 static int
693 libpthread_solib_p (struct so_list *so)
694 {
695   return libpthread_name_p (so->so_name);
696 }
697
698 /* GLOBAL FUNCTION
699
700    solib_add -- read in symbol info for newly added shared libraries
701
702    SYNOPSIS
703
704    void solib_add (char *pattern, int from_tty, struct target_ops
705    *TARGET, int readsyms)
706
707    DESCRIPTION
708
709    Read in symbolic information for any shared objects whose names
710    match PATTERN.  (If we've already read a shared object's symbol
711    info, leave it alone.)  If PATTERN is zero, read them all.
712
713    If READSYMS is 0, defer reading symbolic information until later
714    but still do any needed low level processing.
715
716    FROM_TTY and TARGET are as described for update_solib_list, above.  */
717
718 void
719 solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
720 {
721   struct so_list *gdb;
722
723   if (pattern)
724     {
725       char *re_err = re_comp (pattern);
726
727       if (re_err)
728         error (_("Invalid regexp: %s"), re_err);
729     }
730
731   update_solib_list (from_tty, target);
732
733   /* Walk the list of currently loaded shared libraries, and read
734      symbols for any that match the pattern --- or any whose symbols
735      aren't already loaded, if no pattern was given.  */
736   {
737     int any_matches = 0;
738     int loaded_any_symbols = 0;
739     const int flags =
740         SYMFILE_DEFER_BP_RESET | (from_tty ? SYMFILE_VERBOSE : 0);
741
742     for (gdb = so_list_head; gdb; gdb = gdb->next)
743       if (! pattern || re_exec (gdb->so_name))
744         {
745           /* Normally, we would read the symbols from that library
746              only if READSYMS is set.  However, we're making a small
747              exception for the pthread library, because we sometimes
748              need the library symbols to be loaded in order to provide
749              thread support (x86-linux for instance).  */
750           const int add_this_solib =
751             (readsyms || libpthread_solib_p (gdb));
752
753           any_matches = 1;
754           if (add_this_solib && solib_read_symbols (gdb, flags))
755             loaded_any_symbols = 1;
756         }
757
758     if (loaded_any_symbols)
759       breakpoint_re_set ();
760
761     if (from_tty && pattern && ! any_matches)
762       printf_unfiltered
763         ("No loaded shared libraries match the pattern `%s'.\n", pattern);
764
765     if (loaded_any_symbols)
766       {
767         struct target_so_ops *ops = solib_ops (target_gdbarch);
768
769         /* Getting new symbols may change our opinion about what is
770            frameless.  */
771         reinit_frame_cache ();
772
773         ops->special_symbol_handling ();
774       }
775   }
776 }
777
778
779 /*
780
781    LOCAL FUNCTION
782
783    info_sharedlibrary_command -- code for "info sharedlibrary"
784
785    SYNOPSIS
786
787    static void info_sharedlibrary_command ()
788
789    DESCRIPTION
790
791    Walk through the shared library list and print information
792    about each attached library.
793  */
794
795 static void
796 info_sharedlibrary_command (char *ignore, int from_tty)
797 {
798   struct so_list *so = NULL;    /* link map state variable */
799   int header_done = 0;
800   int addr_width;
801
802   /* "0x", a little whitespace, and two hex digits per byte of pointers.  */
803   addr_width = 4 + (gdbarch_ptr_bit (target_gdbarch) / 4);
804
805   update_solib_list (from_tty, 0);
806
807   for (so = so_list_head; so; so = so->next)
808     {
809       if (so->so_name[0])
810         {
811           if (!header_done)
812             {
813               printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
814                                  addr_width, "To", "Syms Read",
815                                  "Shared Object Library");
816               header_done++;
817             }
818
819           printf_unfiltered ("%-*s", addr_width,
820                              so->addr_high != 0
821                                ? hex_string_custom (
822                                    (LONGEST) so->addr_low,
823                                    addr_width - 4)
824                                : "");
825           printf_unfiltered ("%-*s", addr_width,
826                              so->addr_high != 0
827                                ? hex_string_custom (
828                                    (LONGEST) so->addr_high,
829                                    addr_width - 4)
830                                : "");
831           printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
832           printf_unfiltered ("%s\n", so->so_name);
833         }
834     }
835   if (so_list_head == NULL)
836     {
837       printf_unfiltered (_("No shared libraries loaded at this time.\n"));
838     }
839 }
840
841 /* Return 1 if ADDRESS lies within SOLIB.  */
842
843 int
844 solib_contains_address_p (const struct so_list *const solib,
845                           CORE_ADDR address)
846 {
847   struct target_section *p;
848
849   for (p = solib->sections; p < solib->sections_end; p++)
850     if (p->addr <= address && address < p->endaddr)
851       return 1;
852
853   return 0;
854 }
855
856 /*
857
858    GLOBAL FUNCTION
859
860    solib_name_from_address -- if an address is in a shared lib, return
861    its name.
862
863    SYNOPSIS
864
865    char * solib_name_from_address (CORE_ADDR address)
866
867    DESCRIPTION
868
869    Provides a hook for other gdb routines to discover whether or
870    not a particular address is within the mapped address space of
871    a shared library.
872
873    For example, this routine is called at one point to disable
874    breakpoints which are in shared libraries that are not currently
875    mapped in.
876  */
877
878 char *
879 solib_name_from_address (CORE_ADDR address)
880 {
881   struct so_list *so = 0;       /* link map state variable */
882
883   for (so = so_list_head; so; so = so->next)
884     if (solib_contains_address_p (so, address))
885       return (so->so_name);
886
887   return (0);
888 }
889
890 /* Called by free_all_symtabs */
891
892 void
893 clear_solib (void)
894 {
895   struct target_so_ops *ops = solib_ops (target_gdbarch);
896
897   /* This function is expected to handle ELF shared libraries.  It is
898      also used on Solaris, which can run either ELF or a.out binaries
899      (for compatibility with SunOS 4), both of which can use shared
900      libraries.  So we don't know whether we have an ELF executable or
901      an a.out executable until the user chooses an executable file.
902
903      ELF shared libraries don't get mapped into the address space
904      until after the program starts, so we'd better not try to insert
905      breakpoints in them immediately.  We have to wait until the
906      dynamic linker has loaded them; we'll hit a bp_shlib_event
907      breakpoint (look for calls to create_solib_event_breakpoint) when
908      it's ready.
909
910      SunOS shared libraries seem to be different --- they're present
911      as soon as the process begins execution, so there's no need to
912      put off inserting breakpoints.  There's also nowhere to put a
913      bp_shlib_event breakpoint, so if we put it off, we'll never get
914      around to it.
915
916      So: disable breakpoints only if we're using ELF shared libs.  */
917   if (exec_bfd != NULL
918       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
919     disable_breakpoints_in_shlibs ();
920
921   while (so_list_head)
922     {
923       struct so_list *so = so_list_head;
924       so_list_head = so->next;
925       observer_notify_solib_unloaded (so);
926       if (so->abfd)
927         remove_target_sections (so->abfd);
928       free_so (so);
929     }
930
931   ops->clear_solib ();
932 }
933
934 /* GLOBAL FUNCTION
935
936    solib_create_inferior_hook -- shared library startup support
937
938    SYNOPSIS
939
940    void solib_create_inferior_hook ()
941
942    DESCRIPTION
943
944    When gdb starts up the inferior, it nurses it along (through the
945    shell) until it is ready to execute it's first instruction.  At this
946    point, this function gets called via expansion of the macro
947    SOLIB_CREATE_INFERIOR_HOOK.  */
948
949 void
950 solib_create_inferior_hook (void)
951 {
952   struct target_so_ops *ops = solib_ops (target_gdbarch);
953   ops->solib_create_inferior_hook();
954 }
955
956 /* GLOBAL FUNCTION
957
958    in_solib_dynsym_resolve_code -- check to see if an address is in
959                                    dynamic loader's dynamic symbol
960                                    resolution code
961
962    SYNOPSIS
963
964    int in_solib_dynsym_resolve_code (CORE_ADDR pc)
965
966    DESCRIPTION
967
968    Determine if PC is in the dynamic linker's symbol resolution
969    code.  Return 1 if so, 0 otherwise.
970 */
971
972 int
973 in_solib_dynsym_resolve_code (CORE_ADDR pc)
974 {
975   struct target_so_ops *ops = solib_ops (target_gdbarch);
976   return ops->in_dynsym_resolve_code (pc);
977 }
978
979 /*
980
981    LOCAL FUNCTION
982
983    sharedlibrary_command -- handle command to explicitly add library
984
985    SYNOPSIS
986
987    static void sharedlibrary_command (char *args, int from_tty)
988
989    DESCRIPTION
990
991  */
992
993 static void
994 sharedlibrary_command (char *args, int from_tty)
995 {
996   dont_repeat ();
997   solib_add (args, from_tty, (struct target_ops *) 0, 1);
998 }
999
1000 /* LOCAL FUNCTION
1001
1002    no_shared_libraries -- handle command to explicitly discard symbols
1003    from shared libraries.
1004
1005    DESCRIPTION
1006
1007    Implements the command "nosharedlibrary", which discards symbols
1008    that have been auto-loaded from shared libraries.  Symbols from
1009    shared libraries that were added by explicit request of the user
1010    are not discarded.  Also called from remote.c.  */
1011
1012 void
1013 no_shared_libraries (char *ignored, int from_tty)
1014 {
1015   /* The order of the two routines below is important: clear_solib notifies
1016      the solib_unloaded observers, and some of these observers might need
1017      access to their associated objfiles.  Therefore, we can not purge the
1018      solibs' objfiles before clear_solib has been called.  */
1019
1020   clear_solib ();
1021   objfile_purge_solibs ();
1022 }
1023
1024 static void
1025 reload_shared_libraries (char *ignored, int from_tty,
1026                          struct cmd_list_element *e)
1027 {
1028   no_shared_libraries (NULL, from_tty);
1029   solib_add (NULL, from_tty, NULL, auto_solib_add);
1030   /* Creating inferior hooks here has two purposes. First, if we reload 
1031      shared libraries then the address of solib breakpoint we've computed
1032      previously might be no longer valid.  For example, if we forgot to set
1033      solib-absolute-prefix and are setting it right now, then the previous
1034      breakpoint address is plain wrong.  Second, installing solib hooks
1035      also implicitly figures were ld.so is and loads symbols for it.
1036      Absent this call, if we've just connected to a target and set 
1037      solib-absolute-prefix or solib-search-path, we'll lose all information
1038      about ld.so.  */
1039   if (target_has_execution)
1040     {
1041 #ifdef SOLIB_CREATE_INFERIOR_HOOK
1042       SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
1043 #else
1044       solib_create_inferior_hook ();
1045 #endif
1046     }
1047   /* We have unloaded and then reloaded debug info for all shared libraries.
1048      However, frames may still reference them, for example a frame's 
1049      unwinder might still point of DWARF FDE structures that are now freed.
1050      Reinit frame cache to avoid crashing.  */
1051   reinit_frame_cache ();
1052 }
1053
1054 static void
1055 show_auto_solib_add (struct ui_file *file, int from_tty,
1056                      struct cmd_list_element *c, const char *value)
1057 {
1058   fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"),
1059                     value);
1060 }
1061
1062
1063 /* Handler for library-specific lookup of global symbol NAME in OBJFILE.  Call
1064    the library-specific handler if it is installed for the current target.  */
1065
1066 struct symbol *
1067 solib_global_lookup (const struct objfile *objfile,
1068                      const char *name,
1069                      const char *linkage_name,
1070                      const domain_enum domain)
1071 {
1072   struct target_so_ops *ops = solib_ops (target_gdbarch);
1073
1074   if (ops->lookup_lib_global_symbol != NULL)
1075     return ops->lookup_lib_global_symbol (objfile, name, linkage_name, domain);
1076   return NULL;
1077 }
1078
1079
1080 extern initialize_file_ftype _initialize_solib; /* -Wmissing-prototypes */
1081
1082 void
1083 _initialize_solib (void)
1084 {
1085   struct cmd_list_element *c;
1086
1087   solib_data = gdbarch_data_register_pre_init (solib_init);
1088
1089   add_com ("sharedlibrary", class_files, sharedlibrary_command,
1090            _("Load shared object library symbols for files matching REGEXP."));
1091   add_info ("sharedlibrary", info_sharedlibrary_command,
1092             _("Status of loaded shared object libraries."));
1093   add_com ("nosharedlibrary", class_files, no_shared_libraries,
1094            _("Unload all shared object library symbols."));
1095
1096   add_setshow_boolean_cmd ("auto-solib-add", class_support,
1097                            &auto_solib_add, _("\
1098 Set autoloading of shared library symbols."), _("\
1099 Show autoloading of shared library symbols."), _("\
1100 If \"on\", symbols from all shared object libraries will be loaded\n\
1101 automatically when the inferior begins execution, when the dynamic linker\n\
1102 informs gdb that a new library has been loaded, or when attaching to the\n\
1103 inferior.  Otherwise, symbols must be loaded manually, using `sharedlibrary'."),
1104                            NULL,
1105                            show_auto_solib_add,
1106                            &setlist, &showlist);
1107
1108   add_setshow_filename_cmd ("sysroot", class_support,
1109                             &gdb_sysroot, _("\
1110 Set an alternate system root."), _("\
1111 Show the current system root."), _("\
1112 The system root is used to load absolute shared library symbol files.\n\
1113 For other (relative) files, you can add directories using\n\
1114 `set solib-search-path'."),
1115                             reload_shared_libraries,
1116                             NULL,
1117                             &setlist, &showlist);
1118
1119   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1120                  &setlist);
1121   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1122                  &showlist);
1123
1124   add_setshow_optional_filename_cmd ("solib-search-path", class_support,
1125                                      &solib_search_path, _("\
1126 Set the search path for loading non-absolute shared library symbol files."), _("\
1127 Show the search path for loading non-absolute shared library symbol files."), _("\
1128 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH."),
1129                                      reload_shared_libraries,
1130                                      show_solib_search_path,
1131                                      &setlist, &showlist);
1132 }