PR symtab/11198:
[platform/upstream/binutils.git] / gdb / solib.c
1 /* Handle shared libraries for GDB, the GNU Debugger.
2
3    Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4    2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23
24 #include <sys/types.h>
25 #include <fcntl.h>
26 #include "gdb_string.h"
27 #include "symtab.h"
28 #include "bfd.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "exceptions.h"
32 #include "gdbcore.h"
33 #include "command.h"
34 #include "target.h"
35 #include "frame.h"
36 #include "gdb_regex.h"
37 #include "inferior.h"
38 #include "environ.h"
39 #include "language.h"
40 #include "gdbcmd.h"
41 #include "completer.h"
42 #include "filenames.h"          /* for DOSish file names */
43 #include "exec.h"
44 #include "solist.h"
45 #include "observer.h"
46 #include "readline/readline.h"
47 #include "remote.h"
48 #include "solib.h"
49 #include "interps.h"
50
51 /* Architecture-specific operations.  */
52
53 /* Per-architecture data key.  */
54 static struct gdbarch_data *solib_data;
55
56 static void *
57 solib_init (struct obstack *obstack)
58 {
59   struct target_so_ops **ops;
60
61   ops = OBSTACK_ZALLOC (obstack, struct target_so_ops *);
62   *ops = current_target_so_ops;
63   return ops;
64 }
65
66 static struct target_so_ops *
67 solib_ops (struct gdbarch *gdbarch)
68 {
69   struct target_so_ops **ops = gdbarch_data (gdbarch, solib_data);
70   return *ops;
71 }
72
73 /* Set the solib operations for GDBARCH to NEW_OPS.  */
74
75 void
76 set_solib_ops (struct gdbarch *gdbarch, struct target_so_ops *new_ops)
77 {
78   struct target_so_ops **ops = gdbarch_data (gdbarch, solib_data);
79   *ops = new_ops;
80 }
81 \f
82
83 /* external data declarations */
84
85 /* FIXME: gdbarch needs to control this variable, or else every
86    configuration needs to call set_solib_ops.  */
87 struct target_so_ops *current_target_so_ops;
88
89 /* List of known shared objects */
90 #define so_list_head current_program_space->so_list
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 (current_inferior ()->environment,
231                                         "PATH"),
232                         OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY | O_BINARY,
233                         &temp_pathname);
234
235   /* If not found, next search the inferior's $LD_LIBRARY_PATH 
236      environment variable. */
237   if (found_file < 0 && gdb_sysroot_is_empty)
238     found_file = openp (get_in_environ (current_inferior ()->environment,
239                                         "LD_LIBRARY_PATH"),
240                         OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY | O_BINARY,
241                         &temp_pathname);
242
243   *fd = found_file;
244   return temp_pathname;
245 }
246
247 /* Open and return a BFD for the shared library PATHNAME.  If FD is not -1,
248    it is used as file handle to open the file.  Throws an error if the file
249    could not be opened.  Handles both local and remote file access.
250
251    PATHNAME must be malloc'ed by the caller.  If successful, the new BFD's
252    name will point to it.  If unsuccessful, PATHNAME will be freed and the
253    FD will be closed (unless FD was -1).  */
254
255 bfd *
256 solib_bfd_fopen (char *pathname, int fd)
257 {
258   bfd *abfd;
259
260   if (remote_filename_p (pathname))
261     {
262       gdb_assert (fd == -1);
263       abfd = remote_bfd_open (pathname, gnutarget);
264     }
265   else
266     {
267       abfd = bfd_fopen (pathname, gnutarget, FOPEN_RB, fd);
268
269       if (abfd)
270         bfd_set_cacheable (abfd, 1);
271       else if (fd != -1)
272         close (fd);
273     }
274
275   if (!abfd)
276     {
277       make_cleanup (xfree, pathname);
278       error (_("Could not open `%s' as an executable file: %s"),
279              pathname, bfd_errmsg (bfd_get_error ()));
280     }
281
282   return abfd;
283 }
284
285 /* Find shared library PATHNAME and open a BFD for it.  */
286
287 bfd *
288 solib_bfd_open (char *pathname)
289 {
290   char *found_pathname;
291   int found_file;
292   bfd *abfd;
293   const struct bfd_arch_info *b;
294
295   /* Search for shared library file.  */
296   found_pathname = solib_find (pathname, &found_file);
297   if (found_pathname == NULL)
298     perror_with_name (pathname);
299
300   /* Open bfd for shared library.  */
301   abfd = solib_bfd_fopen (found_pathname, found_file);
302
303   /* Check bfd format.  */
304   if (!bfd_check_format (abfd, bfd_object))
305     {
306       bfd_close (abfd);
307       make_cleanup (xfree, found_pathname);
308       error (_("`%s': not in executable format: %s"),
309              found_pathname, bfd_errmsg (bfd_get_error ()));
310     }
311
312   /* Check bfd arch.  */
313   b = gdbarch_bfd_arch_info (target_gdbarch);
314   if (!b->compatible (b, bfd_get_arch_info (abfd)))
315     warning (_("`%s': Shared library architecture %s is not compatible "
316                "with target architecture %s."), found_pathname,
317              bfd_get_arch_info (abfd)->printable_name, b->printable_name);
318
319   return abfd;
320 }
321
322
323 /*
324
325    LOCAL FUNCTION
326
327    solib_map_sections -- open bfd and build sections for shared lib
328
329    SYNOPSIS
330
331    static int solib_map_sections (struct so_list *so)
332
333    DESCRIPTION
334
335    Given a pointer to one of the shared objects in our list
336    of mapped objects, use the recorded name to open a bfd
337    descriptor for the object, build a section table, and then
338    relocate all the section addresses by the base address at
339    which the shared object was mapped.
340
341    FIXMES
342
343    In most (all?) cases the shared object file name recorded in the
344    dynamic linkage tables will be a fully qualified pathname.  For
345    cases where it isn't, do we really mimic the systems search
346    mechanism correctly in the below code (particularly the tilde
347    expansion stuff?).
348  */
349
350 static int
351 solib_map_sections (void *arg)
352 {
353   struct so_list *so = (struct so_list *) arg;  /* catch_errors bogon */
354   struct target_so_ops *ops = solib_ops (target_gdbarch);
355   char *filename;
356   struct target_section *p;
357   struct cleanup *old_chain;
358   bfd *abfd;
359
360   filename = tilde_expand (so->so_name);
361   old_chain = make_cleanup (xfree, filename);
362   abfd = ops->bfd_open (filename);
363   do_cleanups (old_chain);
364
365   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
366   so->abfd = gdb_bfd_ref (abfd);
367
368   /* copy full path name into so_name, so that later symbol_file_add
369      can find it */
370   if (strlen (bfd_get_filename (abfd)) >= SO_NAME_MAX_PATH_SIZE)
371     error (_("Shared library file name is too long."));
372   strcpy (so->so_name, bfd_get_filename (abfd));
373
374   if (build_section_table (abfd, &so->sections, &so->sections_end))
375     {
376       error (_("Can't find the file sections in `%s': %s"),
377              bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
378     }
379
380   for (p = so->sections; p < so->sections_end; p++)
381     {
382       /* Relocate the section binding addresses as recorded in the shared
383          object's file by the base address to which the object was actually
384          mapped. */
385       ops->relocate_section_addresses (so, p);
386
387       /* If the target didn't provide information about the address
388          range of the shared object, assume we want the location of
389          the .text section.  */
390       if (so->addr_low == 0 && so->addr_high == 0
391           && strcmp (p->the_bfd_section->name, ".text") == 0)
392         {
393           so->addr_low = p->addr;
394           so->addr_high = p->endaddr;
395         }
396     }
397
398   return (1);
399 }
400
401 /* LOCAL FUNCTION
402
403    free_so --- free a `struct so_list' object
404
405    SYNOPSIS
406
407    void free_so (struct so_list *so)
408
409    DESCRIPTION
410
411    Free the storage associated with the `struct so_list' object SO.
412    If we have opened a BFD for SO, close it.  
413
414    The caller is responsible for removing SO from whatever list it is
415    a member of.  If we have placed SO's sections in some target's
416    section table, the caller is responsible for removing them.
417
418    This function doesn't mess with objfiles at all.  If there is an
419    objfile associated with SO that needs to be removed, the caller is
420    responsible for taking care of that.  */
421
422 void
423 free_so (struct so_list *so)
424 {
425   struct target_so_ops *ops = solib_ops (target_gdbarch);
426
427   if (so->sections)
428     xfree (so->sections);
429
430   gdb_bfd_unref (so->abfd);
431
432   ops->free_so (so);
433
434   xfree (so);
435 }
436
437
438 /* Return address of first so_list entry in master shared object list.  */
439 struct so_list *
440 master_so_list (void)
441 {
442   return so_list_head;
443 }
444
445 static void
446 symbol_add_stub (struct so_list *so, int flags)
447 {
448   struct section_addr_info *sap;
449
450   /* Have we already loaded this shared object?  */
451   ALL_OBJFILES (so->objfile)
452     {
453       if (strcmp (so->objfile->name, so->so_name) == 0)
454         return;
455     }
456
457   sap = build_section_addr_info_from_section_table (so->sections,
458                                                     so->sections_end);
459
460   so->objfile = symbol_file_add_from_bfd (so->abfd, flags, sap, OBJF_SHARED);
461   free_section_addr_info (sap);
462
463   return;
464 }
465
466 /* Read in symbols for shared object SO.  If SYMFILE_VERBOSE is set in FLAGS,
467    be chatty about it.  Return non-zero if any symbols were actually
468    loaded.  */
469
470 int
471 solib_read_symbols (struct so_list *so, int flags)
472 {
473   const int from_tty = flags & SYMFILE_VERBOSE;
474
475   if (so->symbols_loaded)
476     {
477       if (from_tty || info_verbose)
478         printf_unfiltered (_("Symbols already loaded for %s\n"), so->so_name);
479     }
480   else if (so->abfd == NULL)
481     {
482       if (from_tty || info_verbose)
483         printf_unfiltered (_("Symbol file not found for %s\n"), so->so_name);
484     }
485   else
486     {
487       volatile struct gdb_exception exception;
488       TRY_CATCH (exception, RETURN_MASK_ALL)
489         {
490           symbol_add_stub (so, flags);
491         }
492       if (exception.reason != 0)
493         {
494           exception_fprintf (gdb_stderr, exception,
495                              "Error while reading shared library symbols:\n");
496           return 0;
497         }
498       if (from_tty || info_verbose)
499         printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
500       so->symbols_loaded = 1;
501       return 1;
502     }
503
504   return 0;
505 }
506
507 /* LOCAL FUNCTION
508
509    update_solib_list --- synchronize GDB's shared object list with inferior's
510
511    SYNOPSIS
512
513    void update_solib_list (int from_tty, struct target_ops *TARGET)
514
515    Extract the list of currently loaded shared objects from the
516    inferior, and compare it with the list of shared objects currently
517    in GDB's so_list_head list.  Edit so_list_head to bring it in sync
518    with the inferior's new list.
519
520    If we notice that the inferior has unloaded some shared objects,
521    free any symbolic info GDB had read about those shared objects.
522
523    Don't load symbolic info for any new shared objects; just add them
524    to the list, and leave their symbols_loaded flag clear.
525
526    If FROM_TTY is non-null, feel free to print messages about what
527    we're doing.
528
529    If TARGET is non-null, add the sections of all new shared objects
530    to TARGET's section table.  Note that this doesn't remove any
531    sections for shared objects that have been unloaded, and it
532    doesn't check to see if the new shared objects are already present in
533    the section table.  But we only use this for core files and
534    processes we've just attached to, so that's okay.  */
535
536 static void
537 update_solib_list (int from_tty, struct target_ops *target)
538 {
539   struct target_so_ops *ops = solib_ops (target_gdbarch);
540   struct so_list *inferior = ops->current_sos();
541   struct so_list *gdb, **gdb_link;
542
543   /* We can reach here due to changing solib-search-path or the
544      sysroot, before having any inferior.  */
545   if (target_has_execution && !ptid_equal (inferior_ptid, null_ptid))
546     {
547       struct inferior *inf = current_inferior ();
548
549       /* If we are attaching to a running process for which we
550          have not opened a symbol file, we may be able to get its
551          symbols now!  */
552       if (inf->attach_flag && symfile_objfile == NULL)
553         catch_errors (ops->open_symbol_file_object, &from_tty,
554                       "Error reading attached process's symbol file.\n",
555                       RETURN_MASK_ALL);
556     }
557
558   /* GDB and the inferior's dynamic linker each maintain their own
559      list of currently loaded shared objects; we want to bring the
560      former in sync with the latter.  Scan both lists, seeing which
561      shared objects appear where.  There are three cases:
562
563      - A shared object appears on both lists.  This means that GDB
564      knows about it already, and it's still loaded in the inferior.
565      Nothing needs to happen.
566
567      - A shared object appears only on GDB's list.  This means that
568      the inferior has unloaded it.  We should remove the shared
569      object from GDB's tables.
570
571      - A shared object appears only on the inferior's list.  This
572      means that it's just been loaded.  We should add it to GDB's
573      tables.
574
575      So we walk GDB's list, checking each entry to see if it appears
576      in the inferior's list too.  If it does, no action is needed, and
577      we remove it from the inferior's list.  If it doesn't, the
578      inferior has unloaded it, and we remove it from GDB's list.  By
579      the time we're done walking GDB's list, the inferior's list
580      contains only the new shared objects, which we then add.  */
581
582   gdb = so_list_head;
583   gdb_link = &so_list_head;
584   while (gdb)
585     {
586       struct so_list *i = inferior;
587       struct so_list **i_link = &inferior;
588
589       /* Check to see whether the shared object *gdb also appears in
590          the inferior's current list.  */
591       while (i)
592         {
593           if (ops->same)
594             {
595               if (ops->same (gdb, i))
596                 break;
597             }
598           else
599             {
600               if (! strcmp (gdb->so_original_name, i->so_original_name))
601                 break;        
602             }
603
604           i_link = &i->next;
605           i = *i_link;
606         }
607
608       /* If the shared object appears on the inferior's list too, then
609          it's still loaded, so we don't need to do anything.  Delete
610          it from the inferior's list, and leave it on GDB's list.  */
611       if (i)
612         {
613           *i_link = i->next;
614           free_so (i);
615           gdb_link = &gdb->next;
616           gdb = *gdb_link;
617         }
618
619       /* If it's not on the inferior's list, remove it from GDB's tables.  */
620       else
621         {
622           /* Notify any observer that the shared object has been
623              unloaded before we remove it from GDB's tables.  */
624           observer_notify_solib_unloaded (gdb);
625
626           *gdb_link = gdb->next;
627
628           /* Unless the user loaded it explicitly, free SO's objfile.  */
629           if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
630             free_objfile (gdb->objfile);
631
632           /* Some targets' section tables might be referring to
633              sections from so->abfd; remove them.  */
634           remove_target_sections (gdb->abfd);
635
636           free_so (gdb);
637           gdb = *gdb_link;
638         }
639     }
640
641   /* Now the inferior's list contains only shared objects that don't
642      appear in GDB's list --- those that are newly loaded.  Add them
643      to GDB's shared object list.  */
644   if (inferior)
645     {
646       struct so_list *i;
647
648       /* Add the new shared objects to GDB's list.  */
649       *gdb_link = inferior;
650
651       /* Fill in the rest of each of the `struct so_list' nodes.  */
652       for (i = inferior; i; i = i->next)
653         {
654           i->from_tty = from_tty;
655           i->pspace = current_program_space;
656
657           /* Fill in the rest of the `struct so_list' node.  */
658           catch_errors (solib_map_sections, i,
659                         "Error while mapping shared library sections:\n",
660                         RETURN_MASK_ALL);
661
662           /* Add the shared object's sections to the current set of
663              file section tables.  Do this immediately after mapping
664              the object so that later nodes in the list can query this
665              object, as is needed in solib-osf.c.  */
666           add_target_sections (i->sections, i->sections_end);
667
668           /* Notify any observer that the shared object has been
669              loaded now that we've added it to GDB's tables.  */
670           observer_notify_solib_loaded (i);
671         }
672     }
673 }
674
675
676 /* Return non-zero if NAME is the libpthread shared library.
677
678    Uses a fairly simplistic heuristic approach where we check
679    the file name against "/libpthread".  This can lead to false
680    positives, but this should be good enough in practice.  */
681
682 int
683 libpthread_name_p (const char *name)
684 {
685   return (strstr (name, "/libpthread") != NULL);
686 }
687
688 /* Return non-zero if SO is the libpthread shared library.  */
689
690 static int
691 libpthread_solib_p (struct so_list *so)
692 {
693   return libpthread_name_p (so->so_name);
694 }
695
696 /* GLOBAL FUNCTION
697
698    solib_add -- read in symbol info for newly added shared libraries
699
700    SYNOPSIS
701
702    void solib_add (char *pattern, int from_tty, struct target_ops
703    *TARGET, int readsyms)
704
705    DESCRIPTION
706
707    Read in symbolic information for any shared objects whose names
708    match PATTERN.  (If we've already read a shared object's symbol
709    info, leave it alone.)  If PATTERN is zero, read them all.
710
711    If READSYMS is 0, defer reading symbolic information until later
712    but still do any needed low level processing.
713
714    FROM_TTY and TARGET are as described for update_solib_list, above.  */
715
716 void
717 solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
718 {
719   struct so_list *gdb;
720
721   if (pattern)
722     {
723       char *re_err = re_comp (pattern);
724
725       if (re_err)
726         error (_("Invalid regexp: %s"), re_err);
727     }
728
729   update_solib_list (from_tty, target);
730
731   /* Walk the list of currently loaded shared libraries, and read
732      symbols for any that match the pattern --- or any whose symbols
733      aren't already loaded, if no pattern was given.  */
734   {
735     int any_matches = 0;
736     int loaded_any_symbols = 0;
737     const int flags =
738         SYMFILE_DEFER_BP_RESET | (from_tty ? SYMFILE_VERBOSE : 0);
739
740     for (gdb = so_list_head; gdb; gdb = gdb->next)
741       if (! pattern || re_exec (gdb->so_name))
742         {
743           /* Normally, we would read the symbols from that library
744              only if READSYMS is set.  However, we're making a small
745              exception for the pthread library, because we sometimes
746              need the library symbols to be loaded in order to provide
747              thread support (x86-linux for instance).  */
748           const int add_this_solib =
749             (readsyms || libpthread_solib_p (gdb));
750
751           any_matches = 1;
752           if (add_this_solib && solib_read_symbols (gdb, flags))
753             loaded_any_symbols = 1;
754         }
755
756     if (loaded_any_symbols)
757       breakpoint_re_set ();
758
759     if (from_tty && pattern && ! any_matches)
760       printf_unfiltered
761         ("No loaded shared libraries match the pattern `%s'.\n", pattern);
762
763     if (loaded_any_symbols)
764       {
765         struct target_so_ops *ops = solib_ops (target_gdbarch);
766
767         /* Getting new symbols may change our opinion about what is
768            frameless.  */
769         reinit_frame_cache ();
770
771         ops->special_symbol_handling ();
772       }
773   }
774 }
775
776
777 /*
778
779    LOCAL FUNCTION
780
781    info_sharedlibrary_command -- code for "info sharedlibrary"
782
783    SYNOPSIS
784
785    static void info_sharedlibrary_command ()
786
787    DESCRIPTION
788
789    Walk through the shared library list and print information
790    about each attached library matching PATTERN.  If PATTERN is elided,
791    print them all.
792  */
793
794 static void
795 info_sharedlibrary_command (char *pattern, int from_tty)
796 {
797   struct so_list *so = NULL;    /* link map state variable */
798   int header_done = 0;
799   int so_missing_debug_info = 0;
800   int addr_width;
801   int nr_libs;
802   struct cleanup *table_cleanup;
803   struct gdbarch *gdbarch = target_gdbarch;
804
805   if (pattern)
806     {
807       char *re_err = re_comp (pattern);
808
809       if (re_err)
810         error (_("Invalid regexp: %s"), re_err);
811     }
812
813   /* "0x", a little whitespace, and two hex digits per byte of pointers.  */
814   addr_width = 4 + (gdbarch_ptr_bit (gdbarch) / 4);
815
816   update_solib_list (from_tty, 0);
817
818   /* make_cleanup_ui_out_table_begin_end needs to know the number of
819      rows, so we need to make two passes over the libs.  */
820
821   for (nr_libs = 0, so = so_list_head; so; so = so->next)
822     {
823       if (so->so_name[0])
824         {
825           if (pattern && ! re_exec (so->so_name))
826             continue;
827           ++nr_libs;
828         }
829     }
830
831   table_cleanup =
832     make_cleanup_ui_out_table_begin_end (uiout, 4, nr_libs,
833                                          "SharedLibraryTable");
834
835   /* The "- 1" is because ui_out adds one space between columns.  */
836   ui_out_table_header (uiout, addr_width - 1, ui_left, "from", "From");
837   ui_out_table_header (uiout, addr_width - 1, ui_left, "to", "To");
838   ui_out_table_header (uiout, 12 - 1, ui_left, "syms-read", "Syms Read");
839   ui_out_table_header (uiout, 0, ui_noalign,
840                        "name", "Shared Object Library");
841
842   ui_out_table_body (uiout);
843
844   for (so = so_list_head; so; so = so->next)
845     {
846       struct cleanup *lib_cleanup;
847
848       if (! so->so_name[0])
849         continue;
850       if (pattern && ! re_exec (so->so_name))
851         continue;
852
853       lib_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "lib");
854
855       if (so->addr_high != 0)
856         {
857           ui_out_field_core_addr (uiout, "from", gdbarch, so->addr_low);
858           ui_out_field_core_addr (uiout, "to", gdbarch, so->addr_high);
859         }
860       else
861         {
862           ui_out_field_skip (uiout, "from");
863           ui_out_field_skip (uiout, "to");
864         }
865
866       if (! ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
867           && so->symbols_loaded
868           && !objfile_has_symbols (so->objfile))
869         {
870           so_missing_debug_info = 1;
871           ui_out_field_string (uiout, "syms-read", "Yes (*)");
872         }
873       else
874         ui_out_field_string (uiout, "syms-read", 
875                              so->symbols_loaded ? "Yes" : "No");
876
877       ui_out_field_string (uiout, "name", so->so_name);
878
879       ui_out_text (uiout, "\n");
880
881       do_cleanups (lib_cleanup);
882     }
883
884   do_cleanups (table_cleanup);
885
886   if (nr_libs == 0)
887     {
888       if (pattern)
889         ui_out_message (uiout, 0,
890                         _("No shared libraries matched.\n"));
891       else
892         ui_out_message (uiout, 0,
893                         _("No shared libraries loaded at this time.\n"));
894     }
895   else
896     {
897       if (so_missing_debug_info)
898         ui_out_message (uiout, 0,
899                         _("(*): Shared library is missing debugging information.\n"));
900     }
901 }
902
903 /* Return 1 if ADDRESS lies within SOLIB.  */
904
905 int
906 solib_contains_address_p (const struct so_list *const solib,
907                           CORE_ADDR address)
908 {
909   struct target_section *p;
910
911   for (p = solib->sections; p < solib->sections_end; p++)
912     if (p->addr <= address && address < p->endaddr)
913       return 1;
914
915   return 0;
916 }
917
918 /*
919
920    GLOBAL FUNCTION
921
922    solib_name_from_address -- if an address is in a shared lib, return
923    its name.
924
925    SYNOPSIS
926
927    char * solib_name_from_address (CORE_ADDR address)
928
929    DESCRIPTION
930
931    Provides a hook for other gdb routines to discover whether or
932    not a particular address is within the mapped address space of
933    a shared library.
934
935    For example, this routine is called at one point to disable
936    breakpoints which are in shared libraries that are not currently
937    mapped in.
938  */
939
940 char *
941 solib_name_from_address (struct program_space *pspace, CORE_ADDR address)
942 {
943   struct so_list *so = NULL;
944
945   for (so = pspace->so_list; so; so = so->next)
946     if (solib_contains_address_p (so, address))
947       return (so->so_name);
948
949   return (0);
950 }
951
952 /* Return whether the data starting at VADDR, size SIZE, must be kept
953    in a core file for shared libraries loaded before "gcore" is used
954    to be handled correctly when the core file is loaded.  This only
955    applies when the section would otherwise not be kept in the core
956    file (in particular, for readonly sections).  */
957
958 int
959 solib_keep_data_in_core (CORE_ADDR vaddr, unsigned long size)
960 {
961   struct target_so_ops *ops = solib_ops (target_gdbarch);
962
963   if (ops->keep_data_in_core)
964     return ops->keep_data_in_core (vaddr, size);
965   else
966     return 0;
967 }
968
969 /* Called by free_all_symtabs */
970
971 void
972 clear_solib (void)
973 {
974   struct target_so_ops *ops = solib_ops (target_gdbarch);
975
976   /* This function is expected to handle ELF shared libraries.  It is
977      also used on Solaris, which can run either ELF or a.out binaries
978      (for compatibility with SunOS 4), both of which can use shared
979      libraries.  So we don't know whether we have an ELF executable or
980      an a.out executable until the user chooses an executable file.
981
982      ELF shared libraries don't get mapped into the address space
983      until after the program starts, so we'd better not try to insert
984      breakpoints in them immediately.  We have to wait until the
985      dynamic linker has loaded them; we'll hit a bp_shlib_event
986      breakpoint (look for calls to create_solib_event_breakpoint) when
987      it's ready.
988
989      SunOS shared libraries seem to be different --- they're present
990      as soon as the process begins execution, so there's no need to
991      put off inserting breakpoints.  There's also nowhere to put a
992      bp_shlib_event breakpoint, so if we put it off, we'll never get
993      around to it.
994
995      So: disable breakpoints only if we're using ELF shared libs.  */
996   if (exec_bfd != NULL
997       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
998     disable_breakpoints_in_shlibs ();
999
1000   while (so_list_head)
1001     {
1002       struct so_list *so = so_list_head;
1003       so_list_head = so->next;
1004       observer_notify_solib_unloaded (so);
1005       if (so->abfd)
1006         remove_target_sections (so->abfd);
1007       free_so (so);
1008     }
1009
1010   ops->clear_solib ();
1011 }
1012
1013 /* GLOBAL FUNCTION
1014
1015    solib_create_inferior_hook -- shared library startup support
1016
1017    SYNOPSIS
1018
1019    void solib_create_inferior_hook (int from_tty)
1020
1021    DESCRIPTION
1022
1023    When gdb starts up the inferior, it nurses it along (through the
1024    shell) until it is ready to execute it's first instruction.  At this
1025    point, this function gets called via expansion of the macro
1026    SOLIB_CREATE_INFERIOR_HOOK.  */
1027
1028 void
1029 solib_create_inferior_hook (int from_tty)
1030 {
1031   struct target_so_ops *ops = solib_ops (target_gdbarch);
1032   ops->solib_create_inferior_hook (from_tty);
1033 }
1034
1035 /* GLOBAL FUNCTION
1036
1037    in_solib_dynsym_resolve_code -- check to see if an address is in
1038                                    dynamic loader's dynamic symbol
1039                                    resolution code
1040
1041    SYNOPSIS
1042
1043    int in_solib_dynsym_resolve_code (CORE_ADDR pc)
1044
1045    DESCRIPTION
1046
1047    Determine if PC is in the dynamic linker's symbol resolution
1048    code.  Return 1 if so, 0 otherwise.
1049 */
1050
1051 int
1052 in_solib_dynsym_resolve_code (CORE_ADDR pc)
1053 {
1054   struct target_so_ops *ops = solib_ops (target_gdbarch);
1055   return ops->in_dynsym_resolve_code (pc);
1056 }
1057
1058 /*
1059
1060    LOCAL FUNCTION
1061
1062    sharedlibrary_command -- handle command to explicitly add library
1063
1064    SYNOPSIS
1065
1066    static void sharedlibrary_command (char *args, int from_tty)
1067
1068    DESCRIPTION
1069
1070  */
1071
1072 static void
1073 sharedlibrary_command (char *args, int from_tty)
1074 {
1075   dont_repeat ();
1076   solib_add (args, from_tty, (struct target_ops *) 0, 1);
1077 }
1078
1079 /* LOCAL FUNCTION
1080
1081    no_shared_libraries -- handle command to explicitly discard symbols
1082    from shared libraries.
1083
1084    DESCRIPTION
1085
1086    Implements the command "nosharedlibrary", which discards symbols
1087    that have been auto-loaded from shared libraries.  Symbols from
1088    shared libraries that were added by explicit request of the user
1089    are not discarded.  Also called from remote.c.  */
1090
1091 void
1092 no_shared_libraries (char *ignored, int from_tty)
1093 {
1094   /* The order of the two routines below is important: clear_solib notifies
1095      the solib_unloaded observers, and some of these observers might need
1096      access to their associated objfiles.  Therefore, we can not purge the
1097      solibs' objfiles before clear_solib has been called.  */
1098
1099   clear_solib ();
1100   objfile_purge_solibs ();
1101 }
1102
1103 static void
1104 reload_shared_libraries (char *ignored, int from_tty,
1105                          struct cmd_list_element *e)
1106 {
1107   no_shared_libraries (NULL, from_tty);
1108   /* Creating inferior hooks here has two purposes. First, if we reload 
1109      shared libraries then the address of solib breakpoint we've computed
1110      previously might be no longer valid.  For example, if we forgot to set
1111      solib-absolute-prefix and are setting it right now, then the previous
1112      breakpoint address is plain wrong.  Second, installing solib hooks
1113      also implicitly figures were ld.so is and loads symbols for it.
1114      Absent this call, if we've just connected to a target and set 
1115      solib-absolute-prefix or solib-search-path, we'll lose all information
1116      about ld.so.  */
1117   if (target_has_execution)
1118     {
1119 #ifdef SOLIB_CREATE_INFERIOR_HOOK
1120       SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
1121 #else
1122       solib_create_inferior_hook (from_tty);
1123 #endif
1124     }
1125
1126   /* Sometimes the platform-specific hook loads initial shared
1127      libraries, and sometimes it doesn't.  If it doesn't FROM_TTY will be
1128      incorrectly 0 but such solib targets should be fixed anyway.  If we
1129      made all the inferior hook methods consistent, this call could be
1130      removed.  Call it only after the solib target has been initialized by
1131      solib_create_inferior_hook.  */
1132
1133   solib_add (NULL, 0, NULL, auto_solib_add);
1134
1135   /* We have unloaded and then reloaded debug info for all shared libraries.
1136      However, frames may still reference them, for example a frame's 
1137      unwinder might still point of DWARF FDE structures that are now freed.
1138      Reinit frame cache to avoid crashing.  */
1139   reinit_frame_cache ();
1140 }
1141
1142 static void
1143 show_auto_solib_add (struct ui_file *file, int from_tty,
1144                      struct cmd_list_element *c, const char *value)
1145 {
1146   fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"),
1147                     value);
1148 }
1149
1150
1151 /* Handler for library-specific lookup of global symbol NAME in OBJFILE.  Call
1152    the library-specific handler if it is installed for the current target.  */
1153
1154 struct symbol *
1155 solib_global_lookup (const struct objfile *objfile,
1156                      const char *name,
1157                      const char *linkage_name,
1158                      const domain_enum domain)
1159 {
1160   struct target_so_ops *ops = solib_ops (target_gdbarch);
1161
1162   if (ops->lookup_lib_global_symbol != NULL)
1163     return ops->lookup_lib_global_symbol (objfile, name, linkage_name, domain);
1164   return NULL;
1165 }
1166
1167
1168 extern initialize_file_ftype _initialize_solib; /* -Wmissing-prototypes */
1169
1170 void
1171 _initialize_solib (void)
1172 {
1173   struct cmd_list_element *c;
1174
1175   solib_data = gdbarch_data_register_pre_init (solib_init);
1176
1177   add_com ("sharedlibrary", class_files, sharedlibrary_command,
1178            _("Load shared object library symbols for files matching REGEXP."));
1179   add_info ("sharedlibrary", info_sharedlibrary_command,
1180             _("Status of loaded shared object libraries."));
1181   add_com ("nosharedlibrary", class_files, no_shared_libraries,
1182            _("Unload all shared object library symbols."));
1183
1184   add_setshow_boolean_cmd ("auto-solib-add", class_support,
1185                            &auto_solib_add, _("\
1186 Set autoloading of shared library symbols."), _("\
1187 Show autoloading of shared library symbols."), _("\
1188 If \"on\", symbols from all shared object libraries will be loaded\n\
1189 automatically when the inferior begins execution, when the dynamic linker\n\
1190 informs gdb that a new library has been loaded, or when attaching to the\n\
1191 inferior.  Otherwise, symbols must be loaded manually, using `sharedlibrary'."),
1192                            NULL,
1193                            show_auto_solib_add,
1194                            &setlist, &showlist);
1195
1196   add_setshow_filename_cmd ("sysroot", class_support,
1197                             &gdb_sysroot, _("\
1198 Set an alternate system root."), _("\
1199 Show the current system root."), _("\
1200 The system root is used to load absolute shared library symbol files.\n\
1201 For other (relative) files, you can add directories using\n\
1202 `set solib-search-path'."),
1203                             reload_shared_libraries,
1204                             NULL,
1205                             &setlist, &showlist);
1206
1207   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1208                  &setlist);
1209   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1210                  &showlist);
1211
1212   add_setshow_optional_filename_cmd ("solib-search-path", class_support,
1213                                      &solib_search_path, _("\
1214 Set the search path for loading non-absolute shared library symbol files."), _("\
1215 Show the search path for loading non-absolute shared library symbol files."), _("\
1216 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH."),
1217                                      reload_shared_libraries,
1218                                      show_solib_search_path,
1219                                      &setlist, &showlist);
1220 }