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