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