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