1 /* Handle shared libraries for GDB, the GNU Debugger.
3 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
6 This file is part of GDB.
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.
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.
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. */
25 #include <sys/types.h>
27 #include "gdb_string.h"
36 #include "gdb_regex.h"
41 #include "completer.h"
42 #include "filenames.h" /* for DOSish file names */
45 #include <readline/readline.h>
47 /* external data declarations */
49 /* FIXME: gdbarch needs to control this variable */
50 struct target_so_ops
*current_target_so_ops
;
52 /* local data declarations */
54 static struct so_list
*so_list_head
; /* List of known shared objects */
56 static int solib_cleanup_queued
= 0; /* make_run_cleanup called */
58 /* Local function prototypes */
60 static void do_clear_solib (void *);
62 /* If non-zero, this is a prefix that will be added to the front of the name
63 shared libraries with an absolute filename for loading. */
64 static char *solib_absolute_prefix
= NULL
;
66 /* If non-empty, this is a search path for loading non-absolute shared library
67 symbol files. This takes precedence over the environment variables PATH
68 and LD_LIBRARY_PATH. */
69 static char *solib_search_path
= NULL
;
75 solib_open -- Find a shared library file and open it.
79 int solib_open (char *in_patname, char **found_pathname);
83 Global variable SOLIB_ABSOLUTE_PREFIX is used as a prefix directory
84 to search for shared libraries if they have an absolute path.
86 Global variable SOLIB_SEARCH_PATH is used as a prefix directory
87 (or set of directories, as in LD_LIBRARY_PATH) to search for all
88 shared libraries if not found in SOLIB_ABSOLUTE_PREFIX.
91 * If path is absolute, look in SOLIB_ABSOLUTE_PREFIX.
92 * If path is absolute or relative, look for it literally (unmodified).
93 * Look in SOLIB_SEARCH_PATH.
94 * Look in inferior's $PATH.
95 * Look in inferior's $LD_LIBRARY_PATH.
99 file handle for opened solib, or -1 for failure. */
102 solib_open (char *in_pathname
, char **found_pathname
)
105 char *temp_pathname
= NULL
;
106 char *p
= in_pathname
;
108 while (*p
&& !IS_DIR_SEPARATOR (*p
))
113 if (! IS_ABSOLUTE_PATH (in_pathname
) || solib_absolute_prefix
== NULL
)
114 temp_pathname
= in_pathname
;
117 int prefix_len
= strlen (solib_absolute_prefix
);
119 /* Remove trailing slashes from absolute prefix. */
120 while (prefix_len
> 0
121 && IS_DIR_SEPARATOR (solib_absolute_prefix
[prefix_len
- 1]))
124 /* Cat the prefixed pathname together. */
125 temp_pathname
= alloca (prefix_len
+ strlen (in_pathname
) + 1);
126 strncpy (temp_pathname
, solib_absolute_prefix
, prefix_len
);
127 temp_pathname
[prefix_len
] = '\0';
128 strcat (temp_pathname
, in_pathname
);
131 /* Now see if we can open it. */
132 found_file
= open (temp_pathname
, O_RDONLY
, 0);
135 /* If the search in solib_absolute_prefix failed, and the path name is
136 absolute at this point, make it relative. (openp will try and open the
137 file according to its absolute path otherwise, which is not what we want.)
138 Affects subsequent searches for this solib. */
139 if (found_file
< 0 && IS_ABSOLUTE_PATH (in_pathname
))
141 /* First, get rid of any drive letters etc. */
142 while (!IS_DIR_SEPARATOR (*in_pathname
))
145 /* Next, get rid of all leading dir separators. */
146 while (IS_DIR_SEPARATOR (*in_pathname
))
150 /* If not found, next search the solib_search_path (if any). */
151 if (found_file
< 0 && solib_search_path
!= NULL
)
152 found_file
= openp (solib_search_path
,
153 1, in_pathname
, O_RDONLY
, 0, &temp_pathname
);
155 /* If not found, next search the solib_search_path (if any) for the basename
156 only (ignoring the path). This is to allow reading solibs from a path
157 that differs from the opened path. */
158 if (found_file
< 0 && solib_search_path
!= NULL
)
159 found_file
= openp (solib_search_path
,
160 1, lbasename (in_pathname
), O_RDONLY
, 0,
163 /* If not found, try to use target supplied solib search method */
164 if (found_file
< 0 && TARGET_SO_FIND_AND_OPEN_SOLIB
!= NULL
)
165 found_file
= TARGET_SO_FIND_AND_OPEN_SOLIB
166 (in_pathname
, O_RDONLY
, &temp_pathname
);
168 /* If not found, next search the inferior's $PATH environment variable. */
169 if (found_file
< 0 && solib_search_path
!= NULL
)
170 found_file
= openp (get_in_environ (inferior_environ
, "PATH"),
171 1, in_pathname
, O_RDONLY
, 0, &temp_pathname
);
173 /* If not found, next search the inferior's $LD_LIBRARY_PATH
174 environment variable. */
175 if (found_file
< 0 && solib_search_path
!= NULL
)
176 found_file
= openp (get_in_environ (inferior_environ
, "LD_LIBRARY_PATH"),
177 1, in_pathname
, O_RDONLY
, 0, &temp_pathname
);
179 /* Done. If not found, tough luck. Return found_file and
180 (optionally) found_pathname. */
181 if (found_pathname
!= NULL
&& temp_pathname
!= NULL
)
182 *found_pathname
= xstrdup (temp_pathname
);
191 solib_map_sections -- open bfd and build sections for shared lib
195 static int solib_map_sections (struct so_list *so)
199 Given a pointer to one of the shared objects in our list
200 of mapped objects, use the recorded name to open a bfd
201 descriptor for the object, build a section table, and then
202 relocate all the section addresses by the base address at
203 which the shared object was mapped.
207 In most (all?) cases the shared object file name recorded in the
208 dynamic linkage tables will be a fully qualified pathname. For
209 cases where it isn't, do we really mimic the systems search
210 mechanism correctly in the below code (particularly the tilde
215 solib_map_sections (void *arg
)
217 struct so_list
*so
= (struct so_list
*) arg
; /* catch_errors bogon */
219 char *scratch_pathname
;
221 struct section_table
*p
;
222 struct cleanup
*old_chain
;
225 filename
= tilde_expand (so
->so_name
);
227 old_chain
= make_cleanup (xfree
, filename
);
228 scratch_chan
= solib_open (filename
, &scratch_pathname
);
230 if (scratch_chan
< 0)
232 perror_with_name (filename
);
235 /* Leave scratch_pathname allocated. abfd->name will point to it. */
236 abfd
= bfd_fdopenr (scratch_pathname
, gnutarget
, scratch_chan
);
239 close (scratch_chan
);
240 error ("Could not open `%s' as an executable file: %s",
241 scratch_pathname
, bfd_errmsg (bfd_get_error ()));
244 /* Leave bfd open, core_xfer_memory and "info files" need it. */
248 /* copy full path name into so_name, so that later symbol_file_add
250 if (strlen (scratch_pathname
) >= SO_NAME_MAX_PATH_SIZE
)
251 error ("Full path name length of shared library exceeds SO_NAME_MAX_PATH_SIZE in so_list structure.");
252 strcpy (so
->so_name
, scratch_pathname
);
254 if (!bfd_check_format (abfd
, bfd_object
))
256 error ("\"%s\": not in executable format: %s.",
257 scratch_pathname
, bfd_errmsg (bfd_get_error ()));
259 if (build_section_table (abfd
, &so
->sections
, &so
->sections_end
))
261 error ("Can't find the file sections in `%s': %s",
262 bfd_get_filename (abfd
), bfd_errmsg (bfd_get_error ()));
265 for (p
= so
->sections
; p
< so
->sections_end
; p
++)
267 /* Relocate the section binding addresses as recorded in the shared
268 object's file by the base address to which the object was actually
270 TARGET_SO_RELOCATE_SECTION_ADDRESSES (so
, p
);
271 if (STREQ (p
->the_bfd_section
->name
, ".text"))
277 /* Free the file names, close the file now. */
278 do_cleanups (old_chain
);
285 free_so --- free a `struct so_list' object
289 void free_so (struct so_list *so)
293 Free the storage associated with the `struct so_list' object SO.
294 If we have opened a BFD for SO, close it.
296 The caller is responsible for removing SO from whatever list it is
297 a member of. If we have placed SO's sections in some target's
298 section table, the caller is responsible for removing them.
300 This function doesn't mess with objfiles at all. If there is an
301 objfile associated with SO that needs to be removed, the caller is
302 responsible for taking care of that. */
305 free_so (struct so_list
*so
)
307 char *bfd_filename
= 0;
310 xfree (so
->sections
);
314 bfd_filename
= bfd_get_filename (so
->abfd
);
315 if (! bfd_close (so
->abfd
))
316 warning ("cannot close \"%s\": %s",
317 bfd_filename
, bfd_errmsg (bfd_get_error ()));
321 xfree (bfd_filename
);
323 TARGET_SO_FREE_SO (so
);
329 /* A small stub to get us past the arg-passing pinhole of catch_errors. */
332 symbol_add_stub (void *arg
)
334 register struct so_list
*so
= (struct so_list
*) arg
; /* catch_errs bogon */
335 struct section_addr_info
*sap
;
337 /* Have we already loaded this shared object? */
338 ALL_OBJFILES (so
->objfile
)
340 if (strcmp (so
->objfile
->name
, so
->so_name
) == 0)
344 sap
= build_section_addr_info_from_section_table (so
->sections
,
347 so
->objfile
= symbol_file_add (so
->so_name
, so
->from_tty
,
348 sap
, 0, OBJF_SHARED
);
349 free_section_addr_info (sap
);
357 update_solib_list --- synchronize GDB's shared object list with inferior's
361 void update_solib_list (int from_tty, struct target_ops *TARGET)
363 Extract the list of currently loaded shared objects from the
364 inferior, and compare it with the list of shared objects currently
365 in GDB's so_list_head list. Edit so_list_head to bring it in sync
366 with the inferior's new list.
368 If we notice that the inferior has unloaded some shared objects,
369 free any symbolic info GDB had read about those shared objects.
371 Don't load symbolic info for any new shared objects; just add them
372 to the list, and leave their symbols_loaded flag clear.
374 If FROM_TTY is non-null, feel free to print messages about what
377 If TARGET is non-null, add the sections of all new shared objects
378 to TARGET's section table. Note that this doesn't remove any
379 sections for shared objects that have been unloaded, and it
380 doesn't check to see if the new shared objects are already present in
381 the section table. But we only use this for core files and
382 processes we've just attached to, so that's okay. */
385 update_solib_list (int from_tty
, struct target_ops
*target
)
387 struct so_list
*inferior
= TARGET_SO_CURRENT_SOS ();
388 struct so_list
*gdb
, **gdb_link
;
390 /* If we are attaching to a running process for which we
391 have not opened a symbol file, we may be able to get its
394 symfile_objfile
== NULL
)
395 catch_errors (TARGET_SO_OPEN_SYMBOL_FILE_OBJECT
, &from_tty
,
396 "Error reading attached process's symbol file.\n",
399 /* Since this function might actually add some elements to the
400 so_list_head list, arrange for it to be cleaned up when
402 if (!solib_cleanup_queued
)
404 make_run_cleanup (do_clear_solib
, NULL
);
405 solib_cleanup_queued
= 1;
408 /* GDB and the inferior's dynamic linker each maintain their own
409 list of currently loaded shared objects; we want to bring the
410 former in sync with the latter. Scan both lists, seeing which
411 shared objects appear where. There are three cases:
413 - A shared object appears on both lists. This means that GDB
414 knows about it already, and it's still loaded in the inferior.
415 Nothing needs to happen.
417 - A shared object appears only on GDB's list. This means that
418 the inferior has unloaded it. We should remove the shared
419 object from GDB's tables.
421 - A shared object appears only on the inferior's list. This
422 means that it's just been loaded. We should add it to GDB's
425 So we walk GDB's list, checking each entry to see if it appears
426 in the inferior's list too. If it does, no action is needed, and
427 we remove it from the inferior's list. If it doesn't, the
428 inferior has unloaded it, and we remove it from GDB's list. By
429 the time we're done walking GDB's list, the inferior's list
430 contains only the new shared objects, which we then add. */
433 gdb_link
= &so_list_head
;
436 struct so_list
*i
= inferior
;
437 struct so_list
**i_link
= &inferior
;
439 /* Check to see whether the shared object *gdb also appears in
440 the inferior's current list. */
443 if (! strcmp (gdb
->so_original_name
, i
->so_original_name
))
450 /* If the shared object appears on the inferior's list too, then
451 it's still loaded, so we don't need to do anything. Delete
452 it from the inferior's list, and leave it on GDB's list. */
457 gdb_link
= &gdb
->next
;
461 /* If it's not on the inferior's list, remove it from GDB's tables. */
464 *gdb_link
= gdb
->next
;
466 /* Unless the user loaded it explicitly, free SO's objfile. */
467 if (gdb
->objfile
&& ! (gdb
->objfile
->flags
& OBJF_USERLOADED
))
468 free_objfile (gdb
->objfile
);
470 /* Some targets' section tables might be referring to
471 sections from so->abfd; remove them. */
472 remove_target_sections (gdb
->abfd
);
479 /* Now the inferior's list contains only shared objects that don't
480 appear in GDB's list --- those that are newly loaded. Add them
481 to GDB's shared object list. */
486 /* Add the new shared objects to GDB's list. */
487 *gdb_link
= inferior
;
489 /* Fill in the rest of each of the `struct so_list' nodes. */
490 for (i
= inferior
; i
; i
= i
->next
)
492 i
->from_tty
= from_tty
;
494 /* Fill in the rest of the `struct so_list' node. */
495 catch_errors (solib_map_sections
, i
,
496 "Error while mapping shared library sections:\n",
499 /* If requested, add the shared object's sections to the TARGET's
500 section table. Do this immediately after mapping the object so
501 that later nodes in the list can query this object, as is needed
505 int count
= (i
->sections_end
- i
->sections
);
508 int space
= target_resize_to_sections (target
, count
);
509 memcpy (target
->to_sections
+ space
,
511 count
* sizeof (i
->sections
[0]));
521 solib_add -- read in symbol info for newly added shared libraries
525 void solib_add (char *pattern, int from_tty, struct target_ops
526 *TARGET, int readsyms)
530 Read in symbolic information for any shared objects whose names
531 match PATTERN. (If we've already read a shared object's symbol
532 info, leave it alone.) If PATTERN is zero, read them all.
534 If READSYMS is 0, defer reading symbolic information until later
535 but still do any needed low level processing.
537 FROM_TTY and TARGET are as described for update_solib_list, above. */
540 solib_add (char *pattern
, int from_tty
, struct target_ops
*target
, int readsyms
)
546 char *re_err
= re_comp (pattern
);
549 error ("Invalid regexp: %s", re_err
);
552 update_solib_list (from_tty
, target
);
554 /* Walk the list of currently loaded shared libraries, and read
555 symbols for any that match the pattern --- or any whose symbols
556 aren't already loaded, if no pattern was given. */
559 int loaded_any_symbols
= 0;
561 for (gdb
= so_list_head
; gdb
; gdb
= gdb
->next
)
562 if (! pattern
|| re_exec (gdb
->so_name
))
566 if (gdb
->symbols_loaded
)
569 printf_unfiltered ("Symbols already loaded for %s\n",
575 (symbol_add_stub
, gdb
,
576 "Error while reading shared library symbols:\n",
580 printf_unfiltered ("Loaded symbols for %s\n",
582 gdb
->symbols_loaded
= 1;
583 loaded_any_symbols
= 1;
588 if (from_tty
&& pattern
&& ! any_matches
)
590 ("No loaded shared libraries match the pattern `%s'.\n", pattern
);
592 if (loaded_any_symbols
)
594 /* Getting new symbols may change our opinion about what is
596 reinit_frame_cache ();
598 TARGET_SO_SPECIAL_SYMBOL_HANDLING ();
608 info_sharedlibrary_command -- code for "info sharedlibrary"
612 static void info_sharedlibrary_command ()
616 Walk through the shared library list and print information
617 about each attached library.
621 info_sharedlibrary_command (char *ignore
, int from_tty
)
623 register struct so_list
*so
= NULL
; /* link map state variable */
628 if (TARGET_PTR_BIT
== 32)
633 else if (TARGET_PTR_BIT
== 64)
640 internal_error (__FILE__
, __LINE__
,
641 "TARGET_PTR_BIT returned unknown size %d",
645 update_solib_list (from_tty
, 0);
647 for (so
= so_list_head
; so
; so
= so
->next
)
653 printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width
, "From",
654 addr_width
, "To", "Syms Read",
655 "Shared Object Library");
659 printf_unfiltered ("%-*s", addr_width
,
660 so
->textsection
!= NULL
661 ? local_hex_string_custom (
662 (LONGEST
) so
->textsection
->addr
,
665 printf_unfiltered ("%-*s", addr_width
,
666 so
->textsection
!= NULL
667 ? local_hex_string_custom (
668 (LONGEST
) so
->textsection
->endaddr
,
671 printf_unfiltered ("%-12s", so
->symbols_loaded
? "Yes" : "No");
672 printf_unfiltered ("%s\n", so
->so_name
);
675 if (so_list_head
== NULL
)
677 printf_unfiltered ("No shared libraries loaded at this time.\n");
685 solib_address -- check to see if an address is in a shared lib
689 char * solib_address (CORE_ADDR address)
693 Provides a hook for other gdb routines to discover whether or
694 not a particular address is within the mapped address space of
697 For example, this routine is called at one point to disable
698 breakpoints which are in shared libraries that are not currently
703 solib_address (CORE_ADDR address
)
705 register struct so_list
*so
= 0; /* link map state variable */
707 for (so
= so_list_head
; so
; so
= so
->next
)
709 struct section_table
*p
;
711 for (p
= so
->sections
; p
< so
->sections_end
; p
++)
713 if (p
->addr
<= address
&& address
< p
->endaddr
)
714 return (so
->so_name
);
721 /* Called by free_all_symtabs */
726 /* This function is expected to handle ELF shared libraries. It is
727 also used on Solaris, which can run either ELF or a.out binaries
728 (for compatibility with SunOS 4), both of which can use shared
729 libraries. So we don't know whether we have an ELF executable or
730 an a.out executable until the user chooses an executable file.
732 ELF shared libraries don't get mapped into the address space
733 until after the program starts, so we'd better not try to insert
734 breakpoints in them immediately. We have to wait until the
735 dynamic linker has loaded them; we'll hit a bp_shlib_event
736 breakpoint (look for calls to create_solib_event_breakpoint) when
739 SunOS shared libraries seem to be different --- they're present
740 as soon as the process begins execution, so there's no need to
741 put off inserting breakpoints. There's also nowhere to put a
742 bp_shlib_event breakpoint, so if we put it off, we'll never get
745 So: disable breakpoints only if we're using ELF shared libs. */
747 && bfd_get_flavour (exec_bfd
) != bfd_target_aout_flavour
)
748 disable_breakpoints_in_shlibs (1);
752 struct so_list
*so
= so_list_head
;
753 so_list_head
= so
->next
;
755 remove_target_sections (so
->abfd
);
759 TARGET_SO_CLEAR_SOLIB ();
763 do_clear_solib (void *dummy
)
765 solib_cleanup_queued
= 0;
771 solib_create_inferior_hook -- shared library startup support
775 void solib_create_inferior_hook()
779 When gdb starts up the inferior, it nurses it along (through the
780 shell) until it is ready to execute it's first instruction. At this
781 point, this function gets called via expansion of the macro
782 SOLIB_CREATE_INFERIOR_HOOK. */
785 solib_create_inferior_hook (void)
787 TARGET_SO_SOLIB_CREATE_INFERIOR_HOOK ();
792 in_solib_dynsym_resolve_code -- check to see if an address is in
793 dynamic loader's dynamic symbol
798 int in_solib_dynsym_resolve_code (CORE_ADDR pc)
802 Determine if PC is in the dynamic linker's symbol resolution
803 code. Return 1 if so, 0 otherwise.
807 in_solib_dynsym_resolve_code (CORE_ADDR pc
)
809 return TARGET_SO_IN_DYNSYM_RESOLVE_CODE (pc
);
816 sharedlibrary_command -- handle command to explicitly add library
820 static void sharedlibrary_command (char *args, int from_tty)
827 sharedlibrary_command (char *args
, int from_tty
)
830 solib_add (args
, from_tty
, (struct target_ops
*) 0, 1);
835 no_shared_libraries -- handle command to explicitly discard symbols
836 from shared libraries.
840 Implements the command "nosharedlibrary", which discards symbols
841 that have been auto-loaded from shared libraries. Symbols from
842 shared libraries that were added by explicit request of the user
843 are not discarded. Also called from remote.c. */
846 no_shared_libraries (char *ignored
, int from_tty
)
848 objfile_purge_solibs ();
849 do_clear_solib (NULL
);
853 reload_shared_libraries (char *ignored
, int from_tty
)
855 no_shared_libraries (NULL
, from_tty
);
856 solib_add (NULL
, from_tty
, NULL
, auto_solib_add
);
860 _initialize_solib (void)
862 struct cmd_list_element
*c
;
864 add_com ("sharedlibrary", class_files
, sharedlibrary_command
,
865 "Load shared object library symbols for files matching REGEXP.");
866 add_info ("sharedlibrary", info_sharedlibrary_command
,
867 "Status of loaded shared object libraries.");
868 add_com ("nosharedlibrary", class_files
, no_shared_libraries
,
869 "Unload all shared object library symbols.");
872 (add_set_cmd ("auto-solib-add", class_support
, var_boolean
,
873 (char *) &auto_solib_add
,
874 "Set autoloading of shared library symbols.\n\
875 If \"on\", symbols from all shared object libraries will be loaded\n\
876 automatically when the inferior begins execution, when the dynamic linker\n\
877 informs gdb that a new library has been loaded, or when attaching to the\n\
878 inferior. Otherwise, symbols must be loaded manually, using `sharedlibrary'.",
882 c
= add_set_cmd ("solib-absolute-prefix", class_support
, var_filename
,
883 (char *) &solib_absolute_prefix
,
884 "Set prefix for loading absolute shared library symbol files.\n\
885 For other (relative) files, you can add values using `set solib-search-path'.",
887 add_show_from_set (c
, &showlist
);
888 set_cmd_cfunc (c
, reload_shared_libraries
);
889 set_cmd_completer (c
, filename_completer
);
891 /* Set the default value of "solib-absolute-prefix" from the sysroot, if
893 solib_absolute_prefix
= xstrdup (gdb_sysroot
);
895 c
= add_set_cmd ("solib-search-path", class_support
, var_string
,
896 (char *) &solib_search_path
,
897 "Set the search path for loading non-absolute shared library symbol files.\n\
898 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.",
900 add_show_from_set (c
, &showlist
);
901 set_cmd_cfunc (c
, reload_shared_libraries
);
902 set_cmd_completer (c
, filename_completer
);