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