90ea45410b78b259d0595fbedc70c51a7a4036c8
[platform/upstream/binutils.git] / gdb / solib.c
1 /* Handle shared libraries for GDB, the GNU Debugger.
2
3    Copyright (C) 1990-2014 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21
22 #include <sys/types.h>
23 #include <fcntl.h>
24 #include "symtab.h"
25 #include "bfd.h"
26 #include "symfile.h"
27 #include "objfiles.h"
28 #include "exceptions.h"
29 #include "gdbcore.h"
30 #include "command.h"
31 #include "target.h"
32 #include "frame.h"
33 #include "gdb_regex.h"
34 #include "inferior.h"
35 #include "environ.h"
36 #include "language.h"
37 #include "gdbcmd.h"
38 #include "completer.h"
39 #include "filenames.h"          /* for DOSish file names */
40 #include "exec.h"
41 #include "solist.h"
42 #include "observer.h"
43 #include "readline/readline.h"
44 #include "remote.h"
45 #include "solib.h"
46 #include "interps.h"
47 #include "filesystem.h"
48 #include "gdb_bfd.h"
49 #include "filestuff.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 const struct target_so_ops *
67 solib_ops (struct gdbarch *gdbarch)
68 {
69   const struct target_so_ops **ops = gdbarch_data (gdbarch, solib_data);
70
71   return *ops;
72 }
73
74 /* Set the solib operations for GDBARCH to NEW_OPS.  */
75
76 void
77 set_solib_ops (struct gdbarch *gdbarch, const struct target_so_ops *new_ops)
78 {
79   const struct target_so_ops **ops = gdbarch_data (gdbarch, solib_data);
80
81   *ops = new_ops;
82 }
83 \f
84
85 /* external data declarations */
86
87 /* FIXME: gdbarch needs to control this variable, or else every
88    configuration needs to call set_solib_ops.  */
89 struct target_so_ops *current_target_so_ops;
90
91 /* List of known shared objects */
92 #define so_list_head current_program_space->so_list
93
94 /* Local function prototypes */
95
96 /* If non-empty, this is a search path for loading non-absolute shared library
97    symbol files.  This takes precedence over the environment variables PATH
98    and LD_LIBRARY_PATH.  */
99 static char *solib_search_path = NULL;
100 static void
101 show_solib_search_path (struct ui_file *file, int from_tty,
102                         struct cmd_list_element *c, const char *value)
103 {
104   fprintf_filtered (file, _("The search path for loading non-absolute "
105                             "shared library symbol files is %s.\n"),
106                     value);
107 }
108
109 /* Same as HAVE_DOS_BASED_FILE_SYSTEM, but useable as an rvalue.  */
110 #if (HAVE_DOS_BASED_FILE_SYSTEM)
111 #  define DOS_BASED_FILE_SYSTEM 1
112 #else
113 #  define DOS_BASED_FILE_SYSTEM 0
114 #endif
115
116 /* Returns the full pathname of the shared library file, or NULL if
117    not found.  (The pathname is malloc'ed; it needs to be freed by the
118    caller.)  *FD is set to either -1 or an open file handle for the
119    library.
120
121    Global variable GDB_SYSROOT is used as a prefix directory
122    to search for shared libraries if they have an absolute path.
123
124    Global variable SOLIB_SEARCH_PATH is used as a prefix directory
125    (or set of directories, as in LD_LIBRARY_PATH) to search for all
126    shared libraries if not found in GDB_SYSROOT.
127
128    Search algorithm:
129    * If there is a gdb_sysroot and path is absolute:
130    *   Search for gdb_sysroot/path.
131    * else
132    *   Look for it literally (unmodified).
133    * Look in SOLIB_SEARCH_PATH.
134    * If available, use target defined search function.
135    * If gdb_sysroot is NOT set, perform the following two searches:
136    *   Look in inferior's $PATH.
137    *   Look in inferior's $LD_LIBRARY_PATH.
138    *
139    * The last check avoids doing this search when targetting remote
140    * machines since gdb_sysroot will almost always be set.
141 */
142
143 char *
144 solib_find (char *in_pathname, int *fd)
145 {
146   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
147   int found_file = -1;
148   char *temp_pathname = NULL;
149   int gdb_sysroot_is_empty;
150   const char *solib_symbols_extension
151     = gdbarch_solib_symbols_extension (target_gdbarch ());
152   const char *fskind = effective_target_file_system_kind ();
153   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
154   char *sysroot = NULL;
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
162       while (p > in_pathname && *p != '.')
163         p--;
164
165       if (*p == '.')
166         {
167           char *new_pathname;
168
169           new_pathname = alloca (p - in_pathname + 1
170                                  + strlen (solib_symbols_extension) + 1);
171           memcpy (new_pathname, in_pathname, p - in_pathname + 1);
172           strcpy (new_pathname + (p - in_pathname) + 1,
173                   solib_symbols_extension);
174
175           in_pathname = new_pathname;
176         }
177     }
178
179   gdb_sysroot_is_empty = (gdb_sysroot == NULL || *gdb_sysroot == 0);
180
181   if (!gdb_sysroot_is_empty)
182     {
183       int prefix_len = strlen (gdb_sysroot);
184
185       /* Remove trailing slashes from absolute prefix.  */
186       while (prefix_len > 0
187              && IS_DIR_SEPARATOR (gdb_sysroot[prefix_len - 1]))
188         prefix_len--;
189
190       sysroot = savestring (gdb_sysroot, prefix_len);
191       make_cleanup (xfree, sysroot);
192     }
193
194   /* If we're on a non-DOS-based system, backslashes won't be
195      understood as directory separator, so, convert them to forward
196      slashes, iff we're supposed to handle DOS-based file system
197      semantics for target paths.  */
198   if (!DOS_BASED_FILE_SYSTEM && fskind == file_system_kind_dos_based)
199     {
200       char *p;
201
202       /* Avoid clobbering our input.  */
203       p = alloca (strlen (in_pathname) + 1);
204       strcpy (p, in_pathname);
205       in_pathname = p;
206
207       for (; *p; p++)
208         {
209           if (*p == '\\')
210             *p = '/';
211         }
212     }
213
214   /* Note, we're interested in IS_TARGET_ABSOLUTE_PATH, not
215      IS_ABSOLUTE_PATH.  The latter is for host paths only, while
216      IN_PATHNAME is a target path.  For example, if we're supposed to
217      be handling DOS-like semantics we want to consider a
218      'c:/foo/bar.dll' path as an absolute path, even on a Unix box.
219      With such a path, before giving up on the sysroot, we'll try:
220
221        1st attempt, c:/foo/bar.dll ==> /sysroot/c:/foo/bar.dll
222        2nd attempt, c:/foo/bar.dll ==> /sysroot/c/foo/bar.dll
223        3rd attempt, c:/foo/bar.dll ==> /sysroot/foo/bar.dll
224   */
225
226   if (!IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname) || gdb_sysroot_is_empty)
227     temp_pathname = xstrdup (in_pathname);
228   else
229     {
230       int need_dir_separator;
231
232       /* Concatenate the sysroot and the target reported filename.  We
233          may need to glue them with a directory separator.  Cases to
234          consider:
235
236         | sysroot         | separator | in_pathname    |
237         |-----------------+-----------+----------------|
238         | /some/dir       | /         | c:/foo/bar.dll |
239         | /some/dir       |           | /foo/bar.dll   |
240         | remote:         |           | c:/foo/bar.dll |
241         | remote:         |           | /foo/bar.dll   |
242         | remote:some/dir | /         | c:/foo/bar.dll |
243         | remote:some/dir |           | /foo/bar.dll   |
244
245         IOW, we don't need to add a separator if IN_PATHNAME already
246         has one, or when the the sysroot is exactly "remote:".
247         There's no need to check for drive spec explicitly, as we only
248         get here if IN_PATHNAME is considered an absolute path.  */
249       need_dir_separator = !(IS_DIR_SEPARATOR (in_pathname[0])
250                              || strcmp (REMOTE_SYSROOT_PREFIX, sysroot) == 0);
251
252       /* Cat the prefixed pathname together.  */
253       temp_pathname = concat (sysroot,
254                               need_dir_separator ? SLASH_STRING : "",
255                               in_pathname, (char *) NULL);
256     }
257
258   /* Handle remote files.  */
259   if (remote_filename_p (temp_pathname))
260     {
261       *fd = -1;
262       do_cleanups (old_chain);
263       return temp_pathname;
264     }
265
266   /* Now see if we can open it.  */
267   found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0);
268   if (found_file < 0)
269     xfree (temp_pathname);
270
271   /* If the search in gdb_sysroot failed, and the path name has a
272      drive spec (e.g, c:/foo), try stripping ':' from the drive spec,
273      and retrying in the sysroot:
274        c:/foo/bar.dll ==> /sysroot/c/foo/bar.dll.  */
275
276   if (found_file < 0
277       && !gdb_sysroot_is_empty
278       && HAS_TARGET_DRIVE_SPEC (fskind, in_pathname))
279     {
280       int need_dir_separator = !IS_DIR_SEPARATOR (in_pathname[2]);
281       char *drive = savestring (in_pathname, 1);
282
283       temp_pathname = concat (sysroot,
284                               SLASH_STRING,
285                               drive,
286                               need_dir_separator ? SLASH_STRING : "",
287                               in_pathname + 2, (char *) NULL);
288       xfree (drive);
289
290       found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0);
291       if (found_file < 0)
292         {
293           xfree (temp_pathname);
294
295           /* If the search in gdb_sysroot still failed, try fully
296              stripping the drive spec, and trying once more in the
297              sysroot before giving up.
298
299              c:/foo/bar.dll ==> /sysroot/foo/bar.dll.  */
300
301           temp_pathname = concat (sysroot,
302                                   need_dir_separator ? SLASH_STRING : "",
303                                   in_pathname + 2, (char *) NULL);
304
305           found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0);
306           if (found_file < 0)
307             xfree (temp_pathname);
308         }
309     }
310
311   do_cleanups (old_chain);
312
313   /* We try to find the library in various ways.  After each attempt,
314      either found_file >= 0 and temp_pathname is a malloc'd string, or
315      found_file < 0 and temp_pathname does not point to storage that
316      needs to be freed.  */
317
318   if (found_file < 0)
319     temp_pathname = NULL;
320
321   /* If the search in gdb_sysroot failed, and the path name is
322      absolute at this point, make it relative.  (openp will try and open the
323      file according to its absolute path otherwise, which is not what we want.)
324      Affects subsequent searches for this solib.  */
325   if (found_file < 0 && IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname))
326     {
327       /* First, get rid of any drive letters etc.  */
328       while (!IS_TARGET_DIR_SEPARATOR (fskind, *in_pathname))
329         in_pathname++;
330
331       /* Next, get rid of all leading dir separators.  */
332       while (IS_TARGET_DIR_SEPARATOR (fskind, *in_pathname))
333         in_pathname++;
334     }
335
336   /* If not found, search the solib_search_path (if any).  */
337   if (found_file < 0 && solib_search_path != NULL)
338     found_file = openp (solib_search_path,
339                         OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
340                         in_pathname, O_RDONLY | O_BINARY, &temp_pathname);
341
342   /* If not found, next search the solib_search_path (if any) for the basename
343      only (ignoring the path).  This is to allow reading solibs from a path
344      that differs from the opened path.  */
345   if (found_file < 0 && solib_search_path != NULL)
346     found_file = openp (solib_search_path,
347                         OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
348                         target_lbasename (fskind, in_pathname),
349                         O_RDONLY | O_BINARY, &temp_pathname);
350
351   /* If not found, try to use target supplied solib search method.  */
352   if (found_file < 0 && ops->find_and_open_solib)
353     found_file = ops->find_and_open_solib (in_pathname, O_RDONLY | O_BINARY,
354                                            &temp_pathname);
355
356   /* If not found, next search the inferior's $PATH environment variable.  */
357   if (found_file < 0 && gdb_sysroot_is_empty)
358     found_file = openp (get_in_environ (current_inferior ()->environment,
359                                         "PATH"),
360                         OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname,
361                         O_RDONLY | O_BINARY, &temp_pathname);
362
363   /* If not found, next search the inferior's $LD_LIBRARY_PATH
364      environment variable.  */
365   if (found_file < 0 && gdb_sysroot_is_empty)
366     found_file = openp (get_in_environ (current_inferior ()->environment,
367                                         "LD_LIBRARY_PATH"),
368                         OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname,
369                         O_RDONLY | O_BINARY, &temp_pathname);
370
371   *fd = found_file;
372   return temp_pathname;
373 }
374
375 /* Open and return a BFD for the shared library PATHNAME.  If FD is not -1,
376    it is used as file handle to open the file.  Throws an error if the file
377    could not be opened.  Handles both local and remote file access.
378
379    PATHNAME must be malloc'ed by the caller.  It will be freed by this
380    function.  If unsuccessful, the FD will be closed (unless FD was
381    -1).  */
382
383 bfd *
384 solib_bfd_fopen (char *pathname, int fd)
385 {
386   bfd *abfd;
387
388   if (remote_filename_p (pathname))
389     {
390       gdb_assert (fd == -1);
391       abfd = remote_bfd_open (pathname, gnutarget);
392     }
393   else
394     {
395       abfd = gdb_bfd_open (pathname, gnutarget, fd);
396
397       if (abfd)
398         bfd_set_cacheable (abfd, 1);
399     }
400
401   if (!abfd)
402     {
403       make_cleanup (xfree, pathname);
404       error (_("Could not open `%s' as an executable file: %s"),
405              pathname, bfd_errmsg (bfd_get_error ()));
406     }
407
408   xfree (pathname);
409
410   return abfd;
411 }
412
413 /* Find shared library PATHNAME and open a BFD for it.  */
414
415 bfd *
416 solib_bfd_open (char *pathname)
417 {
418   char *found_pathname;
419   int found_file;
420   bfd *abfd;
421   const struct bfd_arch_info *b;
422
423   /* Search for shared library file.  */
424   found_pathname = solib_find (pathname, &found_file);
425   if (found_pathname == NULL)
426     {
427       /* Return failure if the file could not be found, so that we can
428          accumulate messages about missing libraries.  */
429       if (errno == ENOENT)
430         return NULL;
431
432       perror_with_name (pathname);
433     }
434
435   /* Open bfd for shared library.  */
436   abfd = solib_bfd_fopen (found_pathname, found_file);
437
438   /* Check bfd format.  */
439   if (!bfd_check_format (abfd, bfd_object))
440     {
441       make_cleanup_bfd_unref (abfd);
442       error (_("`%s': not in executable format: %s"),
443              bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
444     }
445
446   /* Check bfd arch.  */
447   b = gdbarch_bfd_arch_info (target_gdbarch ());
448   if (!b->compatible (b, bfd_get_arch_info (abfd)))
449     warning (_("`%s': Shared library architecture %s is not compatible "
450                "with target architecture %s."), bfd_get_filename (abfd),
451              bfd_get_arch_info (abfd)->printable_name, b->printable_name);
452
453   return abfd;
454 }
455
456 /* Given a pointer to one of the shared objects in our list of mapped
457    objects, use the recorded name to open a bfd descriptor for the
458    object, build a section table, relocate all the section addresses
459    by the base address at which the shared object was mapped, and then
460    add the sections to the target's section table.
461
462    FIXME: In most (all?) cases the shared object file name recorded in
463    the dynamic linkage tables will be a fully qualified pathname.  For
464    cases where it isn't, do we really mimic the systems search
465    mechanism correctly in the below code (particularly the tilde
466    expansion stuff?).  */
467
468 static int
469 solib_map_sections (struct so_list *so)
470 {
471   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
472   char *filename;
473   struct target_section *p;
474   struct cleanup *old_chain;
475   bfd *abfd;
476
477   filename = tilde_expand (so->so_name);
478   old_chain = make_cleanup (xfree, filename);
479   abfd = ops->bfd_open (filename);
480   do_cleanups (old_chain);
481
482   if (abfd == NULL)
483     return 0;
484
485   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
486   so->abfd = abfd;
487
488   /* Copy the full path name into so_name, allowing symbol_file_add
489      to find it later.  This also affects the =library-loaded GDB/MI
490      event, and in particular the part of that notification providing
491      the library's host-side path.  If we let the target dictate
492      that objfile's path, and the target is different from the host,
493      GDB/MI will not provide the correct host-side path.  */
494   if (strlen (bfd_get_filename (abfd)) >= SO_NAME_MAX_PATH_SIZE)
495     error (_("Shared library file name is too long."));
496   strcpy (so->so_name, bfd_get_filename (abfd));
497
498   if (build_section_table (abfd, &so->sections, &so->sections_end))
499     {
500       error (_("Can't find the file sections in `%s': %s"),
501              bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
502     }
503
504   for (p = so->sections; p < so->sections_end; p++)
505     {
506       /* Relocate the section binding addresses as recorded in the shared
507          object's file by the base address to which the object was actually
508          mapped.  */
509       ops->relocate_section_addresses (so, p);
510
511       /* If the target didn't provide information about the address
512          range of the shared object, assume we want the location of
513          the .text section.  */
514       if (so->addr_low == 0 && so->addr_high == 0
515           && strcmp (p->the_bfd_section->name, ".text") == 0)
516         {
517           so->addr_low = p->addr;
518           so->addr_high = p->endaddr;
519         }
520     }
521
522   /* Add the shared object's sections to the current set of file
523      section tables.  Do this immediately after mapping the object so
524      that later nodes in the list can query this object, as is needed
525      in solib-osf.c.  */
526   add_target_sections (so, so->sections, so->sections_end);
527
528   return 1;
529 }
530
531 /* Free symbol-file related contents of SO and reset for possible reloading
532    of SO.  If we have opened a BFD for SO, close it.  If we have placed SO's
533    sections in some target's section table, the caller is responsible for
534    removing them.
535
536    This function doesn't mess with objfiles at all.  If there is an
537    objfile associated with SO that needs to be removed, the caller is
538    responsible for taking care of that.  */
539
540 static void
541 clear_so (struct so_list *so)
542 {
543   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
544
545   if (so->sections)
546     {
547       xfree (so->sections);
548       so->sections = so->sections_end = NULL;
549     }
550
551   gdb_bfd_unref (so->abfd);
552   so->abfd = NULL;
553
554   /* Our caller closed the objfile, possibly via objfile_purge_solibs.  */
555   so->symbols_loaded = 0;
556   so->objfile = NULL;
557
558   so->addr_low = so->addr_high = 0;
559
560   /* Restore the target-supplied file name.  SO_NAME may be the path
561      of the symbol file.  */
562   strcpy (so->so_name, so->so_original_name);
563
564   /* Do the same for target-specific data.  */
565   if (ops->clear_so != NULL)
566     ops->clear_so (so);
567 }
568
569 /* Free the storage associated with the `struct so_list' object SO.
570    If we have opened a BFD for SO, close it.
571
572    The caller is responsible for removing SO from whatever list it is
573    a member of.  If we have placed SO's sections in some target's
574    section table, the caller is responsible for removing them.
575
576    This function doesn't mess with objfiles at all.  If there is an
577    objfile associated with SO that needs to be removed, the caller is
578    responsible for taking care of that.  */
579
580 void
581 free_so (struct so_list *so)
582 {
583   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
584
585   clear_so (so);
586   ops->free_so (so);
587
588   xfree (so);
589 }
590
591
592 /* Return address of first so_list entry in master shared object list.  */
593 struct so_list *
594 master_so_list (void)
595 {
596   return so_list_head;
597 }
598
599 /* Read in symbols for shared object SO.  If SYMFILE_VERBOSE is set in FLAGS,
600    be chatty about it.  Return non-zero if any symbols were actually
601    loaded.  */
602
603 int
604 solib_read_symbols (struct so_list *so, int flags)
605 {
606   const int from_tty = flags & SYMFILE_VERBOSE;
607
608   if (so->symbols_loaded)
609     {
610       /* If needed, we've already warned in our caller.  */
611     }
612   else if (so->abfd == NULL)
613     {
614       /* We've already warned about this library, when trying to open
615          it.  */
616     }
617   else
618     {
619       volatile struct gdb_exception e;
620
621       flags |= current_inferior ()->symfile_flags;
622
623       TRY_CATCH (e, RETURN_MASK_ERROR)
624         {
625           struct section_addr_info *sap;
626
627           /* Have we already loaded this shared object?  */
628           ALL_OBJFILES (so->objfile)
629             {
630               if (filename_cmp (objfile_name (so->objfile), so->so_name) == 0
631                   && so->objfile->addr_low == so->addr_low)
632                 break;
633             }
634           if (so->objfile != NULL)
635             break;
636
637           sap = build_section_addr_info_from_section_table (so->sections,
638                                                             so->sections_end);
639           so->objfile = symbol_file_add_from_bfd (so->abfd, so->so_name,
640                                                   flags, sap, OBJF_SHARED,
641                                                   NULL);
642           so->objfile->addr_low = so->addr_low;
643           free_section_addr_info (sap);
644         }
645
646       if (e.reason < 0)
647         exception_fprintf (gdb_stderr, e, _("Error while reading shared"
648                                             " library symbols for %s:\n"),
649                            so->so_name);
650       else
651         {
652           if (print_symbol_loading_p (from_tty, 0, 1))
653             printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
654           so->symbols_loaded = 1;
655         }
656       return 1;
657     }
658
659   return 0;
660 }
661
662 /* Return 1 if KNOWN->objfile is used by any other so_list object in the
663    SO_LIST_HEAD list.  Return 0 otherwise.  */
664
665 static int
666 solib_used (const struct so_list *const known)
667 {
668   const struct so_list *pivot;
669
670   for (pivot = so_list_head; pivot != NULL; pivot = pivot->next)
671     if (pivot != known && pivot->objfile == known->objfile)
672       return 1;
673   return 0;
674 }
675
676 /* Synchronize GDB's shared object list with inferior's.
677
678    Extract the list of currently loaded shared objects from the
679    inferior, and compare it with the list of shared objects currently
680    in GDB's so_list_head list.  Edit so_list_head to bring it in sync
681    with the inferior's new list.
682
683    If we notice that the inferior has unloaded some shared objects,
684    free any symbolic info GDB had read about those shared objects.
685
686    Don't load symbolic info for any new shared objects; just add them
687    to the list, and leave their symbols_loaded flag clear.
688
689    If FROM_TTY is non-null, feel free to print messages about what
690    we're doing.
691
692    If TARGET is non-null, add the sections of all new shared objects
693    to TARGET's section table.  Note that this doesn't remove any
694    sections for shared objects that have been unloaded, and it
695    doesn't check to see if the new shared objects are already present in
696    the section table.  But we only use this for core files and
697    processes we've just attached to, so that's okay.  */
698
699 static void
700 update_solib_list (int from_tty, struct target_ops *target)
701 {
702   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
703   struct so_list *inferior = ops->current_sos();
704   struct so_list *gdb, **gdb_link;
705
706   /* We can reach here due to changing solib-search-path or the
707      sysroot, before having any inferior.  */
708   if (target_has_execution && !ptid_equal (inferior_ptid, null_ptid))
709     {
710       struct inferior *inf = current_inferior ();
711
712       /* If we are attaching to a running process for which we
713          have not opened a symbol file, we may be able to get its
714          symbols now!  */
715       if (inf->attach_flag && symfile_objfile == NULL)
716         catch_errors (ops->open_symbol_file_object, &from_tty,
717                       "Error reading attached process's symbol file.\n",
718                       RETURN_MASK_ALL);
719     }
720
721   /* GDB and the inferior's dynamic linker each maintain their own
722      list of currently loaded shared objects; we want to bring the
723      former in sync with the latter.  Scan both lists, seeing which
724      shared objects appear where.  There are three cases:
725
726      - A shared object appears on both lists.  This means that GDB
727      knows about it already, and it's still loaded in the inferior.
728      Nothing needs to happen.
729
730      - A shared object appears only on GDB's list.  This means that
731      the inferior has unloaded it.  We should remove the shared
732      object from GDB's tables.
733
734      - A shared object appears only on the inferior's list.  This
735      means that it's just been loaded.  We should add it to GDB's
736      tables.
737
738      So we walk GDB's list, checking each entry to see if it appears
739      in the inferior's list too.  If it does, no action is needed, and
740      we remove it from the inferior's list.  If it doesn't, the
741      inferior has unloaded it, and we remove it from GDB's list.  By
742      the time we're done walking GDB's list, the inferior's list
743      contains only the new shared objects, which we then add.  */
744
745   gdb = so_list_head;
746   gdb_link = &so_list_head;
747   while (gdb)
748     {
749       struct so_list *i = inferior;
750       struct so_list **i_link = &inferior;
751
752       /* Check to see whether the shared object *gdb also appears in
753          the inferior's current list.  */
754       while (i)
755         {
756           if (ops->same)
757             {
758               if (ops->same (gdb, i))
759                 break;
760             }
761           else
762             {
763               if (! filename_cmp (gdb->so_original_name, i->so_original_name))
764                 break;        
765             }
766
767           i_link = &i->next;
768           i = *i_link;
769         }
770
771       /* If the shared object appears on the inferior's list too, then
772          it's still loaded, so we don't need to do anything.  Delete
773          it from the inferior's list, and leave it on GDB's list.  */
774       if (i)
775         {
776           *i_link = i->next;
777           free_so (i);
778           gdb_link = &gdb->next;
779           gdb = *gdb_link;
780         }
781
782       /* If it's not on the inferior's list, remove it from GDB's tables.  */
783       else
784         {
785           /* Notify any observer that the shared object has been
786              unloaded before we remove it from GDB's tables.  */
787           observer_notify_solib_unloaded (gdb);
788
789           VEC_safe_push (char_ptr, current_program_space->deleted_solibs,
790                          xstrdup (gdb->so_name));
791
792           *gdb_link = gdb->next;
793
794           /* Unless the user loaded it explicitly, free SO's objfile.  */
795           if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED)
796               && !solib_used (gdb))
797             free_objfile (gdb->objfile);
798
799           /* Some targets' section tables might be referring to
800              sections from so->abfd; remove them.  */
801           remove_target_sections (gdb);
802
803           free_so (gdb);
804           gdb = *gdb_link;
805         }
806     }
807
808   /* Now the inferior's list contains only shared objects that don't
809      appear in GDB's list --- those that are newly loaded.  Add them
810      to GDB's shared object list.  */
811   if (inferior)
812     {
813       int not_found = 0;
814       const char *not_found_filename = NULL;
815
816       struct so_list *i;
817
818       /* Add the new shared objects to GDB's list.  */
819       *gdb_link = inferior;
820
821       /* Fill in the rest of each of the `struct so_list' nodes.  */
822       for (i = inferior; i; i = i->next)
823         {
824           volatile struct gdb_exception e;
825
826           i->pspace = current_program_space;
827           VEC_safe_push (so_list_ptr, current_program_space->added_solibs, i);
828
829           TRY_CATCH (e, RETURN_MASK_ERROR)
830             {
831               /* Fill in the rest of the `struct so_list' node.  */
832               if (!solib_map_sections (i))
833                 {
834                   not_found++;
835                   if (not_found_filename == NULL)
836                     not_found_filename = i->so_original_name;
837                 }
838             }
839
840           if (e.reason < 0)
841             exception_fprintf (gdb_stderr, e,
842                                _("Error while mapping shared "
843                                  "library sections:\n"));
844
845           /* Notify any observer that the shared object has been
846              loaded now that we've added it to GDB's tables.  */
847           observer_notify_solib_loaded (i);
848         }
849
850       /* If a library was not found, issue an appropriate warning
851          message.  We have to use a single call to warning in case the
852          front end does something special with warnings, e.g., pop up
853          a dialog box.  It Would Be Nice if we could get a "warning: "
854          prefix on each line in the CLI front end, though - it doesn't
855          stand out well.  */
856
857       if (not_found == 1)
858         warning (_("Could not load shared library symbols for %s.\n"
859                    "Do you need \"set solib-search-path\" "
860                    "or \"set sysroot\"?"),
861                  not_found_filename);
862       else if (not_found > 1)
863         warning (_("\
864 Could not load shared library symbols for %d libraries, e.g. %s.\n\
865 Use the \"info sharedlibrary\" command to see the complete listing.\n\
866 Do you need \"set solib-search-path\" or \"set sysroot\"?"),
867                  not_found, not_found_filename);
868     }
869 }
870
871
872 /* Return non-zero if NAME is the libpthread shared library.
873
874    Uses a fairly simplistic heuristic approach where we check
875    the file name against "/libpthread".  This can lead to false
876    positives, but this should be good enough in practice.  */
877
878 int
879 libpthread_name_p (const char *name)
880 {
881   return (strstr (name, "/libpthread") != NULL);
882 }
883
884 /* Return non-zero if SO is the libpthread shared library.  */
885
886 static int
887 libpthread_solib_p (struct so_list *so)
888 {
889   return libpthread_name_p (so->so_name);
890 }
891
892 /* Read in symbolic information for any shared objects whose names
893    match PATTERN.  (If we've already read a shared object's symbol
894    info, leave it alone.)  If PATTERN is zero, read them all.
895
896    If READSYMS is 0, defer reading symbolic information until later
897    but still do any needed low level processing.
898
899    FROM_TTY and TARGET are as described for update_solib_list, above.  */
900
901 void
902 solib_add (const char *pattern, int from_tty,
903            struct target_ops *target, int readsyms)
904 {
905   struct so_list *gdb;
906
907   if (print_symbol_loading_p (from_tty, 0, 0))
908     {
909       if (pattern != NULL)
910         {
911           printf_unfiltered (_("Loading symbols for shared libraries: %s\n"),
912                              pattern);
913         }
914       else
915         printf_unfiltered (_("Loading symbols for shared libraries.\n"));
916     }
917
918   current_program_space->solib_add_generation++;
919
920   if (pattern)
921     {
922       char *re_err = re_comp (pattern);
923
924       if (re_err)
925         error (_("Invalid regexp: %s"), re_err);
926     }
927
928   update_solib_list (from_tty, target);
929
930   /* Walk the list of currently loaded shared libraries, and read
931      symbols for any that match the pattern --- or any whose symbols
932      aren't already loaded, if no pattern was given.  */
933   {
934     int any_matches = 0;
935     int loaded_any_symbols = 0;
936     const int flags =
937         SYMFILE_DEFER_BP_RESET | (from_tty ? SYMFILE_VERBOSE : 0);
938
939     for (gdb = so_list_head; gdb; gdb = gdb->next)
940       if (! pattern || re_exec (gdb->so_name))
941         {
942           /* Normally, we would read the symbols from that library
943              only if READSYMS is set.  However, we're making a small
944              exception for the pthread library, because we sometimes
945              need the library symbols to be loaded in order to provide
946              thread support (x86-linux for instance).  */
947           const int add_this_solib =
948             (readsyms || libpthread_solib_p (gdb));
949
950           any_matches = 1;
951           if (add_this_solib)
952             {
953               if (gdb->symbols_loaded)
954                 {
955                   /* If no pattern was given, be quiet for shared
956                      libraries we have already loaded.  */
957                   if (pattern && (from_tty || info_verbose))
958                     printf_unfiltered (_("Symbols already loaded for %s\n"),
959                                        gdb->so_name);
960                 }
961               else if (solib_read_symbols (gdb, flags))
962                 loaded_any_symbols = 1;
963             }
964         }
965
966     if (loaded_any_symbols)
967       breakpoint_re_set ();
968
969     if (from_tty && pattern && ! any_matches)
970       printf_unfiltered
971         ("No loaded shared libraries match the pattern `%s'.\n", pattern);
972
973     if (loaded_any_symbols)
974       {
975         const struct target_so_ops *ops = solib_ops (target_gdbarch ());
976
977         /* Getting new symbols may change our opinion about what is
978            frameless.  */
979         reinit_frame_cache ();
980
981         ops->special_symbol_handling ();
982       }
983   }
984 }
985
986 /* Implement the "info sharedlibrary" command.  Walk through the
987    shared library list and print information about each attached
988    library matching PATTERN.  If PATTERN is elided, print them
989    all.  */
990
991 static void
992 info_sharedlibrary_command (char *pattern, int from_tty)
993 {
994   struct so_list *so = NULL;    /* link map state variable */
995   int so_missing_debug_info = 0;
996   int addr_width;
997   int nr_libs;
998   struct cleanup *table_cleanup;
999   struct gdbarch *gdbarch = target_gdbarch ();
1000   struct ui_out *uiout = current_uiout;
1001
1002   if (pattern)
1003     {
1004       char *re_err = re_comp (pattern);
1005
1006       if (re_err)
1007         error (_("Invalid regexp: %s"), re_err);
1008     }
1009
1010   /* "0x", a little whitespace, and two hex digits per byte of pointers.  */
1011   addr_width = 4 + (gdbarch_ptr_bit (gdbarch) / 4);
1012
1013   update_solib_list (from_tty, 0);
1014
1015   /* make_cleanup_ui_out_table_begin_end needs to know the number of
1016      rows, so we need to make two passes over the libs.  */
1017
1018   for (nr_libs = 0, so = so_list_head; so; so = so->next)
1019     {
1020       if (so->so_name[0])
1021         {
1022           if (pattern && ! re_exec (so->so_name))
1023             continue;
1024           ++nr_libs;
1025         }
1026     }
1027
1028   table_cleanup =
1029     make_cleanup_ui_out_table_begin_end (uiout, 4, nr_libs,
1030                                          "SharedLibraryTable");
1031
1032   /* The "- 1" is because ui_out adds one space between columns.  */
1033   ui_out_table_header (uiout, addr_width - 1, ui_left, "from", "From");
1034   ui_out_table_header (uiout, addr_width - 1, ui_left, "to", "To");
1035   ui_out_table_header (uiout, 12 - 1, ui_left, "syms-read", "Syms Read");
1036   ui_out_table_header (uiout, 0, ui_noalign,
1037                        "name", "Shared Object Library");
1038
1039   ui_out_table_body (uiout);
1040
1041   for (so = so_list_head; so; so = so->next)
1042     {
1043       struct cleanup *lib_cleanup;
1044
1045       if (! so->so_name[0])
1046         continue;
1047       if (pattern && ! re_exec (so->so_name))
1048         continue;
1049
1050       lib_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "lib");
1051
1052       if (so->addr_high != 0)
1053         {
1054           ui_out_field_core_addr (uiout, "from", gdbarch, so->addr_low);
1055           ui_out_field_core_addr (uiout, "to", gdbarch, so->addr_high);
1056         }
1057       else
1058         {
1059           ui_out_field_skip (uiout, "from");
1060           ui_out_field_skip (uiout, "to");
1061         }
1062
1063       if (! ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
1064           && so->symbols_loaded
1065           && !objfile_has_symbols (so->objfile))
1066         {
1067           so_missing_debug_info = 1;
1068           ui_out_field_string (uiout, "syms-read", "Yes (*)");
1069         }
1070       else
1071         ui_out_field_string (uiout, "syms-read", 
1072                              so->symbols_loaded ? "Yes" : "No");
1073
1074       ui_out_field_string (uiout, "name", so->so_name);
1075
1076       ui_out_text (uiout, "\n");
1077
1078       do_cleanups (lib_cleanup);
1079     }
1080
1081   do_cleanups (table_cleanup);
1082
1083   if (nr_libs == 0)
1084     {
1085       if (pattern)
1086         ui_out_message (uiout, 0,
1087                         _("No shared libraries matched.\n"));
1088       else
1089         ui_out_message (uiout, 0,
1090                         _("No shared libraries loaded at this time.\n"));
1091     }
1092   else
1093     {
1094       if (so_missing_debug_info)
1095         ui_out_message (uiout, 0,
1096                         _("(*): Shared library is missing "
1097                           "debugging information.\n"));
1098     }
1099 }
1100
1101 /* Return 1 if ADDRESS lies within SOLIB.  */
1102
1103 int
1104 solib_contains_address_p (const struct so_list *const solib,
1105                           CORE_ADDR address)
1106 {
1107   struct target_section *p;
1108
1109   for (p = solib->sections; p < solib->sections_end; p++)
1110     if (p->addr <= address && address < p->endaddr)
1111       return 1;
1112
1113   return 0;
1114 }
1115
1116 /* If ADDRESS is in a shared lib in program space PSPACE, return its
1117    name.
1118
1119    Provides a hook for other gdb routines to discover whether or not a
1120    particular address is within the mapped address space of a shared
1121    library.
1122
1123    For example, this routine is called at one point to disable
1124    breakpoints which are in shared libraries that are not currently
1125    mapped in.  */
1126
1127 char *
1128 solib_name_from_address (struct program_space *pspace, CORE_ADDR address)
1129 {
1130   struct so_list *so = NULL;
1131
1132   for (so = pspace->so_list; so; so = so->next)
1133     if (solib_contains_address_p (so, address))
1134       return (so->so_name);
1135
1136   return (0);
1137 }
1138
1139 /* Return whether the data starting at VADDR, size SIZE, must be kept
1140    in a core file for shared libraries loaded before "gcore" is used
1141    to be handled correctly when the core file is loaded.  This only
1142    applies when the section would otherwise not be kept in the core
1143    file (in particular, for readonly sections).  */
1144
1145 int
1146 solib_keep_data_in_core (CORE_ADDR vaddr, unsigned long size)
1147 {
1148   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1149
1150   if (ops->keep_data_in_core)
1151     return ops->keep_data_in_core (vaddr, size);
1152   else
1153     return 0;
1154 }
1155
1156 /* Called by free_all_symtabs */
1157
1158 void
1159 clear_solib (void)
1160 {
1161   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1162
1163   /* This function is expected to handle ELF shared libraries.  It is
1164      also used on Solaris, which can run either ELF or a.out binaries
1165      (for compatibility with SunOS 4), both of which can use shared
1166      libraries.  So we don't know whether we have an ELF executable or
1167      an a.out executable until the user chooses an executable file.
1168
1169      ELF shared libraries don't get mapped into the address space
1170      until after the program starts, so we'd better not try to insert
1171      breakpoints in them immediately.  We have to wait until the
1172      dynamic linker has loaded them; we'll hit a bp_shlib_event
1173      breakpoint (look for calls to create_solib_event_breakpoint) when
1174      it's ready.
1175
1176      SunOS shared libraries seem to be different --- they're present
1177      as soon as the process begins execution, so there's no need to
1178      put off inserting breakpoints.  There's also nowhere to put a
1179      bp_shlib_event breakpoint, so if we put it off, we'll never get
1180      around to it.
1181
1182      So: disable breakpoints only if we're using ELF shared libs.  */
1183   if (exec_bfd != NULL
1184       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
1185     disable_breakpoints_in_shlibs ();
1186
1187   while (so_list_head)
1188     {
1189       struct so_list *so = so_list_head;
1190
1191       so_list_head = so->next;
1192       observer_notify_solib_unloaded (so);
1193       remove_target_sections (so);
1194       free_so (so);
1195     }
1196
1197   ops->clear_solib ();
1198 }
1199
1200 /* Shared library startup support.  When GDB starts up the inferior,
1201    it nurses it along (through the shell) until it is ready to execute
1202    its first instruction.  At this point, this function gets
1203    called.  */
1204
1205 void
1206 solib_create_inferior_hook (int from_tty)
1207 {
1208   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1209
1210   ops->solib_create_inferior_hook (from_tty);
1211 }
1212
1213 /* Check to see if an address is in the dynamic loader's dynamic
1214    symbol resolution code.  Return 1 if so, 0 otherwise.  */
1215
1216 int
1217 in_solib_dynsym_resolve_code (CORE_ADDR pc)
1218 {
1219   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1220
1221   return ops->in_dynsym_resolve_code (pc);
1222 }
1223
1224 /* Implements the "sharedlibrary" command.  */
1225
1226 static void
1227 sharedlibrary_command (char *args, int from_tty)
1228 {
1229   dont_repeat ();
1230   solib_add (args, from_tty, (struct target_ops *) 0, 1);
1231 }
1232
1233 /* Implements the command "nosharedlibrary", which discards symbols
1234    that have been auto-loaded from shared libraries.  Symbols from
1235    shared libraries that were added by explicit request of the user
1236    are not discarded.  Also called from remote.c.  */
1237
1238 void
1239 no_shared_libraries (char *ignored, int from_tty)
1240 {
1241   /* The order of the two routines below is important: clear_solib notifies
1242      the solib_unloaded observers, and some of these observers might need
1243      access to their associated objfiles.  Therefore, we can not purge the
1244      solibs' objfiles before clear_solib has been called.  */
1245
1246   clear_solib ();
1247   objfile_purge_solibs ();
1248 }
1249
1250 /* See solib.h.  */
1251
1252 void
1253 update_solib_breakpoints (void)
1254 {
1255   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1256
1257   if (ops->update_breakpoints != NULL)
1258     ops->update_breakpoints ();
1259 }
1260
1261 /* See solib.h.  */
1262
1263 void
1264 handle_solib_event (void)
1265 {
1266   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1267
1268   if (ops->handle_event != NULL)
1269     ops->handle_event ();
1270
1271   clear_program_space_solib_cache (current_inferior ()->pspace);
1272
1273   /* Check for any newly added shared libraries if we're supposed to
1274      be adding them automatically.  Switch terminal for any messages
1275      produced by breakpoint_re_set.  */
1276   target_terminal_ours_for_output ();
1277   solib_add (NULL, 0, &current_target, auto_solib_add);
1278   target_terminal_inferior ();
1279 }
1280
1281 /* Reload shared libraries, but avoid reloading the same symbol file
1282    we already have loaded.  */
1283
1284 static void
1285 reload_shared_libraries_1 (int from_tty)
1286 {
1287   struct so_list *so;
1288   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
1289
1290   if (print_symbol_loading_p (from_tty, 0, 0))
1291     printf_unfiltered (_("Loading symbols for shared libraries.\n"));
1292
1293   for (so = so_list_head; so != NULL; so = so->next)
1294     {
1295       char *filename, *found_pathname = NULL;
1296       bfd *abfd;
1297       int was_loaded = so->symbols_loaded;
1298       const int flags =
1299         SYMFILE_DEFER_BP_RESET | (from_tty ? SYMFILE_VERBOSE : 0);
1300
1301       filename = tilde_expand (so->so_original_name);
1302       make_cleanup (xfree, filename);
1303       abfd = solib_bfd_open (filename);
1304       if (abfd != NULL)
1305         {
1306           found_pathname = xstrdup (bfd_get_filename (abfd));
1307           make_cleanup (xfree, found_pathname);
1308           gdb_bfd_unref (abfd);
1309         }
1310
1311       /* If this shared library is no longer associated with its previous
1312          symbol file, close that.  */
1313       if ((found_pathname == NULL && was_loaded)
1314           || (found_pathname != NULL
1315               && filename_cmp (found_pathname, so->so_name) != 0))
1316         {
1317           if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED)
1318               && !solib_used (so))
1319             free_objfile (so->objfile);
1320           remove_target_sections (so);
1321           clear_so (so);
1322         }
1323
1324       /* If this shared library is now associated with a new symbol
1325          file, open it.  */
1326       if (found_pathname != NULL
1327           && (!was_loaded
1328               || filename_cmp (found_pathname, so->so_name) != 0))
1329         {
1330           volatile struct gdb_exception e;
1331
1332           TRY_CATCH (e, RETURN_MASK_ERROR)
1333             solib_map_sections (so);
1334
1335           if (e.reason < 0)
1336             exception_fprintf (gdb_stderr, e,
1337                                _("Error while mapping "
1338                                  "shared library sections:\n"));
1339           else if (auto_solib_add || was_loaded || libpthread_solib_p (so))
1340             solib_read_symbols (so, flags);
1341         }
1342     }
1343
1344   do_cleanups (old_chain);
1345 }
1346
1347 static void
1348 reload_shared_libraries (char *ignored, int from_tty,
1349                          struct cmd_list_element *e)
1350 {
1351   const struct target_so_ops *ops;
1352
1353   reload_shared_libraries_1 (from_tty);
1354
1355   ops = solib_ops (target_gdbarch ());
1356
1357   /* Creating inferior hooks here has two purposes.  First, if we reload 
1358      shared libraries then the address of solib breakpoint we've computed
1359      previously might be no longer valid.  For example, if we forgot to set
1360      solib-absolute-prefix and are setting it right now, then the previous
1361      breakpoint address is plain wrong.  Second, installing solib hooks
1362      also implicitly figures were ld.so is and loads symbols for it.
1363      Absent this call, if we've just connected to a target and set 
1364      solib-absolute-prefix or solib-search-path, we'll lose all information
1365      about ld.so.  */
1366   if (target_has_execution)
1367     {
1368       /* Reset or free private data structures not associated with
1369          so_list entries.  */
1370       ops->clear_solib ();
1371
1372       /* Remove any previous solib event breakpoint.  This is usually
1373          done in common code, at breakpoint_init_inferior time, but
1374          we're not really starting up the inferior here.  */
1375       remove_solib_event_breakpoints ();
1376
1377       solib_create_inferior_hook (from_tty);
1378     }
1379
1380   /* Sometimes the platform-specific hook loads initial shared
1381      libraries, and sometimes it doesn't.  If it doesn't FROM_TTY will be
1382      incorrectly 0 but such solib targets should be fixed anyway.  If we
1383      made all the inferior hook methods consistent, this call could be
1384      removed.  Call it only after the solib target has been initialized by
1385      solib_create_inferior_hook.  */
1386
1387   solib_add (NULL, 0, NULL, auto_solib_add);
1388
1389   breakpoint_re_set ();
1390
1391   /* We may have loaded or unloaded debug info for some (or all)
1392      shared libraries.  However, frames may still reference them.  For
1393      example, a frame's unwinder might still point at DWARF FDE
1394      structures that are now freed.  Also, getting new symbols may
1395      change our opinion about what is frameless.  */
1396   reinit_frame_cache ();
1397
1398   ops->special_symbol_handling ();
1399 }
1400
1401 static void
1402 show_auto_solib_add (struct ui_file *file, int from_tty,
1403                      struct cmd_list_element *c, const char *value)
1404 {
1405   fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"),
1406                     value);
1407 }
1408
1409
1410 /* Handler for library-specific lookup of global symbol NAME in OBJFILE.  Call
1411    the library-specific handler if it is installed for the current target.  */
1412
1413 struct symbol *
1414 solib_global_lookup (const struct objfile *objfile,
1415                      const char *name,
1416                      const domain_enum domain)
1417 {
1418   const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1419
1420   if (ops->lookup_lib_global_symbol != NULL)
1421     return ops->lookup_lib_global_symbol (objfile, name, domain);
1422   return NULL;
1423 }
1424
1425 /* Lookup the value for a specific symbol from dynamic symbol table.  Look
1426    up symbol from ABFD.  MATCH_SYM is a callback function to determine
1427    whether to pick up a symbol.  DATA is the input of this callback
1428    function.  Return NULL if symbol is not found.  */
1429
1430 CORE_ADDR
1431 gdb_bfd_lookup_symbol_from_symtab (bfd *abfd,
1432                                    int (*match_sym) (asymbol *, void *),
1433                                    void *data)
1434 {
1435   long storage_needed = bfd_get_symtab_upper_bound (abfd);
1436   CORE_ADDR symaddr = 0;
1437
1438   if (storage_needed > 0)
1439     {
1440       unsigned int i;
1441
1442       asymbol **symbol_table = (asymbol **) xmalloc (storage_needed);
1443       struct cleanup *back_to = make_cleanup (xfree, symbol_table);
1444       unsigned int number_of_symbols =
1445         bfd_canonicalize_symtab (abfd, symbol_table);
1446
1447       for (i = 0; i < number_of_symbols; i++)
1448         {
1449           asymbol *sym  = *symbol_table++;
1450
1451           if (match_sym (sym, data))
1452             {
1453               /* BFD symbols are section relative.  */
1454               symaddr = sym->value + sym->section->vma;
1455               break;
1456             }
1457         }
1458       do_cleanups (back_to);
1459     }
1460
1461   return symaddr;
1462 }
1463
1464 /* Lookup the value for a specific symbol from symbol table.  Look up symbol
1465    from ABFD.  MATCH_SYM is a callback function to determine whether to pick
1466    up a symbol.  DATA is the input of this callback function.  Return NULL
1467    if symbol is not found.  */
1468
1469 static CORE_ADDR
1470 bfd_lookup_symbol_from_dyn_symtab (bfd *abfd,
1471                                    int (*match_sym) (asymbol *, void *),
1472                                    void *data)
1473 {
1474   long storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
1475   CORE_ADDR symaddr = 0;
1476
1477   if (storage_needed > 0)
1478     {
1479       unsigned int i;
1480       asymbol **symbol_table = (asymbol **) xmalloc (storage_needed);
1481       struct cleanup *back_to = make_cleanup (xfree, symbol_table);
1482       unsigned int number_of_symbols =
1483         bfd_canonicalize_dynamic_symtab (abfd, symbol_table);
1484
1485       for (i = 0; i < number_of_symbols; i++)
1486         {
1487           asymbol *sym = *symbol_table++;
1488
1489           if (match_sym (sym, data))
1490             {
1491               /* BFD symbols are section relative.  */
1492               symaddr = sym->value + sym->section->vma;
1493               break;
1494             }
1495         }
1496       do_cleanups (back_to);
1497     }
1498   return symaddr;
1499 }
1500
1501 /* Lookup the value for a specific symbol from symbol table and dynamic
1502    symbol table.  Look up symbol from ABFD.  MATCH_SYM is a callback
1503    function to determine whether to pick up a symbol.  DATA is the
1504    input of this callback function.  Return NULL if symbol is not
1505    found.  */
1506
1507 CORE_ADDR
1508 gdb_bfd_lookup_symbol (bfd *abfd,
1509                        int (*match_sym) (asymbol *, void *),
1510                        void *data)
1511 {
1512   CORE_ADDR symaddr = gdb_bfd_lookup_symbol_from_symtab (abfd, match_sym, data);
1513
1514   /* On FreeBSD, the dynamic linker is stripped by default.  So we'll
1515      have to check the dynamic string table too.  */
1516   if (symaddr == 0)
1517     symaddr = bfd_lookup_symbol_from_dyn_symtab (abfd, match_sym, data);
1518
1519   return symaddr;
1520 }
1521
1522 /* SO_LIST_HEAD may contain user-loaded object files that can be removed
1523    out-of-band by the user.  So upon notification of free_objfile remove
1524    all references to any user-loaded file that is about to be freed.  */
1525
1526 static void
1527 remove_user_added_objfile (struct objfile *objfile)
1528 {
1529   struct so_list *so;
1530
1531   if (objfile != 0 && objfile->flags & OBJF_USERLOADED)
1532     {
1533       for (so = so_list_head; so != NULL; so = so->next)
1534         if (so->objfile == objfile)
1535           so->objfile = NULL;
1536     }
1537 }
1538
1539 extern initialize_file_ftype _initialize_solib; /* -Wmissing-prototypes */
1540
1541 void
1542 _initialize_solib (void)
1543 {
1544   solib_data = gdbarch_data_register_pre_init (solib_init);
1545
1546   observer_attach_free_objfile (remove_user_added_objfile);
1547
1548   add_com ("sharedlibrary", class_files, sharedlibrary_command,
1549            _("Load shared object library symbols for files matching REGEXP."));
1550   add_info ("sharedlibrary", info_sharedlibrary_command,
1551             _("Status of loaded shared object libraries."));
1552   add_com ("nosharedlibrary", class_files, no_shared_libraries,
1553            _("Unload all shared object library symbols."));
1554
1555   add_setshow_boolean_cmd ("auto-solib-add", class_support,
1556                            &auto_solib_add, _("\
1557 Set autoloading of shared library symbols."), _("\
1558 Show autoloading of shared library symbols."), _("\
1559 If \"on\", symbols from all shared object libraries will be loaded\n\
1560 automatically when the inferior begins execution, when the dynamic linker\n\
1561 informs gdb that a new library has been loaded, or when attaching to the\n\
1562 inferior.  Otherwise, symbols must be loaded manually, using \
1563 `sharedlibrary'."),
1564                            NULL,
1565                            show_auto_solib_add,
1566                            &setlist, &showlist);
1567
1568   add_setshow_filename_cmd ("sysroot", class_support,
1569                             &gdb_sysroot, _("\
1570 Set an alternate system root."), _("\
1571 Show the current system root."), _("\
1572 The system root is used to load absolute shared library symbol files.\n\
1573 For other (relative) files, you can add directories using\n\
1574 `set solib-search-path'."),
1575                             reload_shared_libraries,
1576                             NULL,
1577                             &setlist, &showlist);
1578
1579   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1580                  &setlist);
1581   add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1582                  &showlist);
1583
1584   add_setshow_optional_filename_cmd ("solib-search-path", class_support,
1585                                      &solib_search_path, _("\
1586 Set the search path for loading non-absolute shared library symbol files."),
1587                                      _("\
1588 Show the search path for loading non-absolute shared library symbol files."),
1589                                      _("\
1590 This takes precedence over the environment variables \
1591 PATH and LD_LIBRARY_PATH."),
1592                                      reload_shared_libraries,
1593                                      show_solib_search_path,
1594                                      &setlist, &showlist);
1595 }