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