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