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