xref: /openbsd-src/gnu/usr.bin/binutils/gdb/solib.c (revision 850e275390052b330d93020bf619a739a3c277ac)
1 /* Handle shared libraries for GDB, the GNU Debugger.
2 
3    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5 
6    This file is part of GDB.
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22 
23 #include "defs.h"
24 
25 #include <sys/types.h>
26 #include <fcntl.h>
27 #include "gdb_string.h"
28 #include "symtab.h"
29 #include "bfd.h"
30 #include "symfile.h"
31 #include "objfiles.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 
48 /* external data declarations */
49 
50 /* FIXME: gdbarch needs to control this variable */
51 struct target_so_ops *current_target_so_ops;
52 
53 /* local data declarations */
54 
55 static struct so_list *so_list_head;	/* List of known shared objects */
56 
57 static int solib_cleanup_queued = 0;	/* make_run_cleanup called */
58 
59 /* Local function prototypes */
60 
61 static void do_clear_solib (void *);
62 
63 /* If non-zero, this is a prefix that will be added to the front of the name
64    shared libraries with an absolute filename for loading.  */
65 static char *solib_absolute_prefix = NULL;
66 
67 /* If non-empty, this is a search path for loading non-absolute shared library
68    symbol files.  This takes precedence over the environment variables PATH
69    and LD_LIBRARY_PATH.  */
70 static char *solib_search_path = NULL;
71 
72 /*
73 
74    GLOBAL FUNCTION
75 
76    solib_open -- Find a shared library file and open it.
77 
78    SYNOPSIS
79 
80    int solib_open (char *in_patname, char **found_pathname);
81 
82    DESCRIPTION
83 
84    Global variable SOLIB_ABSOLUTE_PREFIX is used as a prefix directory
85    to search for shared libraries if they have an absolute path.
86 
87    Global variable SOLIB_SEARCH_PATH is used as a prefix directory
88    (or set of directories, as in LD_LIBRARY_PATH) to search for all
89    shared libraries if not found in SOLIB_ABSOLUTE_PREFIX.
90 
91    Search algorithm:
92    * If there is a solib_absolute_prefix and path is absolute:
93    *   Search for solib_absolute_prefix/path.
94    * else
95    *   Look for it literally (unmodified).
96    * Look in SOLIB_SEARCH_PATH.
97    * If available, use target defined search function.
98    * If solib_absolute_prefix is NOT set, perform the following two searches:
99    *   Look in inferior's $PATH.
100    *   Look in inferior's $LD_LIBRARY_PATH.
101    *
102    * The last check avoids doing this search when targetting remote
103    * machines since solib_absolute_prefix will almost always be set.
104 
105    RETURNS
106 
107    file handle for opened solib, or -1 for failure.  */
108 
109 int
110 solib_open (char *in_pathname, char **found_pathname)
111 {
112   int found_file = -1;
113   char *temp_pathname = NULL;
114   char *p = in_pathname;
115 
116   while (*p && !IS_DIR_SEPARATOR (*p))
117     p++;
118 
119   if (*p)
120     {
121       if (! IS_ABSOLUTE_PATH (in_pathname) || solib_absolute_prefix == NULL)
122         temp_pathname = in_pathname;
123       else
124 	{
125 	  int prefix_len = strlen (solib_absolute_prefix);
126 
127 	  /* Remove trailing slashes from absolute prefix.  */
128 	  while (prefix_len > 0
129 		 && IS_DIR_SEPARATOR (solib_absolute_prefix[prefix_len - 1]))
130 	    prefix_len--;
131 
132 	  /* Cat the prefixed pathname together.  */
133 	  temp_pathname = alloca (prefix_len + strlen (in_pathname) + 1);
134 	  strncpy (temp_pathname, solib_absolute_prefix, prefix_len);
135 	  temp_pathname[prefix_len] = '\0';
136 	  strcat (temp_pathname, in_pathname);
137 	}
138 
139       /* Now see if we can open it.  */
140       found_file = open (temp_pathname, O_RDONLY, 0);
141     }
142 
143   /* If the search in solib_absolute_prefix failed, and the path name is
144      absolute at this point, make it relative.  (openp will try and open the
145      file according to its absolute path otherwise, which is not what we want.)
146      Affects subsequent searches for this solib.  */
147   if (found_file < 0 && IS_ABSOLUTE_PATH (in_pathname))
148     {
149       /* First, get rid of any drive letters etc.  */
150       while (!IS_DIR_SEPARATOR (*in_pathname))
151         in_pathname++;
152 
153       /* Next, get rid of all leading dir separators.  */
154       while (IS_DIR_SEPARATOR (*in_pathname))
155         in_pathname++;
156     }
157 
158   /* If not found, search the solib_search_path (if any).  */
159   if (found_file < 0 && solib_search_path != NULL)
160     found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST,
161 			in_pathname, O_RDONLY, 0, &temp_pathname);
162 
163   /* If not found, next search the solib_search_path (if any) for the basename
164      only (ignoring the path).  This is to allow reading solibs from a path
165      that differs from the opened path.  */
166   if (found_file < 0 && solib_search_path != NULL)
167     found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST,
168                         lbasename (in_pathname), O_RDONLY, 0,
169                         &temp_pathname);
170 
171   /* If not found, try to use target supplied solib search method */
172   if (found_file < 0 && TARGET_SO_FIND_AND_OPEN_SOLIB != NULL)
173     found_file = TARGET_SO_FIND_AND_OPEN_SOLIB
174                  (in_pathname, O_RDONLY, &temp_pathname);
175 
176   /* If not found, next search the inferior's $PATH environment variable. */
177   if (found_file < 0 && solib_absolute_prefix == NULL)
178     found_file = openp (get_in_environ (inferior_environ, "PATH"),
179 			OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY, 0,
180 			&temp_pathname);
181 
182   /* If not found, next search the inferior's $LD_LIBRARY_PATH
183      environment variable. */
184   if (found_file < 0 && solib_absolute_prefix == NULL)
185     found_file = openp (get_in_environ (inferior_environ, "LD_LIBRARY_PATH"),
186 			OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY, 0,
187 			&temp_pathname);
188 
189   /* Done.  If not found, tough luck.  Return found_file and
190      (optionally) found_pathname.  */
191   if (found_pathname != NULL && temp_pathname != NULL)
192     *found_pathname = xstrdup (temp_pathname);
193   return found_file;
194 }
195 
196 
197 /*
198 
199    LOCAL FUNCTION
200 
201    solib_map_sections -- open bfd and build sections for shared lib
202 
203    SYNOPSIS
204 
205    static int solib_map_sections (struct so_list *so)
206 
207    DESCRIPTION
208 
209    Given a pointer to one of the shared objects in our list
210    of mapped objects, use the recorded name to open a bfd
211    descriptor for the object, build a section table, and then
212    relocate all the section addresses by the base address at
213    which the shared object was mapped.
214 
215    FIXMES
216 
217    In most (all?) cases the shared object file name recorded in the
218    dynamic linkage tables will be a fully qualified pathname.  For
219    cases where it isn't, do we really mimic the systems search
220    mechanism correctly in the below code (particularly the tilde
221    expansion stuff?).
222  */
223 
224 static int
225 solib_map_sections (void *arg)
226 {
227   struct so_list *so = (struct so_list *) arg;	/* catch_errors bogon */
228   char *filename;
229   char *scratch_pathname;
230   int scratch_chan;
231   struct section_table *p;
232   struct cleanup *old_chain;
233   bfd *abfd;
234 
235   filename = tilde_expand (so->so_name);
236 
237   old_chain = make_cleanup (xfree, filename);
238   scratch_chan = solib_open (filename, &scratch_pathname);
239 
240   if (scratch_chan < 0)
241     {
242       perror_with_name (filename);
243     }
244 
245   /* Leave scratch_pathname allocated.  abfd->name will point to it.  */
246   abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
247   if (!abfd)
248     {
249       close (scratch_chan);
250       error ("Could not open `%s' as an executable file: %s",
251 	     scratch_pathname, bfd_errmsg (bfd_get_error ()));
252     }
253 
254   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
255   so->abfd = abfd;
256   bfd_set_cacheable (abfd, 1);
257 
258   /* copy full path name into so_name, so that later symbol_file_add
259      can find it */
260   if (strlen (scratch_pathname) >= SO_NAME_MAX_PATH_SIZE)
261     error ("Full path name length of shared library exceeds SO_NAME_MAX_PATH_SIZE in so_list structure.");
262   strcpy (so->so_name, scratch_pathname);
263 
264   if (!bfd_check_format (abfd, bfd_object))
265     {
266       error ("\"%s\": not in executable format: %s.",
267 	     scratch_pathname, bfd_errmsg (bfd_get_error ()));
268     }
269   if (build_section_table (abfd, &so->sections, &so->sections_end))
270     {
271       error ("Can't find the file sections in `%s': %s",
272 	     bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
273     }
274 
275   for (p = so->sections; p < so->sections_end; p++)
276     {
277       /* Relocate the section binding addresses as recorded in the shared
278          object's file by the base address to which the object was actually
279          mapped. */
280       TARGET_SO_RELOCATE_SECTION_ADDRESSES (so, p);
281       if (strcmp (p->the_bfd_section->name, ".text") == 0)
282 	{
283 	  so->textsection = p;
284 	}
285     }
286 
287   /* Free the file names, close the file now.  */
288   do_cleanups (old_chain);
289 
290   return (1);
291 }
292 
293 /* LOCAL FUNCTION
294 
295    free_so --- free a `struct so_list' object
296 
297    SYNOPSIS
298 
299    void free_so (struct so_list *so)
300 
301    DESCRIPTION
302 
303    Free the storage associated with the `struct so_list' object SO.
304    If we have opened a BFD for SO, close it.
305 
306    The caller is responsible for removing SO from whatever list it is
307    a member of.  If we have placed SO's sections in some target's
308    section table, the caller is responsible for removing them.
309 
310    This function doesn't mess with objfiles at all.  If there is an
311    objfile associated with SO that needs to be removed, the caller is
312    responsible for taking care of that.  */
313 
314 void
315 free_so (struct so_list *so)
316 {
317   char *bfd_filename = 0;
318 
319   if (so->sections)
320     xfree (so->sections);
321 
322   if (so->abfd)
323     {
324       bfd_filename = bfd_get_filename (so->abfd);
325       if (! bfd_close (so->abfd))
326 	warning ("cannot close \"%s\": %s",
327 		 bfd_filename, bfd_errmsg (bfd_get_error ()));
328     }
329 
330   if (bfd_filename)
331     xfree (bfd_filename);
332 
333   TARGET_SO_FREE_SO (so);
334 
335   xfree (so);
336 }
337 
338 
339 /* Return address of first so_list entry in master shared object list.  */
340 struct so_list *
341 master_so_list (void)
342 {
343   return so_list_head;
344 }
345 
346 
347 /* A small stub to get us past the arg-passing pinhole of catch_errors.  */
348 
349 static int
350 symbol_add_stub (void *arg)
351 {
352   struct so_list *so = (struct so_list *) arg;  /* catch_errs bogon */
353   struct section_addr_info *sap;
354 
355   /* Have we already loaded this shared object?  */
356   ALL_OBJFILES (so->objfile)
357     {
358       if (strcmp (so->objfile->name, so->so_name) == 0)
359 	return 1;
360     }
361 
362   sap = build_section_addr_info_from_section_table (so->sections,
363                                                     so->sections_end);
364 
365   so->objfile = symbol_file_add (so->so_name, so->from_tty,
366 				 sap, 0, OBJF_SHARED);
367   free_section_addr_info (sap);
368 
369   return (1);
370 }
371 
372 /* Read in symbols for shared object SO.  If FROM_TTY is non-zero, be
373    chatty about it.  Return non-zero if any symbols were actually
374    loaded.  */
375 
376 int
377 solib_read_symbols (struct so_list *so, int from_tty)
378 {
379   if (so->symbols_loaded)
380     {
381       if (from_tty)
382 	printf_unfiltered (_("Symbols already loaded for %s\n"), so->so_name);
383     }
384   else
385     {
386       if (catch_errors (symbol_add_stub, so,
387 			"Error while reading shared library symbols:\n",
388 			RETURN_MASK_ALL))
389 	{
390 	  if (from_tty)
391 	    printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
392 	  so->symbols_loaded = 1;
393 	  return 1;
394 	}
395     }
396 
397   return 0;
398 }
399 
400 /* LOCAL FUNCTION
401 
402    update_solib_list --- synchronize GDB's shared object list with inferior's
403 
404    SYNOPSIS
405 
406    void update_solib_list (int from_tty, struct target_ops *TARGET)
407 
408    Extract the list of currently loaded shared objects from the
409    inferior, and compare it with the list of shared objects currently
410    in GDB's so_list_head list.  Edit so_list_head to bring it in sync
411    with the inferior's new list.
412 
413    If we notice that the inferior has unloaded some shared objects,
414    free any symbolic info GDB had read about those shared objects.
415 
416    Don't load symbolic info for any new shared objects; just add them
417    to the list, and leave their symbols_loaded flag clear.
418 
419    If FROM_TTY is non-null, feel free to print messages about what
420    we're doing.
421 
422    If TARGET is non-null, add the sections of all new shared objects
423    to TARGET's section table.  Note that this doesn't remove any
424    sections for shared objects that have been unloaded, and it
425    doesn't check to see if the new shared objects are already present in
426    the section table.  But we only use this for core files and
427    processes we've just attached to, so that's okay.  */
428 
429 static void
430 update_solib_list (int from_tty, struct target_ops *target)
431 {
432   struct so_list *inferior = TARGET_SO_CURRENT_SOS ();
433   struct so_list *gdb, **gdb_link;
434 
435   /* If we are attaching to a running process for which we
436      have not opened a symbol file, we may be able to get its
437      symbols now!  */
438   if (attach_flag &&
439       symfile_objfile == NULL)
440     catch_errors (TARGET_SO_OPEN_SYMBOL_FILE_OBJECT, &from_tty,
441 		  "Error reading attached process's symbol file.\n",
442 		  RETURN_MASK_ALL);
443 
444   /* Since this function might actually add some elements to the
445      so_list_head list, arrange for it to be cleaned up when
446      appropriate.  */
447   if (!solib_cleanup_queued)
448     {
449       make_run_cleanup (do_clear_solib, NULL);
450       solib_cleanup_queued = 1;
451     }
452 
453   /* GDB and the inferior's dynamic linker each maintain their own
454      list of currently loaded shared objects; we want to bring the
455      former in sync with the latter.  Scan both lists, seeing which
456      shared objects appear where.  There are three cases:
457 
458      - A shared object appears on both lists.  This means that GDB
459      knows about it already, and it's still loaded in the inferior.
460      Nothing needs to happen.
461 
462      - A shared object appears only on GDB's list.  This means that
463      the inferior has unloaded it.  We should remove the shared
464      object from GDB's tables.
465 
466      - A shared object appears only on the inferior's list.  This
467      means that it's just been loaded.  We should add it to GDB's
468      tables.
469 
470      So we walk GDB's list, checking each entry to see if it appears
471      in the inferior's list too.  If it does, no action is needed, and
472      we remove it from the inferior's list.  If it doesn't, the
473      inferior has unloaded it, and we remove it from GDB's list.  By
474      the time we're done walking GDB's list, the inferior's list
475      contains only the new shared objects, which we then add.  */
476 
477   gdb = so_list_head;
478   gdb_link = &so_list_head;
479   while (gdb)
480     {
481       struct so_list *i = inferior;
482       struct so_list **i_link = &inferior;
483 
484       /* Check to see whether the shared object *gdb also appears in
485 	 the inferior's current list.  */
486       while (i)
487 	{
488 	  if (! strcmp (gdb->so_original_name, i->so_original_name))
489 	    break;
490 
491 	  i_link = &i->next;
492 	  i = *i_link;
493 	}
494 
495       /* If the shared object appears on the inferior's list too, then
496          it's still loaded, so we don't need to do anything.  Delete
497          it from the inferior's list, and leave it on GDB's list.  */
498       if (i)
499 	{
500 	  *i_link = i->next;
501 	  free_so (i);
502 	  gdb_link = &gdb->next;
503 	  gdb = *gdb_link;
504 	}
505 
506       /* If it's not on the inferior's list, remove it from GDB's tables.  */
507       else
508 	{
509 	  /* Notify any observer that the SO has been unloaded
510 	     before we remove it from the gdb tables.  */
511 	  observer_notify_solib_unloaded (gdb);
512 
513 	  *gdb_link = gdb->next;
514 
515 	  /* Unless the user loaded it explicitly, free SO's objfile.  */
516 	  if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
517 	    free_objfile (gdb->objfile);
518 
519 	  /* Some targets' section tables might be referring to
520 	     sections from so->abfd; remove them.  */
521 	  remove_target_sections (gdb->abfd);
522 
523 	  free_so (gdb);
524 	  gdb = *gdb_link;
525 	}
526     }
527 
528   /* Now the inferior's list contains only shared objects that don't
529      appear in GDB's list --- those that are newly loaded.  Add them
530      to GDB's shared object list.  */
531   if (inferior)
532     {
533       struct so_list *i;
534 
535       /* Add the new shared objects to GDB's list.  */
536       *gdb_link = inferior;
537 
538       /* Fill in the rest of each of the `struct so_list' nodes.  */
539       for (i = inferior; i; i = i->next)
540 	{
541 	  i->from_tty = from_tty;
542 
543 	  /* Fill in the rest of the `struct so_list' node.  */
544 	  catch_errors (solib_map_sections, i,
545 			"Error while mapping shared library sections:\n",
546 			RETURN_MASK_ALL);
547 
548 	  /* If requested, add the shared object's sections to the TARGET's
549 	     section table.  Do this immediately after mapping the object so
550 	     that later nodes in the list can query this object, as is needed
551 	     in solib-osf.c.  */
552 	  if (target)
553 	    {
554 	      int count = (i->sections_end - i->sections);
555 	      if (count > 0)
556 		{
557 		  int space = target_resize_to_sections (target, count);
558 		  memcpy (target->to_sections + space,
559 			  i->sections,
560 			  count * sizeof (i->sections[0]));
561 		}
562 	    }
563 
564 	  /* Notify any observer that the shared object has been
565              loaded now that we've added it to GDB's tables.  */
566 	  observer_notify_solib_loaded (i);
567 	}
568     }
569 }
570 
571 
572 /* GLOBAL FUNCTION
573 
574    solib_add -- read in symbol info for newly added shared libraries
575 
576    SYNOPSIS
577 
578    void solib_add (char *pattern, int from_tty, struct target_ops
579    *TARGET, int readsyms)
580 
581    DESCRIPTION
582 
583    Read in symbolic information for any shared objects whose names
584    match PATTERN.  (If we've already read a shared object's symbol
585    info, leave it alone.)  If PATTERN is zero, read them all.
586 
587    If READSYMS is 0, defer reading symbolic information until later
588    but still do any needed low level processing.
589 
590    FROM_TTY and TARGET are as described for update_solib_list, above.  */
591 
592 void
593 solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
594 {
595   struct so_list *gdb;
596 
597   if (pattern)
598     {
599       char *re_err = re_comp (pattern);
600 
601       if (re_err)
602 	error ("Invalid regexp: %s", re_err);
603     }
604 
605   update_solib_list (from_tty, target);
606 
607   /* Walk the list of currently loaded shared libraries, and read
608      symbols for any that match the pattern --- or any whose symbols
609      aren't already loaded, if no pattern was given.  */
610   {
611     int any_matches = 0;
612     int loaded_any_symbols = 0;
613 
614     for (gdb = so_list_head; gdb; gdb = gdb->next)
615       if (! pattern || re_exec (gdb->so_name))
616 	{
617 	  any_matches = 1;
618 	  if (readsyms && solib_read_symbols (gdb, from_tty))
619 	    loaded_any_symbols = 1;
620 	}
621 
622     if (from_tty && pattern && ! any_matches)
623       printf_unfiltered
624 	("No loaded shared libraries match the pattern `%s'.\n", pattern);
625 
626     if (loaded_any_symbols)
627       {
628 	/* Getting new symbols may change our opinion about what is
629 	   frameless.  */
630 	reinit_frame_cache ();
631 
632 	TARGET_SO_SPECIAL_SYMBOL_HANDLING ();
633       }
634   }
635 }
636 
637 
638 /*
639 
640    LOCAL FUNCTION
641 
642    info_sharedlibrary_command -- code for "info sharedlibrary"
643 
644    SYNOPSIS
645 
646    static void info_sharedlibrary_command ()
647 
648    DESCRIPTION
649 
650    Walk through the shared library list and print information
651    about each attached library.
652  */
653 
654 static void
655 info_sharedlibrary_command (char *ignore, int from_tty)
656 {
657   struct so_list *so = NULL;	/* link map state variable */
658   int header_done = 0;
659   int addr_width;
660 
661   if (TARGET_PTR_BIT == 32)
662     addr_width = 8 + 4;
663   else if (TARGET_PTR_BIT == 64)
664     addr_width = 16 + 4;
665   else
666     {
667       internal_error (__FILE__, __LINE__,
668 		      "TARGET_PTR_BIT returned unknown size %d",
669 		      TARGET_PTR_BIT);
670     }
671 
672   update_solib_list (from_tty, 0);
673 
674   for (so = so_list_head; so; so = so->next)
675     {
676       if (so->so_name[0])
677 	{
678 	  if (!header_done)
679 	    {
680 	      printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
681 				 addr_width, "To", "Syms Read",
682 				 "Shared Object Library");
683 	      header_done++;
684 	    }
685 
686 	  printf_unfiltered ("%-*s", addr_width,
687 			     so->textsection != NULL
688 			       ? hex_string_custom (
689 			           (LONGEST) so->textsection->addr,
690 	                           addr_width - 4)
691 			       : "");
692 	  printf_unfiltered ("%-*s", addr_width,
693 			     so->textsection != NULL
694 			       ? hex_string_custom (
695 			           (LONGEST) so->textsection->endaddr,
696 	                           addr_width - 4)
697 			       : "");
698 	  printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
699 	  printf_unfiltered ("%s\n", so->so_name);
700 	}
701     }
702   if (so_list_head == NULL)
703     {
704       printf_unfiltered ("No shared libraries loaded at this time.\n");
705     }
706 }
707 
708 /*
709 
710    GLOBAL FUNCTION
711 
712    solib_address -- check to see if an address is in a shared lib
713 
714    SYNOPSIS
715 
716    char * solib_address (CORE_ADDR address)
717 
718    DESCRIPTION
719 
720    Provides a hook for other gdb routines to discover whether or
721    not a particular address is within the mapped address space of
722    a shared library.
723 
724    For example, this routine is called at one point to disable
725    breakpoints which are in shared libraries that are not currently
726    mapped in.
727  */
728 
729 char *
730 solib_address (CORE_ADDR address)
731 {
732   struct so_list *so = 0;	/* link map state variable */
733 
734   for (so = so_list_head; so; so = so->next)
735     {
736       struct section_table *p;
737 
738       for (p = so->sections; p < so->sections_end; p++)
739 	{
740 	  if (p->addr <= address && address < p->endaddr)
741 	    return (so->so_name);
742 	}
743     }
744 
745   return (0);
746 }
747 
748 /* Called by free_all_symtabs */
749 
750 void
751 clear_solib (void)
752 {
753   /* This function is expected to handle ELF shared libraries.  It is
754      also used on Solaris, which can run either ELF or a.out binaries
755      (for compatibility with SunOS 4), both of which can use shared
756      libraries.  So we don't know whether we have an ELF executable or
757      an a.out executable until the user chooses an executable file.
758 
759      ELF shared libraries don't get mapped into the address space
760      until after the program starts, so we'd better not try to insert
761      breakpoints in them immediately.  We have to wait until the
762      dynamic linker has loaded them; we'll hit a bp_shlib_event
763      breakpoint (look for calls to create_solib_event_breakpoint) when
764      it's ready.
765 
766      SunOS shared libraries seem to be different --- they're present
767      as soon as the process begins execution, so there's no need to
768      put off inserting breakpoints.  There's also nowhere to put a
769      bp_shlib_event breakpoint, so if we put it off, we'll never get
770      around to it.
771 
772      So: disable breakpoints only if we're using ELF shared libs.  */
773   if (exec_bfd != NULL
774       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
775     disable_breakpoints_in_shlibs (1);
776 
777   while (so_list_head)
778     {
779       struct so_list *so = so_list_head;
780       so_list_head = so->next;
781       if (so->abfd)
782 	remove_target_sections (so->abfd);
783       free_so (so);
784     }
785 
786   TARGET_SO_CLEAR_SOLIB ();
787 }
788 
789 static void
790 do_clear_solib (void *dummy)
791 {
792   solib_cleanup_queued = 0;
793   clear_solib ();
794 }
795 
796 /* GLOBAL FUNCTION
797 
798    solib_create_inferior_hook -- shared library startup support
799 
800    SYNOPSIS
801 
802    void solib_create_inferior_hook()
803 
804    DESCRIPTION
805 
806    When gdb starts up the inferior, it nurses it along (through the
807    shell) until it is ready to execute it's first instruction.  At this
808    point, this function gets called via expansion of the macro
809    SOLIB_CREATE_INFERIOR_HOOK.  */
810 
811 void
812 solib_create_inferior_hook (void)
813 {
814   TARGET_SO_SOLIB_CREATE_INFERIOR_HOOK ();
815 }
816 
817 /* GLOBAL FUNCTION
818 
819    in_solib_dynsym_resolve_code -- check to see if an address is in
820                                    dynamic loader's dynamic symbol
821 				   resolution code
822 
823    SYNOPSIS
824 
825    int in_solib_dynsym_resolve_code (CORE_ADDR pc)
826 
827    DESCRIPTION
828 
829    Determine if PC is in the dynamic linker's symbol resolution
830    code.  Return 1 if so, 0 otherwise.
831 */
832 
833 int
834 in_solib_dynsym_resolve_code (CORE_ADDR pc)
835 {
836   return TARGET_SO_IN_DYNSYM_RESOLVE_CODE (pc);
837 }
838 
839 /*
840 
841    LOCAL FUNCTION
842 
843    sharedlibrary_command -- handle command to explicitly add library
844 
845    SYNOPSIS
846 
847    static void sharedlibrary_command (char *args, int from_tty)
848 
849    DESCRIPTION
850 
851  */
852 
853 static void
854 sharedlibrary_command (char *args, int from_tty)
855 {
856   dont_repeat ();
857   solib_add (args, from_tty, (struct target_ops *) 0, 1);
858 }
859 
860 /* LOCAL FUNCTION
861 
862    no_shared_libraries -- handle command to explicitly discard symbols
863    from shared libraries.
864 
865    DESCRIPTION
866 
867    Implements the command "nosharedlibrary", which discards symbols
868    that have been auto-loaded from shared libraries.  Symbols from
869    shared libraries that were added by explicit request of the user
870    are not discarded.  Also called from remote.c.  */
871 
872 void
873 no_shared_libraries (char *ignored, int from_tty)
874 {
875   objfile_purge_solibs ();
876   do_clear_solib (NULL);
877 }
878 
879 static void
880 reload_shared_libraries (char *ignored, int from_tty)
881 {
882   no_shared_libraries (NULL, from_tty);
883   solib_add (NULL, from_tty, NULL, auto_solib_add);
884 }
885 
886 extern initialize_file_ftype _initialize_solib; /* -Wmissing-prototypes */
887 
888 void
889 _initialize_solib (void)
890 {
891   struct cmd_list_element *c;
892 
893   add_com ("sharedlibrary", class_files, sharedlibrary_command,
894 	   "Load shared object library symbols for files matching REGEXP.");
895   add_info ("sharedlibrary", info_sharedlibrary_command,
896 	    "Status of loaded shared object libraries.");
897   add_com ("nosharedlibrary", class_files, no_shared_libraries,
898 	   "Unload all shared object library symbols.");
899 
900   deprecated_add_show_from_set
901     (add_set_cmd ("auto-solib-add", class_support, var_boolean,
902 		  (char *) &auto_solib_add,
903 		  "Set autoloading of shared library symbols.\n\
904 If \"on\", symbols from all shared object libraries will be loaded\n\
905 automatically when the inferior begins execution, when the dynamic linker\n\
906 informs gdb that a new library has been loaded, or when attaching to the\n\
907 inferior.  Otherwise, symbols must be loaded manually, using `sharedlibrary'.",
908 		  &setlist),
909      &showlist);
910 
911   c = add_set_cmd ("solib-absolute-prefix", class_support, var_filename,
912 		   (char *) &solib_absolute_prefix,
913 		   "Set prefix for loading absolute shared library symbol files.\n\
914 For other (relative) files, you can add values using `set solib-search-path'.",
915 		   &setlist);
916   deprecated_add_show_from_set (c, &showlist);
917   set_cmd_cfunc (c, reload_shared_libraries);
918   set_cmd_completer (c, filename_completer);
919 
920   /* Set the default value of "solib-absolute-prefix" from the sysroot, if
921      one is set.  */
922   solib_absolute_prefix = xstrdup (gdb_sysroot);
923 
924   c = add_set_cmd ("solib-search-path", class_support, var_string,
925 		   (char *) &solib_search_path,
926 		   "Set the search path for loading non-absolute shared library symbol files.\n\
927 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.",
928 		   &setlist);
929   deprecated_add_show_from_set (c, &showlist);
930   set_cmd_cfunc (c, reload_shared_libraries);
931   set_cmd_completer (c, filename_completer);
932 }
933