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