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