Fix bugs in handling of the .restore directive.
[deliverable/binutils-gdb.git] / gdb / solib.c
CommitLineData
13437d4b 1/* Handle shared libraries for GDB, the GNU Debugger.
4fcf66da 2 Copyright 1990, 91, 92, 93, 94, 95, 96, 98, 1999, 2000, 2001
c906108c 3 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
c906108c 21
c906108c
SS
22#include "defs.h"
23
c906108c 24#include <sys/types.h>
c906108c 25#include <fcntl.h>
13437d4b 26#include "gdb_string.h"
c906108c
SS
27#include "symtab.h"
28#include "bfd.h"
29#include "symfile.h"
30#include "objfiles.h"
31#include "gdbcore.h"
32#include "command.h"
33#include "target.h"
34#include "frame.h"
88987551 35#include "gdb_regex.h"
c906108c
SS
36#include "inferior.h"
37#include "environ.h"
38#include "language.h"
39#include "gdbcmd.h"
fa58ee11 40#include "completer.h"
c906108c 41
13437d4b 42#include "solist.h"
c906108c 43
13437d4b 44/* external data declarations */
c906108c 45
13437d4b
KB
46/* FIXME: gdbarch needs to control this variable */
47struct target_so_ops *current_target_so_ops;
23e04971
MS
48
49/* local data declarations */
07cd4b97 50
c906108c 51static struct so_list *so_list_head; /* List of known shared objects */
23e04971 52
c5aa993b 53static int solib_cleanup_queued = 0; /* make_run_cleanup called */
c906108c 54
c906108c
SS
55/* Local function prototypes */
56
a14ed312 57static void do_clear_solib (PTR);
c906108c 58
c906108c
SS
59/* If non-zero, this is a prefix that will be added to the front of the name
60 shared libraries with an absolute filename for loading. */
61static char *solib_absolute_prefix = NULL;
62
63/* If non-empty, this is a search path for loading non-absolute shared library
64 symbol files. This takes precedence over the environment variables PATH
65 and LD_LIBRARY_PATH. */
66static char *solib_search_path = NULL;
67
e4f7b8c8
MS
68/*
69
70 GLOBAL FUNCTION
71
72 solib_open -- Find a shared library file and open it.
73
74 SYNOPSIS
75
76 int solib_open (char *in_patname, char **found_pathname);
77
78 DESCRIPTION
79
80 Global variable SOLIB_ABSOLUTE_PREFIX is used as a prefix directory
81 to search for shared libraries if they have an absolute path.
82
83 Global variable SOLIB_SEARCH_PATH is used as a prefix directory
84 (or set of directories, as in LD_LIBRARY_PATH) to search for all
85 shared libraries if not found in SOLIB_ABSOLUTE_PREFIX.
86
87 Search order:
88 * If path is absolute, look in SOLIB_ABSOLUTE_PREFIX.
b21f0843 89 * If path is absolute or relative, look for it literally (unmodified).
e4f7b8c8
MS
90 * Look in SOLIB_SEARCH_PATH.
91 * Look in inferior's $PATH.
92 * Look in inferior's $LD_LIBRARY_PATH.
93
94 RETURNS
b21f0843 95
e4f7b8c8
MS
96 file handle for opened solib, or -1 for failure. */
97
98int
99solib_open (char *in_pathname, char **found_pathname)
100{
101 int found_file = -1;
102 char *temp_pathname = NULL;
103
b21f0843 104 if (strchr (in_pathname, SLASH_CHAR))
e4f7b8c8 105 {
b21f0843 106 if (! ROOTED_P (in_pathname) || solib_absolute_prefix == NULL)
a7ec76fe
KB
107 temp_pathname = in_pathname;
108 else
109 {
b21f0843 110 int prefix_len = strlen (solib_absolute_prefix);
a7ec76fe
KB
111
112 /* Remove trailing slashes from absolute prefix. */
b21f0843
MK
113 while (prefix_len > 0
114 && SLASH_P (solib_absolute_prefix[prefix_len - 1]))
a7ec76fe
KB
115 prefix_len--;
116
117 /* Cat the prefixed pathname together. */
118 temp_pathname = alloca (prefix_len + strlen (in_pathname) + 1);
119 strncpy (temp_pathname, solib_absolute_prefix, prefix_len);
120 temp_pathname[prefix_len] = '\0';
121 strcat (temp_pathname, in_pathname);
a7ec76fe 122 }
b21f0843 123
e4f7b8c8
MS
124 /* Now see if we can open it. */
125 found_file = open (temp_pathname, O_RDONLY, 0);
126 }
127
128 /* If not found, next search the solib_search_path (if any). */
129 if (found_file < 0 && solib_search_path != NULL)
130 found_file = openp (solib_search_path,
131 1, in_pathname, O_RDONLY, 0, &temp_pathname);
132
133 /* If not found, next search the inferior's $PATH environment variable. */
134 if (found_file < 0 && solib_search_path != NULL)
135 found_file = openp (get_in_environ (inferior_environ, "PATH"),
136 1, in_pathname, O_RDONLY, 0, &temp_pathname);
137
138 /* If not found, next search the inferior's $LD_LIBRARY_PATH
139 environment variable. */
140 if (found_file < 0 && solib_search_path != NULL)
141 found_file = openp (get_in_environ (inferior_environ, "LD_LIBRARY_PATH"),
142 1, in_pathname, O_RDONLY, 0, &temp_pathname);
143
144 /* Done. If not found, tough luck. Return found_file and
145 (optionally) found_pathname. */
a7ec76fe 146 if (found_pathname != NULL && temp_pathname != NULL)
4fcf66da 147 *found_pathname = xstrdup (temp_pathname);
e4f7b8c8
MS
148 return found_file;
149}
150
151
c906108c
SS
152/*
153
c5aa993b 154 LOCAL FUNCTION
c906108c 155
c5aa993b 156 solib_map_sections -- open bfd and build sections for shared lib
c906108c 157
c5aa993b 158 SYNOPSIS
c906108c 159
c5aa993b 160 static int solib_map_sections (struct so_list *so)
c906108c 161
c5aa993b 162 DESCRIPTION
c906108c 163
c5aa993b
JM
164 Given a pointer to one of the shared objects in our list
165 of mapped objects, use the recorded name to open a bfd
166 descriptor for the object, build a section table, and then
167 relocate all the section addresses by the base address at
168 which the shared object was mapped.
c906108c 169
c5aa993b 170 FIXMES
c906108c 171
c5aa993b
JM
172 In most (all?) cases the shared object file name recorded in the
173 dynamic linkage tables will be a fully qualified pathname. For
174 cases where it isn't, do we really mimic the systems search
175 mechanism correctly in the below code (particularly the tilde
176 expansion stuff?).
c906108c
SS
177 */
178
179static int
fba45db2 180solib_map_sections (PTR arg)
c906108c
SS
181{
182 struct so_list *so = (struct so_list *) arg; /* catch_errors bogon */
183 char *filename;
184 char *scratch_pathname;
185 int scratch_chan;
186 struct section_table *p;
187 struct cleanup *old_chain;
188 bfd *abfd;
c5aa993b
JM
189
190 filename = tilde_expand (so->so_name);
191
b8c9b27d 192 old_chain = make_cleanup (xfree, filename);
e4f7b8c8 193 scratch_chan = solib_open (filename, &scratch_pathname);
c906108c 194
c906108c
SS
195 if (scratch_chan < 0)
196 {
13437d4b
KB
197 perror_with_name (filename);
198 }
104c1213 199
e4f7b8c8 200 /* Leave scratch_pathname allocated. abfd->name will point to it. */
13437d4b
KB
201 abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
202 if (!abfd)
23e04971 203 {
13437d4b
KB
204 close (scratch_chan);
205 error ("Could not open `%s' as an executable file: %s",
206 scratch_pathname, bfd_errmsg (bfd_get_error ()));
207 }
e4f7b8c8 208
13437d4b
KB
209 /* Leave bfd open, core_xfer_memory and "info files" need it. */
210 so->abfd = abfd;
211 abfd->cacheable = true;
23e04971 212
e4f7b8c8
MS
213 /* copy full path name into so_name, so that later symbol_file_add
214 can find it */
13437d4b
KB
215 if (strlen (scratch_pathname) >= SO_NAME_MAX_PATH_SIZE)
216 error ("Full path name length of shared library exceeds SO_NAME_MAX_PATH_SIZE in so_list structure.");
217 strcpy (so->so_name, scratch_pathname);
23e04971 218
13437d4b
KB
219 if (!bfd_check_format (abfd, bfd_object))
220 {
221 error ("\"%s\": not in executable format: %s.",
222 scratch_pathname, bfd_errmsg (bfd_get_error ()));
23e04971 223 }
13437d4b 224 if (build_section_table (abfd, &so->sections, &so->sections_end))
23e04971 225 {
13437d4b
KB
226 error ("Can't find the file sections in `%s': %s",
227 bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
23e04971 228 }
104c1213 229
13437d4b 230 for (p = so->sections; p < so->sections_end; p++)
104c1213 231 {
13437d4b
KB
232 /* Relocate the section binding addresses as recorded in the shared
233 object's file by the base address to which the object was actually
234 mapped. */
749499cb 235 TARGET_SO_RELOCATE_SECTION_ADDRESSES (so, p);
13437d4b
KB
236 if (STREQ (p->the_bfd_section->name, ".text"))
237 {
238 so->textsection = p;
239 }
104c1213
JM
240 }
241
13437d4b
KB
242 /* Free the file names, close the file now. */
243 do_cleanups (old_chain);
104c1213 244
13437d4b 245 return (1);
104c1213 246}
c906108c 247
07cd4b97 248/* LOCAL FUNCTION
c906108c 249
07cd4b97 250 free_so --- free a `struct so_list' object
c906108c 251
c5aa993b 252 SYNOPSIS
c906108c 253
07cd4b97 254 void free_so (struct so_list *so)
c906108c 255
c5aa993b 256 DESCRIPTION
c906108c 257
07cd4b97
JB
258 Free the storage associated with the `struct so_list' object SO.
259 If we have opened a BFD for SO, close it.
c906108c 260
07cd4b97
JB
261 The caller is responsible for removing SO from whatever list it is
262 a member of. If we have placed SO's sections in some target's
263 section table, the caller is responsible for removing them.
c906108c 264
07cd4b97
JB
265 This function doesn't mess with objfiles at all. If there is an
266 objfile associated with SO that needs to be removed, the caller is
267 responsible for taking care of that. */
268
13437d4b 269void
07cd4b97 270free_so (struct so_list *so)
c906108c 271{
07cd4b97 272 char *bfd_filename = 0;
c5aa993b 273
07cd4b97 274 if (so->sections)
b8c9b27d 275 xfree (so->sections);
07cd4b97
JB
276
277 if (so->abfd)
c906108c 278 {
07cd4b97
JB
279 bfd_filename = bfd_get_filename (so->abfd);
280 if (! bfd_close (so->abfd))
281 warning ("cannot close \"%s\": %s",
282 bfd_filename, bfd_errmsg (bfd_get_error ()));
c906108c 283 }
07cd4b97
JB
284
285 if (bfd_filename)
b8c9b27d 286 xfree (bfd_filename);
07cd4b97 287
13437d4b 288 TARGET_SO_FREE_SO (so);
07cd4b97 289
b8c9b27d 290 xfree (so);
c906108c
SS
291}
292
07cd4b97 293
c906108c
SS
294/* A small stub to get us past the arg-passing pinhole of catch_errors. */
295
296static int
fba45db2 297symbol_add_stub (PTR arg)
c906108c 298{
07cd4b97 299 register struct so_list *so = (struct so_list *) arg; /* catch_errs bogon */
62557bbc 300 struct section_addr_info *sap;
c906108c 301
07cd4b97
JB
302 /* Have we already loaded this shared object? */
303 ALL_OBJFILES (so->objfile)
304 {
305 if (strcmp (so->objfile->name, so->so_name) == 0)
306 return 1;
307 }
308
62557bbc
KB
309 sap = build_section_addr_info_from_section_table (so->sections,
310 so->sections_end);
e7cf9df1 311
62557bbc
KB
312 so->objfile = symbol_file_add (so->so_name, so->from_tty,
313 sap, 0, OBJF_SHARED);
314 free_section_addr_info (sap);
c906108c 315
07cd4b97 316 return (1);
c906108c
SS
317}
318
c906108c 319
07cd4b97 320/* LOCAL FUNCTION
c906108c 321
105b175f 322 update_solib_list --- synchronize GDB's shared object list with inferior's
c906108c 323
c5aa993b 324 SYNOPSIS
c906108c 325
105b175f 326 void update_solib_list (int from_tty, struct target_ops *TARGET)
c906108c 327
07cd4b97 328 Extract the list of currently loaded shared objects from the
105b175f
JB
329 inferior, and compare it with the list of shared objects currently
330 in GDB's so_list_head list. Edit so_list_head to bring it in sync
331 with the inferior's new list.
c906108c 332
105b175f
JB
333 If we notice that the inferior has unloaded some shared objects,
334 free any symbolic info GDB had read about those shared objects.
335
336 Don't load symbolic info for any new shared objects; just add them
337 to the list, and leave their symbols_loaded flag clear.
07cd4b97
JB
338
339 If FROM_TTY is non-null, feel free to print messages about what
340 we're doing.
c906108c 341
07cd4b97
JB
342 If TARGET is non-null, add the sections of all new shared objects
343 to TARGET's section table. Note that this doesn't remove any
344 sections for shared objects that have been unloaded, and it
345 doesn't check to see if the new shared objects are already present in
346 the section table. But we only use this for core files and
347 processes we've just attached to, so that's okay. */
c906108c 348
07cd4b97 349void
105b175f 350update_solib_list (int from_tty, struct target_ops *target)
07cd4b97 351{
13437d4b 352 struct so_list *inferior = TARGET_SO_CURRENT_SOS ();
07cd4b97
JB
353 struct so_list *gdb, **gdb_link;
354
104c1213
JM
355 /* If we are attaching to a running process for which we
356 have not opened a symbol file, we may be able to get its
357 symbols now! */
358 if (attach_flag &&
359 symfile_objfile == NULL)
13437d4b 360 catch_errors (TARGET_SO_OPEN_SYMBOL_FILE_OBJECT, (PTR) &from_tty,
104c1213
JM
361 "Error reading attached process's symbol file.\n",
362 RETURN_MASK_ALL);
363
07cd4b97
JB
364 /* Since this function might actually add some elements to the
365 so_list_head list, arrange for it to be cleaned up when
366 appropriate. */
367 if (!solib_cleanup_queued)
368 {
369 make_run_cleanup (do_clear_solib, NULL);
370 solib_cleanup_queued = 1;
c906108c 371 }
c5aa993b 372
07cd4b97
JB
373 /* GDB and the inferior's dynamic linker each maintain their own
374 list of currently loaded shared objects; we want to bring the
375 former in sync with the latter. Scan both lists, seeing which
376 shared objects appear where. There are three cases:
377
378 - A shared object appears on both lists. This means that GDB
105b175f
JB
379 knows about it already, and it's still loaded in the inferior.
380 Nothing needs to happen.
07cd4b97
JB
381
382 - A shared object appears only on GDB's list. This means that
105b175f
JB
383 the inferior has unloaded it. We should remove the shared
384 object from GDB's tables.
07cd4b97
JB
385
386 - A shared object appears only on the inferior's list. This
105b175f
JB
387 means that it's just been loaded. We should add it to GDB's
388 tables.
07cd4b97
JB
389
390 So we walk GDB's list, checking each entry to see if it appears
391 in the inferior's list too. If it does, no action is needed, and
392 we remove it from the inferior's list. If it doesn't, the
393 inferior has unloaded it, and we remove it from GDB's list. By
394 the time we're done walking GDB's list, the inferior's list
395 contains only the new shared objects, which we then add. */
396
397 gdb = so_list_head;
398 gdb_link = &so_list_head;
399 while (gdb)
c906108c 400 {
07cd4b97
JB
401 struct so_list *i = inferior;
402 struct so_list **i_link = &inferior;
403
404 /* Check to see whether the shared object *gdb also appears in
405 the inferior's current list. */
406 while (i)
c906108c 407 {
07cd4b97
JB
408 if (! strcmp (gdb->so_original_name, i->so_original_name))
409 break;
410
411 i_link = &i->next;
412 i = *i_link;
c906108c 413 }
c5aa993b 414
07cd4b97
JB
415 /* If the shared object appears on the inferior's list too, then
416 it's still loaded, so we don't need to do anything. Delete
417 it from the inferior's list, and leave it on GDB's list. */
418 if (i)
c906108c 419 {
07cd4b97 420 *i_link = i->next;
07cd4b97
JB
421 free_so (i);
422 gdb_link = &gdb->next;
423 gdb = *gdb_link;
424 }
425
426 /* If it's not on the inferior's list, remove it from GDB's tables. */
427 else
428 {
429 *gdb_link = gdb->next;
07cd4b97
JB
430
431 /* Unless the user loaded it explicitly, free SO's objfile. */
e8930304 432 if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
07cd4b97
JB
433 free_objfile (gdb->objfile);
434
435 /* Some targets' section tables might be referring to
436 sections from so->abfd; remove them. */
437 remove_target_sections (gdb->abfd);
438
439 free_so (gdb);
440 gdb = *gdb_link;
c906108c
SS
441 }
442 }
c5aa993b 443
07cd4b97
JB
444 /* Now the inferior's list contains only shared objects that don't
445 appear in GDB's list --- those that are newly loaded. Add them
e8930304 446 to GDB's shared object list. */
07cd4b97 447 if (inferior)
c906108c 448 {
07cd4b97
JB
449 struct so_list *i;
450
451 /* Add the new shared objects to GDB's list. */
452 *gdb_link = inferior;
453
e8930304 454 /* Fill in the rest of each of the `struct so_list' nodes. */
07cd4b97 455 for (i = inferior; i; i = i->next)
c906108c 456 {
07cd4b97
JB
457 i->from_tty = from_tty;
458
459 /* Fill in the rest of the `struct so_list' node. */
460 catch_errors (solib_map_sections, i,
461 "Error while mapping shared library sections:\n",
462 RETURN_MASK_ALL);
07cd4b97
JB
463 }
464
465 /* If requested, add the shared objects' sections to the the
466 TARGET's section table. */
467 if (target)
468 {
469 int new_sections;
470
471 /* Figure out how many sections we'll need to add in total. */
472 new_sections = 0;
473 for (i = inferior; i; i = i->next)
474 new_sections += (i->sections_end - i->sections);
475
476 if (new_sections > 0)
c906108c 477 {
07cd4b97
JB
478 int space = target_resize_to_sections (target, new_sections);
479
480 for (i = inferior; i; i = i->next)
481 {
482 int count = (i->sections_end - i->sections);
483 memcpy (target->to_sections + space,
484 i->sections,
485 count * sizeof (i->sections[0]));
486 space += count;
487 }
c906108c
SS
488 }
489 }
e8930304 490 }
105b175f
JB
491}
492
493
494/* GLOBAL FUNCTION
495
496 solib_add -- read in symbol info for newly added shared libraries
497
498 SYNOPSIS
499
500 void solib_add (char *pattern, int from_tty, struct target_ops *TARGET)
501
502 DESCRIPTION
503
504 Read in symbolic information for any shared objects whose names
505 match PATTERN. (If we've already read a shared object's symbol
506 info, leave it alone.) If PATTERN is zero, read them all.
507
508 FROM_TTY and TARGET are as described for update_solib_list, above. */
509
510void
511solib_add (char *pattern, int from_tty, struct target_ops *target)
512{
513 struct so_list *gdb;
514
515 if (pattern)
516 {
517 char *re_err = re_comp (pattern);
518
519 if (re_err)
520 error ("Invalid regexp: %s", re_err);
521 }
522
523 update_solib_list (from_tty, target);
c906108c 524
105b175f
JB
525 /* Walk the list of currently loaded shared libraries, and read
526 symbols for any that match the pattern --- or any whose symbols
527 aren't already loaded, if no pattern was given. */
e8930304
JB
528 {
529 int any_matches = 0;
530 int loaded_any_symbols = 0;
c906108c 531
e8930304
JB
532 for (gdb = so_list_head; gdb; gdb = gdb->next)
533 if (! pattern || re_exec (gdb->so_name))
534 {
535 any_matches = 1;
536
537 if (gdb->symbols_loaded)
538 {
539 if (from_tty)
540 printf_unfiltered ("Symbols already loaded for %s\n",
541 gdb->so_name);
542 }
543 else
544 {
545 if (catch_errors
546 (symbol_add_stub, gdb,
547 "Error while reading shared library symbols:\n",
548 RETURN_MASK_ALL))
549 {
550 if (from_tty)
551 printf_unfiltered ("Loaded symbols for %s\n",
552 gdb->so_name);
553 gdb->symbols_loaded = 1;
554 loaded_any_symbols = 1;
555 }
556 }
557 }
558
559 if (from_tty && pattern && ! any_matches)
560 printf_unfiltered
561 ("No loaded shared libraries match the pattern `%s'.\n", pattern);
562
563 if (loaded_any_symbols)
564 {
565 /* Getting new symbols may change our opinion about what is
566 frameless. */
567 reinit_frame_cache ();
568
13437d4b 569 TARGET_SO_SPECIAL_SYMBOL_HANDLING ();
e8930304
JB
570 }
571 }
c906108c
SS
572}
573
07cd4b97 574
c906108c
SS
575/*
576
c5aa993b 577 LOCAL FUNCTION
c906108c 578
c5aa993b 579 info_sharedlibrary_command -- code for "info sharedlibrary"
c906108c 580
c5aa993b 581 SYNOPSIS
c906108c 582
c5aa993b 583 static void info_sharedlibrary_command ()
c906108c 584
c5aa993b 585 DESCRIPTION
c906108c 586
c5aa993b
JM
587 Walk through the shared library list and print information
588 about each attached library.
589 */
c906108c
SS
590
591static void
fba45db2 592info_sharedlibrary_command (char *ignore, int from_tty)
c906108c 593{
c5aa993b 594 register struct so_list *so = NULL; /* link map state variable */
c906108c
SS
595 int header_done = 0;
596 int addr_width;
597 char *addr_fmt;
f5b8946c 598 int arch_size;
c906108c
SS
599
600 if (exec_bfd == NULL)
601 {
4ce44c66 602 printf_unfiltered ("No executable file.\n");
c906108c
SS
603 return;
604 }
605
6ceadee4 606 arch_size = bfd_get_arch_size (exec_bfd);
f5b8946c
MS
607 /* Default to 32-bit in case of failure (non-elf). */
608 if (arch_size == 32 || arch_size == -1)
609 {
610 addr_width = 8 + 4;
611 addr_fmt = "08l";
612 }
613 else if (arch_size == 64)
614 {
615 addr_width = 16 + 4;
616 addr_fmt = "016l";
617 }
7f7e9482
AC
618 else
619 {
8e65ff28
AC
620 internal_error (__FILE__, __LINE__,
621 "bfd_get_arch_size() returned unknown size %d",
622 arch_size);
7f7e9482 623 }
c906108c 624
105b175f 625 update_solib_list (from_tty, 0);
07cd4b97
JB
626
627 for (so = so_list_head; so; so = so->next)
c906108c 628 {
c5aa993b 629 if (so->so_name[0])
c906108c
SS
630 {
631 if (!header_done)
632 {
c5aa993b
JM
633 printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
634 addr_width, "To", "Syms Read",
635 "Shared Object Library");
c906108c
SS
636 header_done++;
637 }
638
639 printf_unfiltered ("%-*s", addr_width,
749499cb 640 so->textsection != NULL
a43ad351
MH
641 ? longest_local_hex_string_custom (
642 (LONGEST) so->textsection->addr,
749499cb
KB
643 addr_fmt)
644 : "");
c906108c 645 printf_unfiltered ("%-*s", addr_width,
749499cb 646 so->textsection != NULL
a43ad351
MH
647 ? longest_local_hex_string_custom (
648 (LONGEST) so->textsection->endaddr,
749499cb
KB
649 addr_fmt)
650 : "");
c5aa993b
JM
651 printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
652 printf_unfiltered ("%s\n", so->so_name);
c906108c
SS
653 }
654 }
655 if (so_list_head == NULL)
656 {
c5aa993b 657 printf_unfiltered ("No shared libraries loaded at this time.\n");
c906108c
SS
658 }
659}
660
661/*
662
c5aa993b 663 GLOBAL FUNCTION
c906108c 664
c5aa993b 665 solib_address -- check to see if an address is in a shared lib
c906108c 666
c5aa993b 667 SYNOPSIS
c906108c 668
c5aa993b 669 char * solib_address (CORE_ADDR address)
c906108c 670
c5aa993b 671 DESCRIPTION
c906108c 672
c5aa993b
JM
673 Provides a hook for other gdb routines to discover whether or
674 not a particular address is within the mapped address space of
749499cb 675 a shared library.
c906108c 676
c5aa993b
JM
677 For example, this routine is called at one point to disable
678 breakpoints which are in shared libraries that are not currently
679 mapped in.
c906108c
SS
680 */
681
682char *
fba45db2 683solib_address (CORE_ADDR address)
c906108c 684{
c5aa993b
JM
685 register struct so_list *so = 0; /* link map state variable */
686
07cd4b97 687 for (so = so_list_head; so; so = so->next)
c906108c 688 {
749499cb
KB
689 struct section_table *p;
690
691 for (p = so->sections; p < so->sections_end; p++)
692 {
693 if (p->addr <= address && address < p->endaddr)
694 return (so->so_name);
695 }
c906108c 696 }
07cd4b97 697
c906108c
SS
698 return (0);
699}
700
701/* Called by free_all_symtabs */
702
c5aa993b 703void
fba45db2 704clear_solib (void)
c906108c 705{
085dd6e6
JM
706 /* This function is expected to handle ELF shared libraries. It is
707 also used on Solaris, which can run either ELF or a.out binaries
708 (for compatibility with SunOS 4), both of which can use shared
709 libraries. So we don't know whether we have an ELF executable or
710 an a.out executable until the user chooses an executable file.
711
712 ELF shared libraries don't get mapped into the address space
713 until after the program starts, so we'd better not try to insert
714 breakpoints in them immediately. We have to wait until the
715 dynamic linker has loaded them; we'll hit a bp_shlib_event
716 breakpoint (look for calls to create_solib_event_breakpoint) when
717 it's ready.
718
719 SunOS shared libraries seem to be different --- they're present
720 as soon as the process begins execution, so there's no need to
721 put off inserting breakpoints. There's also nowhere to put a
722 bp_shlib_event breakpoint, so if we put it off, we'll never get
723 around to it.
724
725 So: disable breakpoints only if we're using ELF shared libs. */
726 if (exec_bfd != NULL
727 && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
728 disable_breakpoints_in_shlibs (1);
729
c906108c
SS
730 while (so_list_head)
731 {
07cd4b97
JB
732 struct so_list *so = so_list_head;
733 so_list_head = so->next;
734 free_so (so);
c906108c 735 }
07cd4b97 736
13437d4b 737 TARGET_SO_CLEAR_SOLIB ();
c906108c
SS
738}
739
740static void
fba45db2 741do_clear_solib (PTR dummy)
c906108c
SS
742{
743 solib_cleanup_queued = 0;
744 clear_solib ();
745}
746
13437d4b 747/* GLOBAL FUNCTION
c5aa993b
JM
748
749 solib_create_inferior_hook -- shared library startup support
750
751 SYNOPSIS
752
753 void solib_create_inferior_hook()
754
755 DESCRIPTION
756
757 When gdb starts up the inferior, it nurses it along (through the
758 shell) until it is ready to execute it's first instruction. At this
759 point, this function gets called via expansion of the macro
13437d4b 760 SOLIB_CREATE_INFERIOR_HOOK. */
c5aa993b
JM
761
762void
fba45db2 763solib_create_inferior_hook (void)
c906108c 764{
13437d4b 765 TARGET_SO_SOLIB_CREATE_INFERIOR_HOOK ();
c906108c
SS
766}
767
768
769/*
770
c5aa993b 771 LOCAL FUNCTION
c906108c 772
c5aa993b 773 sharedlibrary_command -- handle command to explicitly add library
c906108c 774
c5aa993b 775 SYNOPSIS
c906108c 776
c5aa993b 777 static void sharedlibrary_command (char *args, int from_tty)
c906108c 778
c5aa993b 779 DESCRIPTION
c906108c 780
c5aa993b 781 */
c906108c
SS
782
783static void
fba45db2 784sharedlibrary_command (char *args, int from_tty)
c906108c
SS
785{
786 dont_repeat ();
787 solib_add (args, from_tty, (struct target_ops *) 0);
788}
789
c906108c
SS
790
791void
fba45db2 792_initialize_solib (void)
c906108c 793{
fa58ee11
EZ
794 struct cmd_list_element *c;
795
c906108c
SS
796 add_com ("sharedlibrary", class_files, sharedlibrary_command,
797 "Load shared object library symbols for files matching REGEXP.");
c5aa993b 798 add_info ("sharedlibrary", info_sharedlibrary_command,
c906108c
SS
799 "Status of loaded shared object libraries.");
800
801 add_show_from_set
802 (add_set_cmd ("auto-solib-add", class_support, var_zinteger,
803 (char *) &auto_solib_add,
804 "Set autoloading of shared library symbols.\n\
805If nonzero, symbols from all shared object libraries will be loaded\n\
806automatically when the inferior begins execution or when the dynamic linker\n\
807informs gdb that a new library has been loaded. Otherwise, symbols\n\
808must be loaded manually, using `sharedlibrary'.",
809 &setlist),
810 &showlist);
811
fa58ee11
EZ
812 c = add_set_cmd ("solib-absolute-prefix", class_support, var_filename,
813 (char *) &solib_absolute_prefix,
814 "Set prefix for loading absolute shared library symbol files.\n\
c906108c 815For other (relative) files, you can add values using `set solib-search-path'.",
fa58ee11
EZ
816 &setlist);
817 add_show_from_set (c, &showlist);
818 c->completer = filename_completer;
c906108c 819
fa58ee11
EZ
820 c = add_set_cmd ("solib-search-path", class_support, var_string,
821 (char *) &solib_search_path,
822 "Set the search path for loading non-absolute shared library symbol files.\n\
823This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.",
824 &setlist);
825 add_show_from_set (c, &showlist);
826 c->completer = filename_completer;
c906108c 827}
This page took 0.135182 seconds and 4 git commands to generate.