2007-07-03 Markus Deuling <deuling@de.ibm.com>
[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);
cfa9d6d9
DJ
319
320 /* If the target didn't provide information about the address
321 range of the shared object, assume we want the location of
322 the .text section. */
323 if (so->addr_low == 0 && so->addr_high == 0
324 && strcmp (p->the_bfd_section->name, ".text") == 0)
13437d4b 325 {
cfa9d6d9
DJ
326 so->addr_low = p->addr;
327 so->addr_high = p->endaddr;
13437d4b 328 }
104c1213
JM
329 }
330
13437d4b
KB
331 /* Free the file names, close the file now. */
332 do_cleanups (old_chain);
104c1213 333
13437d4b 334 return (1);
104c1213 335}
c906108c 336
07cd4b97 337/* LOCAL FUNCTION
c906108c 338
07cd4b97 339 free_so --- free a `struct so_list' object
c906108c 340
c5aa993b 341 SYNOPSIS
c906108c 342
07cd4b97 343 void free_so (struct so_list *so)
c906108c 344
c5aa993b 345 DESCRIPTION
c906108c 346
07cd4b97
JB
347 Free the storage associated with the `struct so_list' object SO.
348 If we have opened a BFD for SO, close it.
c906108c 349
07cd4b97
JB
350 The caller is responsible for removing SO from whatever list it is
351 a member of. If we have placed SO's sections in some target's
352 section table, the caller is responsible for removing them.
c906108c 353
07cd4b97
JB
354 This function doesn't mess with objfiles at all. If there is an
355 objfile associated with SO that needs to be removed, the caller is
356 responsible for taking care of that. */
357
13437d4b 358void
07cd4b97 359free_so (struct so_list *so)
c906108c 360{
66aba65d 361 struct target_so_ops *ops = solib_ops (current_gdbarch);
07cd4b97 362 char *bfd_filename = 0;
c5aa993b 363
07cd4b97 364 if (so->sections)
b8c9b27d 365 xfree (so->sections);
07cd4b97
JB
366
367 if (so->abfd)
c906108c 368 {
07cd4b97
JB
369 bfd_filename = bfd_get_filename (so->abfd);
370 if (! bfd_close (so->abfd))
8a3fe4f8 371 warning (_("cannot close \"%s\": %s"),
07cd4b97 372 bfd_filename, bfd_errmsg (bfd_get_error ()));
c906108c 373 }
07cd4b97
JB
374
375 if (bfd_filename)
b8c9b27d 376 xfree (bfd_filename);
07cd4b97 377
66aba65d 378 ops->free_so (so);
07cd4b97 379
b8c9b27d 380 xfree (so);
c906108c
SS
381}
382
07cd4b97 383
f8766ec1
KB
384/* Return address of first so_list entry in master shared object list. */
385struct so_list *
386master_so_list (void)
387{
388 return so_list_head;
389}
390
391
c906108c
SS
392/* A small stub to get us past the arg-passing pinhole of catch_errors. */
393
394static int
4efb68b1 395symbol_add_stub (void *arg)
c906108c 396{
52f0bd74 397 struct so_list *so = (struct so_list *) arg; /* catch_errs bogon */
62557bbc 398 struct section_addr_info *sap;
c906108c 399
07cd4b97
JB
400 /* Have we already loaded this shared object? */
401 ALL_OBJFILES (so->objfile)
402 {
403 if (strcmp (so->objfile->name, so->so_name) == 0)
404 return 1;
405 }
406
62557bbc
KB
407 sap = build_section_addr_info_from_section_table (so->sections,
408 so->sections_end);
e7cf9df1 409
62557bbc
KB
410 so->objfile = symbol_file_add (so->so_name, so->from_tty,
411 sap, 0, OBJF_SHARED);
412 free_section_addr_info (sap);
c906108c 413
07cd4b97 414 return (1);
c906108c
SS
415}
416
42a6e6a0
MK
417/* Read in symbols for shared object SO. If FROM_TTY is non-zero, be
418 chatty about it. Return non-zero if any symbols were actually
419 loaded. */
420
421int
422solib_read_symbols (struct so_list *so, int from_tty)
423{
424 if (so->symbols_loaded)
425 {
426 if (from_tty)
a3f17187 427 printf_unfiltered (_("Symbols already loaded for %s\n"), so->so_name);
42a6e6a0 428 }
8bb75286
DJ
429 else if (so->abfd == NULL)
430 {
431 if (from_tty)
432 printf_unfiltered (_("Symbol file not found for %s\n"), so->so_name);
433 }
42a6e6a0
MK
434 else
435 {
436 if (catch_errors (symbol_add_stub, so,
437 "Error while reading shared library symbols:\n",
438 RETURN_MASK_ALL))
439 {
440 if (from_tty)
a3f17187 441 printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
42a6e6a0
MK
442 so->symbols_loaded = 1;
443 return 1;
444 }
445 }
446
447 return 0;
448}
c906108c 449
07cd4b97 450/* LOCAL FUNCTION
c906108c 451
105b175f 452 update_solib_list --- synchronize GDB's shared object list with inferior's
c906108c 453
c5aa993b 454 SYNOPSIS
c906108c 455
105b175f 456 void update_solib_list (int from_tty, struct target_ops *TARGET)
c906108c 457
07cd4b97 458 Extract the list of currently loaded shared objects from the
105b175f
JB
459 inferior, and compare it with the list of shared objects currently
460 in GDB's so_list_head list. Edit so_list_head to bring it in sync
461 with the inferior's new list.
c906108c 462
105b175f
JB
463 If we notice that the inferior has unloaded some shared objects,
464 free any symbolic info GDB had read about those shared objects.
465
466 Don't load symbolic info for any new shared objects; just add them
467 to the list, and leave their symbols_loaded flag clear.
07cd4b97
JB
468
469 If FROM_TTY is non-null, feel free to print messages about what
470 we're doing.
c906108c 471
07cd4b97
JB
472 If TARGET is non-null, add the sections of all new shared objects
473 to TARGET's section table. Note that this doesn't remove any
474 sections for shared objects that have been unloaded, and it
475 doesn't check to see if the new shared objects are already present in
476 the section table. But we only use this for core files and
477 processes we've just attached to, so that's okay. */
c906108c 478
a78f21af 479static void
105b175f 480update_solib_list (int from_tty, struct target_ops *target)
07cd4b97 481{
66aba65d
MK
482 struct target_so_ops *ops = solib_ops (current_gdbarch);
483 struct so_list *inferior = ops->current_sos();
07cd4b97
JB
484 struct so_list *gdb, **gdb_link;
485
104c1213
JM
486 /* If we are attaching to a running process for which we
487 have not opened a symbol file, we may be able to get its
488 symbols now! */
489 if (attach_flag &&
490 symfile_objfile == NULL)
66aba65d 491 catch_errors (ops->open_symbol_file_object, &from_tty,
104c1213
JM
492 "Error reading attached process's symbol file.\n",
493 RETURN_MASK_ALL);
494
07cd4b97
JB
495 /* Since this function might actually add some elements to the
496 so_list_head list, arrange for it to be cleaned up when
497 appropriate. */
498 if (!solib_cleanup_queued)
499 {
500 make_run_cleanup (do_clear_solib, NULL);
501 solib_cleanup_queued = 1;
c906108c 502 }
c5aa993b 503
07cd4b97
JB
504 /* GDB and the inferior's dynamic linker each maintain their own
505 list of currently loaded shared objects; we want to bring the
506 former in sync with the latter. Scan both lists, seeing which
507 shared objects appear where. There are three cases:
508
509 - A shared object appears on both lists. This means that GDB
105b175f
JB
510 knows about it already, and it's still loaded in the inferior.
511 Nothing needs to happen.
07cd4b97
JB
512
513 - A shared object appears only on GDB's list. This means that
105b175f
JB
514 the inferior has unloaded it. We should remove the shared
515 object from GDB's tables.
07cd4b97
JB
516
517 - A shared object appears only on the inferior's list. This
105b175f
JB
518 means that it's just been loaded. We should add it to GDB's
519 tables.
07cd4b97
JB
520
521 So we walk GDB's list, checking each entry to see if it appears
522 in the inferior's list too. If it does, no action is needed, and
523 we remove it from the inferior's list. If it doesn't, the
524 inferior has unloaded it, and we remove it from GDB's list. By
525 the time we're done walking GDB's list, the inferior's list
526 contains only the new shared objects, which we then add. */
527
528 gdb = so_list_head;
529 gdb_link = &so_list_head;
530 while (gdb)
c906108c 531 {
07cd4b97
JB
532 struct so_list *i = inferior;
533 struct so_list **i_link = &inferior;
534
535 /* Check to see whether the shared object *gdb also appears in
536 the inferior's current list. */
537 while (i)
c906108c 538 {
07cd4b97
JB
539 if (! strcmp (gdb->so_original_name, i->so_original_name))
540 break;
541
542 i_link = &i->next;
543 i = *i_link;
c906108c 544 }
c5aa993b 545
07cd4b97
JB
546 /* If the shared object appears on the inferior's list too, then
547 it's still loaded, so we don't need to do anything. Delete
548 it from the inferior's list, and leave it on GDB's list. */
549 if (i)
c906108c 550 {
07cd4b97 551 *i_link = i->next;
07cd4b97
JB
552 free_so (i);
553 gdb_link = &gdb->next;
554 gdb = *gdb_link;
555 }
556
557 /* If it's not on the inferior's list, remove it from GDB's tables. */
558 else
559 {
42a6e6a0
MK
560 /* Notify any observer that the shared object has been
561 unloaded before we remove it from GDB's tables. */
84acb35a
JJ
562 observer_notify_solib_unloaded (gdb);
563
07cd4b97 564 *gdb_link = gdb->next;
07cd4b97
JB
565
566 /* Unless the user loaded it explicitly, free SO's objfile. */
e8930304 567 if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
07cd4b97
JB
568 free_objfile (gdb->objfile);
569
570 /* Some targets' section tables might be referring to
571 sections from so->abfd; remove them. */
572 remove_target_sections (gdb->abfd);
573
574 free_so (gdb);
575 gdb = *gdb_link;
c906108c
SS
576 }
577 }
c5aa993b 578
07cd4b97
JB
579 /* Now the inferior's list contains only shared objects that don't
580 appear in GDB's list --- those that are newly loaded. Add them
e8930304 581 to GDB's shared object list. */
07cd4b97 582 if (inferior)
c906108c 583 {
07cd4b97
JB
584 struct so_list *i;
585
586 /* Add the new shared objects to GDB's list. */
587 *gdb_link = inferior;
588
e8930304 589 /* Fill in the rest of each of the `struct so_list' nodes. */
07cd4b97 590 for (i = inferior; i; i = i->next)
c906108c 591 {
07cd4b97
JB
592 i->from_tty = from_tty;
593
594 /* Fill in the rest of the `struct so_list' node. */
595 catch_errors (solib_map_sections, i,
596 "Error while mapping shared library sections:\n",
597 RETURN_MASK_ALL);
07cd4b97 598
b41be06e
ND
599 /* If requested, add the shared object's sections to the TARGET's
600 section table. Do this immediately after mapping the object so
601 that later nodes in the list can query this object, as is needed
602 in solib-osf.c. */
603 if (target)
c906108c 604 {
b41be06e
ND
605 int count = (i->sections_end - i->sections);
606 if (count > 0)
07cd4b97 607 {
b41be06e 608 int space = target_resize_to_sections (target, count);
07cd4b97
JB
609 memcpy (target->to_sections + space,
610 i->sections,
611 count * sizeof (i->sections[0]));
07cd4b97 612 }
c906108c 613 }
42a6e6a0
MK
614
615 /* Notify any observer that the shared object has been
616 loaded now that we've added it to GDB's tables. */
617 observer_notify_solib_loaded (i);
c906108c 618 }
e8930304 619 }
105b175f
JB
620}
621
6612ad7f
JB
622/* Return non-zero if SO is the libpthread shared library.
623
624 Uses a fairly simplistic heuristic approach where we check
625 the file name against "/libpthread". This can lead to false
626 positives, but this should be good enough in practice. */
627
628static int
629libpthread_solib_p (struct so_list *so)
630{
631 return (strstr (so->so_name, "/libpthread") != NULL);
632}
105b175f
JB
633
634/* GLOBAL FUNCTION
635
636 solib_add -- read in symbol info for newly added shared libraries
637
638 SYNOPSIS
639
990f9fe3
FF
640 void solib_add (char *pattern, int from_tty, struct target_ops
641 *TARGET, int readsyms)
105b175f
JB
642
643 DESCRIPTION
644
645 Read in symbolic information for any shared objects whose names
646 match PATTERN. (If we've already read a shared object's symbol
647 info, leave it alone.) If PATTERN is zero, read them all.
648
990f9fe3
FF
649 If READSYMS is 0, defer reading symbolic information until later
650 but still do any needed low level processing.
651
105b175f
JB
652 FROM_TTY and TARGET are as described for update_solib_list, above. */
653
654void
990f9fe3 655solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
105b175f
JB
656{
657 struct so_list *gdb;
658
659 if (pattern)
660 {
661 char *re_err = re_comp (pattern);
662
663 if (re_err)
8a3fe4f8 664 error (_("Invalid regexp: %s"), re_err);
105b175f
JB
665 }
666
667 update_solib_list (from_tty, target);
c906108c 668
105b175f
JB
669 /* Walk the list of currently loaded shared libraries, and read
670 symbols for any that match the pattern --- or any whose symbols
671 aren't already loaded, if no pattern was given. */
e8930304
JB
672 {
673 int any_matches = 0;
674 int loaded_any_symbols = 0;
c906108c 675
e8930304
JB
676 for (gdb = so_list_head; gdb; gdb = gdb->next)
677 if (! pattern || re_exec (gdb->so_name))
678 {
6612ad7f
JB
679 /* Normally, we would read the symbols from that library
680 only if READSYMS is set. However, we're making a small
681 exception for the pthread library, because we sometimes
682 need the library symbols to be loaded in order to provide
683 thread support (x86-linux for instance). */
684 const int add_this_solib =
685 (readsyms || libpthread_solib_p (gdb));
686
e8930304 687 any_matches = 1;
6612ad7f 688 if (add_this_solib && solib_read_symbols (gdb, from_tty))
42a6e6a0 689 loaded_any_symbols = 1;
e8930304
JB
690 }
691
692 if (from_tty && pattern && ! any_matches)
693 printf_unfiltered
694 ("No loaded shared libraries match the pattern `%s'.\n", pattern);
695
696 if (loaded_any_symbols)
697 {
66aba65d
MK
698 struct target_so_ops *ops = solib_ops (current_gdbarch);
699
e8930304
JB
700 /* Getting new symbols may change our opinion about what is
701 frameless. */
702 reinit_frame_cache ();
703
66aba65d 704 ops->special_symbol_handling ();
e8930304
JB
705 }
706 }
c906108c
SS
707}
708
07cd4b97 709
c906108c
SS
710/*
711
c5aa993b 712 LOCAL FUNCTION
c906108c 713
c5aa993b 714 info_sharedlibrary_command -- code for "info sharedlibrary"
c906108c 715
c5aa993b 716 SYNOPSIS
c906108c 717
c5aa993b 718 static void info_sharedlibrary_command ()
c906108c 719
c5aa993b 720 DESCRIPTION
c906108c 721
c5aa993b
JM
722 Walk through the shared library list and print information
723 about each attached library.
724 */
c906108c
SS
725
726static void
fba45db2 727info_sharedlibrary_command (char *ignore, int from_tty)
c906108c 728{
52f0bd74 729 struct so_list *so = NULL; /* link map state variable */
c906108c
SS
730 int header_done = 0;
731 int addr_width;
c906108c 732
84eb3c4f 733 /* "0x", a little whitespace, and two hex digits per byte of pointers. */
819844ad 734 addr_width = 4 + (gdbarch_ptr_bit (current_gdbarch) / 4);
c906108c 735
105b175f 736 update_solib_list (from_tty, 0);
07cd4b97
JB
737
738 for (so = so_list_head; so; so = so->next)
c906108c 739 {
c5aa993b 740 if (so->so_name[0])
c906108c
SS
741 {
742 if (!header_done)
743 {
c5aa993b
JM
744 printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
745 addr_width, "To", "Syms Read",
746 "Shared Object Library");
c906108c
SS
747 header_done++;
748 }
749
750 printf_unfiltered ("%-*s", addr_width,
cfa9d6d9 751 so->addr_high != 0
bb599908 752 ? hex_string_custom (
cfa9d6d9 753 (LONGEST) so->addr_low,
bb599908 754 addr_width - 4)
749499cb 755 : "");
c906108c 756 printf_unfiltered ("%-*s", addr_width,
cfa9d6d9 757 so->addr_high != 0
bb599908 758 ? hex_string_custom (
cfa9d6d9 759 (LONGEST) so->addr_high,
bb599908 760 addr_width - 4)
749499cb 761 : "");
c5aa993b
JM
762 printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
763 printf_unfiltered ("%s\n", so->so_name);
c906108c
SS
764 }
765 }
766 if (so_list_head == NULL)
767 {
a3f17187 768 printf_unfiltered (_("No shared libraries loaded at this time.\n"));
c906108c
SS
769 }
770}
771
772/*
773
c5aa993b 774 GLOBAL FUNCTION
c906108c 775
c5aa993b 776 solib_address -- check to see if an address is in a shared lib
c906108c 777
c5aa993b 778 SYNOPSIS
c906108c 779
c5aa993b 780 char * solib_address (CORE_ADDR address)
c906108c 781
c5aa993b 782 DESCRIPTION
c906108c 783
c5aa993b
JM
784 Provides a hook for other gdb routines to discover whether or
785 not a particular address is within the mapped address space of
749499cb 786 a shared library.
c906108c 787
c5aa993b
JM
788 For example, this routine is called at one point to disable
789 breakpoints which are in shared libraries that are not currently
790 mapped in.
c906108c
SS
791 */
792
793char *
fba45db2 794solib_address (CORE_ADDR address)
c906108c 795{
52f0bd74 796 struct so_list *so = 0; /* link map state variable */
c5aa993b 797
07cd4b97 798 for (so = so_list_head; so; so = so->next)
c906108c 799 {
749499cb
KB
800 struct section_table *p;
801
802 for (p = so->sections; p < so->sections_end; p++)
803 {
804 if (p->addr <= address && address < p->endaddr)
805 return (so->so_name);
806 }
c906108c 807 }
07cd4b97 808
c906108c
SS
809 return (0);
810}
811
812/* Called by free_all_symtabs */
813
c5aa993b 814void
fba45db2 815clear_solib (void)
c906108c 816{
66aba65d
MK
817 struct target_so_ops *ops = solib_ops (current_gdbarch);
818
085dd6e6
JM
819 /* This function is expected to handle ELF shared libraries. It is
820 also used on Solaris, which can run either ELF or a.out binaries
821 (for compatibility with SunOS 4), both of which can use shared
822 libraries. So we don't know whether we have an ELF executable or
823 an a.out executable until the user chooses an executable file.
824
825 ELF shared libraries don't get mapped into the address space
826 until after the program starts, so we'd better not try to insert
827 breakpoints in them immediately. We have to wait until the
828 dynamic linker has loaded them; we'll hit a bp_shlib_event
829 breakpoint (look for calls to create_solib_event_breakpoint) when
830 it's ready.
831
832 SunOS shared libraries seem to be different --- they're present
833 as soon as the process begins execution, so there's no need to
834 put off inserting breakpoints. There's also nowhere to put a
835 bp_shlib_event breakpoint, so if we put it off, we'll never get
836 around to it.
837
838 So: disable breakpoints only if we're using ELF shared libs. */
839 if (exec_bfd != NULL
840 && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
841 disable_breakpoints_in_shlibs (1);
842
c906108c
SS
843 while (so_list_head)
844 {
07cd4b97
JB
845 struct so_list *so = so_list_head;
846 so_list_head = so->next;
2069d78d
KB
847 if (so->abfd)
848 remove_target_sections (so->abfd);
07cd4b97 849 free_so (so);
c906108c 850 }
07cd4b97 851
66aba65d 852 ops->clear_solib ();
c906108c
SS
853}
854
855static void
4efb68b1 856do_clear_solib (void *dummy)
c906108c
SS
857{
858 solib_cleanup_queued = 0;
859 clear_solib ();
860}
861
13437d4b 862/* GLOBAL FUNCTION
c5aa993b
JM
863
864 solib_create_inferior_hook -- shared library startup support
865
866 SYNOPSIS
867
7095b863 868 void solib_create_inferior_hook ()
c5aa993b
JM
869
870 DESCRIPTION
871
872 When gdb starts up the inferior, it nurses it along (through the
873 shell) until it is ready to execute it's first instruction. At this
874 point, this function gets called via expansion of the macro
13437d4b 875 SOLIB_CREATE_INFERIOR_HOOK. */
c5aa993b
JM
876
877void
fba45db2 878solib_create_inferior_hook (void)
c906108c 879{
66aba65d
MK
880 struct target_so_ops *ops = solib_ops (current_gdbarch);
881 ops->solib_create_inferior_hook();
c906108c
SS
882}
883
d7fa2ae2
KB
884/* GLOBAL FUNCTION
885
886 in_solib_dynsym_resolve_code -- check to see if an address is in
887 dynamic loader's dynamic symbol
888 resolution code
889
890 SYNOPSIS
891
892 int in_solib_dynsym_resolve_code (CORE_ADDR pc)
893
894 DESCRIPTION
895
896 Determine if PC is in the dynamic linker's symbol resolution
897 code. Return 1 if so, 0 otherwise.
898*/
899
900int
901in_solib_dynsym_resolve_code (CORE_ADDR pc)
902{
66aba65d
MK
903 struct target_so_ops *ops = solib_ops (current_gdbarch);
904 return ops->in_dynsym_resolve_code (pc);
d7fa2ae2 905}
c906108c
SS
906
907/*
908
c5aa993b 909 LOCAL FUNCTION
c906108c 910
c5aa993b 911 sharedlibrary_command -- handle command to explicitly add library
c906108c 912
c5aa993b 913 SYNOPSIS
c906108c 914
c5aa993b 915 static void sharedlibrary_command (char *args, int from_tty)
c906108c 916
c5aa993b 917 DESCRIPTION
c906108c 918
c5aa993b 919 */
c906108c
SS
920
921static void
fba45db2 922sharedlibrary_command (char *args, int from_tty)
c906108c
SS
923{
924 dont_repeat ();
990f9fe3 925 solib_add (args, from_tty, (struct target_ops *) 0, 1);
c906108c
SS
926}
927
cb0ba49e
MS
928/* LOCAL FUNCTION
929
930 no_shared_libraries -- handle command to explicitly discard symbols
931 from shared libraries.
932
933 DESCRIPTION
934
935 Implements the command "nosharedlibrary", which discards symbols
936 that have been auto-loaded from shared libraries. Symbols from
937 shared libraries that were added by explicit request of the user
938 are not discarded. Also called from remote.c. */
939
c60a7562
MS
940void
941no_shared_libraries (char *ignored, int from_tty)
942{
943 objfile_purge_solibs ();
944 do_clear_solib (NULL);
945}
c906108c 946
cf466558 947static void
f397e303
AC
948reload_shared_libraries (char *ignored, int from_tty,
949 struct cmd_list_element *e)
cf466558
KB
950{
951 no_shared_libraries (NULL, from_tty);
952 solib_add (NULL, from_tty, NULL, auto_solib_add);
953}
954
920d2a44
AC
955static void
956show_auto_solib_add (struct ui_file *file, int from_tty,
957 struct cmd_list_element *c, const char *value)
958{
959 fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"),
960 value);
961}
962
963
3a40aaa0
UW
964/* Handler for library-specific lookup of global symbol NAME in OBJFILE. Call
965 the library-specific handler if it is installed for the current target. */
966
967struct symbol *
968solib_global_lookup (const struct objfile *objfile,
969 const char *name,
970 const char *linkage_name,
971 const domain_enum domain,
972 struct symtab **symtab)
973{
974 if (current_target_so_ops->lookup_lib_global_symbol != NULL)
975 return current_target_so_ops->lookup_lib_global_symbol (objfile,
976 name, linkage_name, domain, symtab);
977
978 return NULL;
979}
980
981
a78f21af
AC
982extern initialize_file_ftype _initialize_solib; /* -Wmissing-prototypes */
983
c906108c 984void
fba45db2 985_initialize_solib (void)
c906108c 986{
fa58ee11
EZ
987 struct cmd_list_element *c;
988
66aba65d
MK
989 solib_data = gdbarch_data_register_pre_init (solib_init);
990
c906108c 991 add_com ("sharedlibrary", class_files, sharedlibrary_command,
1bedd215 992 _("Load shared object library symbols for files matching REGEXP."));
c5aa993b 993 add_info ("sharedlibrary", info_sharedlibrary_command,
1bedd215 994 _("Status of loaded shared object libraries."));
c60a7562 995 add_com ("nosharedlibrary", class_files, no_shared_libraries,
1bedd215 996 _("Unload all shared object library symbols."));
c906108c 997
5bf193a2
AC
998 add_setshow_boolean_cmd ("auto-solib-add", class_support,
999 &auto_solib_add, _("\
1000Set autoloading of shared library symbols."), _("\
1001Show autoloading of shared library symbols."), _("\
b7209cb4
FF
1002If \"on\", symbols from all shared object libraries will be loaded\n\
1003automatically when the inferior begins execution, when the dynamic linker\n\
1004informs gdb that a new library has been loaded, or when attaching to the\n\
5bf193a2
AC
1005inferior. Otherwise, symbols must be loaded manually, using `sharedlibrary'."),
1006 NULL,
920d2a44 1007 show_auto_solib_add,
5bf193a2 1008 &setlist, &showlist);
c906108c 1009
f822c95b
DJ
1010 add_setshow_filename_cmd ("sysroot", class_support,
1011 &gdb_sysroot, _("\
1012Set an alternate system root."), _("\
1013Show the current system root."), _("\
1014The system root is used to load absolute shared library symbol files.\n\
1015For other (relative) files, you can add directories using\n\
1016`set solib-search-path'."),
f397e303
AC
1017 reload_shared_libraries,
1018 NULL,
1019 &setlist, &showlist);
c906108c 1020
f822c95b
DJ
1021 add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1022 &setlist);
1023 add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1024 &showlist);
030292b7 1025
525226b5
AC
1026 add_setshow_optional_filename_cmd ("solib-search-path", class_support,
1027 &solib_search_path, _("\
1028Set the search path for loading non-absolute shared library symbol files."), _("\
1029Show the search path for loading non-absolute shared library symbol files."), _("\
1030This takes precedence over the environment variables PATH and LD_LIBRARY_PATH."),
1031 reload_shared_libraries,
920d2a44 1032 show_solib_search_path,
525226b5 1033 &setlist, &showlist);
c906108c 1034}
This page took 0.728427 seconds and 4 git commands to generate.