Move some declarations to source.h
[deliverable/binutils-gdb.git] / gdb / solib.c
CommitLineData
13437d4b 1/* Handle shared libraries for GDB, the GNU Debugger.
14a5e767 2
e2882c85 3 Copyright (C) 1990-2018 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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 19
c906108c
SS
20#include "defs.h"
21
c906108c 22#include <sys/types.h>
c906108c 23#include <fcntl.h>
c906108c
SS
24#include "symtab.h"
25#include "bfd.h"
26#include "symfile.h"
27#include "objfiles.h"
28#include "gdbcore.h"
29#include "command.h"
30#include "target.h"
31#include "frame.h"
88987551 32#include "gdb_regex.h"
c906108c
SS
33#include "inferior.h"
34#include "environ.h"
35#include "language.h"
36#include "gdbcmd.h"
fa58ee11 37#include "completer.h"
fe4e3eb8 38#include "filenames.h" /* for DOSish file names */
4646aa9d 39#include "exec.h"
13437d4b 40#include "solist.h"
84acb35a 41#include "observer.h"
dbda9972 42#include "readline/readline.h"
f1838a98 43#include "remote.h"
2c0b251b 44#include "solib.h"
55333a84 45#include "interps.h"
ab38a727 46#include "filesystem.h"
cbb099e8 47#include "gdb_bfd.h"
614c279d 48#include "filestuff.h"
b46a8d7c 49#include "source.h"
c906108c 50
66aba65d
MK
51/* Architecture-specific operations. */
52
53/* Per-architecture data key. */
54static struct gdbarch_data *solib_data;
55
56static void *
57solib_init (struct obstack *obstack)
58{
59 struct target_so_ops **ops;
60
61 ops = OBSTACK_ZALLOC (obstack, struct target_so_ops *);
62 *ops = current_target_so_ops;
63 return ops;
64}
65
3641da11 66static const struct target_so_ops *
66aba65d
MK
67solib_ops (struct gdbarch *gdbarch)
68{
19ba03f4
SM
69 const struct target_so_ops **ops
70 = (const struct target_so_ops **) gdbarch_data (gdbarch, solib_data);
433759f7 71
66aba65d
MK
72 return *ops;
73}
7d522c90
DJ
74
75/* Set the solib operations for GDBARCH to NEW_OPS. */
76
77void
3641da11 78set_solib_ops (struct gdbarch *gdbarch, const struct target_so_ops *new_ops)
7d522c90 79{
19ba03f4
SM
80 const struct target_so_ops **ops
81 = (const struct target_so_ops **) gdbarch_data (gdbarch, solib_data);
433759f7 82
7d522c90
DJ
83 *ops = new_ops;
84}
66aba65d
MK
85\f
86
13437d4b 87/* external data declarations */
c906108c 88
7d522c90
DJ
89/* FIXME: gdbarch needs to control this variable, or else every
90 configuration needs to call set_solib_ops. */
13437d4b 91struct target_so_ops *current_target_so_ops;
23e04971 92
c906108c
SS
93/* Local function prototypes */
94
c906108c
SS
95/* If non-empty, this is a search path for loading non-absolute shared library
96 symbol files. This takes precedence over the environment variables PATH
97 and LD_LIBRARY_PATH. */
98static char *solib_search_path = NULL;
920d2a44
AC
99static void
100show_solib_search_path (struct ui_file *file, int from_tty,
101 struct cmd_list_element *c, const char *value)
102{
3e43a32a
MS
103 fprintf_filtered (file, _("The search path for loading non-absolute "
104 "shared library symbol files is %s.\n"),
920d2a44
AC
105 value);
106}
c906108c 107
ab38a727
PA
108/* Same as HAVE_DOS_BASED_FILE_SYSTEM, but useable as an rvalue. */
109#if (HAVE_DOS_BASED_FILE_SYSTEM)
110# define DOS_BASED_FILE_SYSTEM 1
111#else
112# define DOS_BASED_FILE_SYSTEM 0
113#endif
114
797bc1cb
TT
115/* Return the full pathname of a binary file (the main executable or a
116 shared library file), or NULL if not found. If FD is non-NULL, *FD
117 is set to either -1 or an open file handle for the binary file.
e4f7b8c8 118
f822c95b 119 Global variable GDB_SYSROOT is used as a prefix directory
af1900b0 120 to search for binary files if they have an absolute path.
b57fbfba
GB
121 If GDB_SYSROOT starts with "target:" and target filesystem
122 is the local filesystem then the "target:" prefix will be
123 stripped before the search starts. This ensures that the
124 same search algorithm is used for local files regardless of
125 whether a "target:" prefix was used.
e4f7b8c8
MS
126
127 Global variable SOLIB_SEARCH_PATH is used as a prefix directory
128 (or set of directories, as in LD_LIBRARY_PATH) to search for all
b57fbfba 129 shared libraries if not found in either the sysroot (if set) or
af1900b0
GB
130 the local filesystem. SOLIB_SEARCH_PATH is not used when searching
131 for the main executable.
e4f7b8c8 132
c8c18e65 133 Search algorithm:
b57fbfba
GB
134 * If a sysroot is set and path is absolute:
135 * Search for sysroot/path.
c8c18e65
KW
136 * else
137 * Look for it literally (unmodified).
af1900b0
GB
138 * If IS_SOLIB is non-zero:
139 * Look in SOLIB_SEARCH_PATH.
140 * If available, use target defined search function.
b57fbfba 141 * If NO sysroot is set, perform the following two searches:
c8c18e65 142 * Look in inferior's $PATH.
af1900b0
GB
143 * If IS_SOLIB is non-zero:
144 * Look in inferior's $LD_LIBRARY_PATH.
ab38a727 145 *
c8c18e65 146 * The last check avoids doing this search when targetting remote
b57fbfba 147 * machines since a sysroot will almost always be set.
7f86f058 148*/
e4f7b8c8 149
797bc1cb 150static gdb::unique_xmalloc_ptr<char>
992f1ddc 151solib_find_1 (const char *in_pathname, int *fd, int is_solib)
e4f7b8c8 152{
3641da11 153 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
e4f7b8c8
MS
154 int found_file = -1;
155 char *temp_pathname = NULL;
ab38a727 156 const char *fskind = effective_target_file_system_kind ();
9a897d43 157 const char *sysroot = gdb_sysroot;
f8773be1 158 int prefix_len, orig_prefix_len;
08105857 159
a3be80c3
GB
160 /* If the absolute prefix starts with "target:" but the filesystem
161 accessed by the target_fileio_* methods is the local filesystem
162 then we strip the "target:" prefix now and work with the local
163 filesystem. This ensures that the same search algorithm is used
164 for all local files regardless of whether a "target:" prefix was
165 used. */
166 if (is_target_filename (sysroot) && target_filesystem_is_local ())
167 sysroot += strlen (TARGET_SYSROOT_PREFIX);
168
f8773be1
GB
169 /* Strip any trailing slashes from the absolute prefix. */
170 prefix_len = orig_prefix_len = strlen (sysroot);
f1d10cfb 171
f8773be1
GB
172 while (prefix_len > 0 && IS_DIR_SEPARATOR (sysroot[prefix_len - 1]))
173 prefix_len--;
f1d10cfb 174
9a897d43 175 std::string sysroot_holder;
f8773be1
GB
176 if (prefix_len == 0)
177 sysroot = NULL;
178 else if (prefix_len != orig_prefix_len)
179 {
9a897d43
TT
180 sysroot_holder = std::string (sysroot, prefix_len);
181 sysroot = sysroot_holder.c_str ();
ab38a727
PA
182 }
183
184 /* If we're on a non-DOS-based system, backslashes won't be
185 understood as directory separator, so, convert them to forward
186 slashes, iff we're supposed to handle DOS-based file system
187 semantics for target paths. */
188 if (!DOS_BASED_FILE_SYSTEM && fskind == file_system_kind_dos_based)
189 {
190 char *p;
191
192 /* Avoid clobbering our input. */
224c3ddb 193 p = (char *) alloca (strlen (in_pathname) + 1);
ab38a727
PA
194 strcpy (p, in_pathname);
195 in_pathname = p;
196
197 for (; *p; p++)
198 {
199 if (*p == '\\')
200 *p = '/';
201 }
202 }
203
204 /* Note, we're interested in IS_TARGET_ABSOLUTE_PATH, not
205 IS_ABSOLUTE_PATH. The latter is for host paths only, while
206 IN_PATHNAME is a target path. For example, if we're supposed to
207 be handling DOS-like semantics we want to consider a
208 'c:/foo/bar.dll' path as an absolute path, even on a Unix box.
209 With such a path, before giving up on the sysroot, we'll try:
210
211 1st attempt, c:/foo/bar.dll ==> /sysroot/c:/foo/bar.dll
212 2nd attempt, c:/foo/bar.dll ==> /sysroot/c/foo/bar.dll
213 3rd attempt, c:/foo/bar.dll ==> /sysroot/foo/bar.dll
214 */
215
b57fbfba 216 if (!IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname) || sysroot == NULL)
ab38a727
PA
217 temp_pathname = xstrdup (in_pathname);
218 else
219 {
220 int need_dir_separator;
221
3736004f
PA
222 /* Concatenate the sysroot and the target reported filename. We
223 may need to glue them with a directory separator. Cases to
224 consider:
225
226 | sysroot | separator | in_pathname |
227 |-----------------+-----------+----------------|
228 | /some/dir | / | c:/foo/bar.dll |
229 | /some/dir | | /foo/bar.dll |
2938e6cf
GB
230 | target: | | c:/foo/bar.dll |
231 | target: | | /foo/bar.dll |
232 | target:some/dir | / | c:/foo/bar.dll |
233 | target:some/dir | | /foo/bar.dll |
3736004f
PA
234
235 IOW, we don't need to add a separator if IN_PATHNAME already
2938e6cf 236 has one, or when the the sysroot is exactly "target:".
3736004f
PA
237 There's no need to check for drive spec explicitly, as we only
238 get here if IN_PATHNAME is considered an absolute path. */
239 need_dir_separator = !(IS_DIR_SEPARATOR (in_pathname[0])
2938e6cf 240 || strcmp (TARGET_SYSROOT_PREFIX, sysroot) == 0);
ab38a727 241
f1d10cfb 242 /* Cat the prefixed pathname together. */
ab38a727
PA
243 temp_pathname = concat (sysroot,
244 need_dir_separator ? SLASH_STRING : "",
245 in_pathname, (char *) NULL);
e4f7b8c8
MS
246 }
247
2938e6cf
GB
248 /* Handle files to be accessed via the target. */
249 if (is_target_filename (temp_pathname))
f1838a98 250 {
998d2a3e
GB
251 if (fd != NULL)
252 *fd = -1;
797bc1cb 253 return gdb::unique_xmalloc_ptr<char> (temp_pathname);
f1838a98
UW
254 }
255
f1d10cfb 256 /* Now see if we can open it. */
614c279d 257 found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0);
ab38a727
PA
258 if (found_file < 0)
259 xfree (temp_pathname);
260
261 /* If the search in gdb_sysroot failed, and the path name has a
262 drive spec (e.g, c:/foo), try stripping ':' from the drive spec,
263 and retrying in the sysroot:
264 c:/foo/bar.dll ==> /sysroot/c/foo/bar.dll. */
f1d10cfb 265
ab38a727 266 if (found_file < 0
b57fbfba 267 && sysroot != NULL
ab38a727
PA
268 && HAS_TARGET_DRIVE_SPEC (fskind, in_pathname))
269 {
270 int need_dir_separator = !IS_DIR_SEPARATOR (in_pathname[2]);
271 char *drive = savestring (in_pathname, 1);
272
273 temp_pathname = concat (sysroot,
274 SLASH_STRING,
275 drive,
276 need_dir_separator ? SLASH_STRING : "",
277 in_pathname + 2, (char *) NULL);
278 xfree (drive);
279
614c279d 280 found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0);
ab38a727
PA
281 if (found_file < 0)
282 {
ab38a727
PA
283 xfree (temp_pathname);
284
285 /* If the search in gdb_sysroot still failed, try fully
286 stripping the drive spec, and trying once more in the
287 sysroot before giving up.
288
289 c:/foo/bar.dll ==> /sysroot/foo/bar.dll. */
290
291 temp_pathname = concat (sysroot,
292 need_dir_separator ? SLASH_STRING : "",
293 in_pathname + 2, (char *) NULL);
294
614c279d 295 found_file = gdb_open_cloexec (temp_pathname, O_RDONLY | O_BINARY, 0);
ab38a727
PA
296 if (found_file < 0)
297 xfree (temp_pathname);
298 }
299 }
0997b535 300
ab38a727
PA
301 /* We try to find the library in various ways. After each attempt,
302 either found_file >= 0 and temp_pathname is a malloc'd string, or
303 found_file < 0 and temp_pathname does not point to storage that
304 needs to be freed. */
305
306 if (found_file < 0)
307 temp_pathname = NULL;
308
f822c95b 309 /* If the search in gdb_sysroot failed, and the path name is
ba5f0d88
OF
310 absolute at this point, make it relative. (openp will try and open the
311 file according to its absolute path otherwise, which is not what we want.)
312 Affects subsequent searches for this solib. */
ab38a727 313 if (found_file < 0 && IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname))
ba5f0d88
OF
314 {
315 /* First, get rid of any drive letters etc. */
ab38a727
PA
316 while (!IS_TARGET_DIR_SEPARATOR (fskind, *in_pathname))
317 in_pathname++;
ba5f0d88
OF
318
319 /* Next, get rid of all leading dir separators. */
ab38a727
PA
320 while (IS_TARGET_DIR_SEPARATOR (fskind, *in_pathname))
321 in_pathname++;
ba5f0d88 322 }
ab38a727 323
af1900b0
GB
324 /* If not found, and we're looking for a solib, search the
325 solib_search_path (if any). */
326 if (is_solib && found_file < 0 && solib_search_path != NULL)
492c0ab7
JK
327 found_file = openp (solib_search_path,
328 OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
fbdebf46 329 in_pathname, O_RDONLY | O_BINARY, &temp_pathname);
ab38a727 330
af1900b0
GB
331 /* If not found, and we're looking for a solib, next search the
332 solib_search_path (if any) for the basename only (ignoring the
333 path). This is to allow reading solibs from a path that differs
334 from the opened path. */
335 if (is_solib && found_file < 0 && solib_search_path != NULL)
492c0ab7
JK
336 found_file = openp (solib_search_path,
337 OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
ab38a727
PA
338 target_lbasename (fskind, in_pathname),
339 O_RDONLY | O_BINARY, &temp_pathname);
e4f7b8c8 340
af1900b0
GB
341 /* If not found, and we're looking for a solib, try to use target
342 supplied solib search method. */
343 if (is_solib && found_file < 0 && ops->find_and_open_solib)
637d6690 344 found_file = ops->find_and_open_solib (in_pathname, O_RDONLY | O_BINARY,
66aba65d 345 &temp_pathname);
2610b0bf 346
c378eb4e 347 /* If not found, next search the inferior's $PATH environment variable. */
b57fbfba 348 if (found_file < 0 && sysroot == NULL)
9a6c7d9c 349 found_file = openp (current_inferior ()->environment.get ("PATH"),
492c0ab7
JK
350 OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname,
351 O_RDONLY | O_BINARY, &temp_pathname);
e4f7b8c8 352
af1900b0
GB
353 /* If not found, and we're looking for a solib, next search the
354 inferior's $LD_LIBRARY_PATH environment variable. */
355 if (is_solib && found_file < 0 && sysroot == NULL)
9a6c7d9c
SDJ
356 found_file = openp (current_inferior ()->environment.get
357 ("LD_LIBRARY_PATH"),
492c0ab7
JK
358 OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname,
359 O_RDONLY | O_BINARY, &temp_pathname);
e4f7b8c8 360
998d2a3e
GB
361 if (fd == NULL)
362 {
363 if (found_file >= 0)
364 close (found_file);
365 }
366 else
367 *fd = found_file;
368
797bc1cb 369 return gdb::unique_xmalloc_ptr<char> (temp_pathname);
572d275c
UW
370}
371
af1900b0 372/* Return the full pathname of the main executable, or NULL if not
797bc1cb
TT
373 found. If FD is non-NULL, *FD is set to either -1 or an open file
374 handle for the main executable. */
af1900b0 375
797bc1cb 376gdb::unique_xmalloc_ptr<char>
992f1ddc 377exec_file_find (const char *in_pathname, int *fd)
af1900b0 378{
797bc1cb 379 gdb::unique_xmalloc_ptr<char> result;
ecf45d2c
SL
380 const char *fskind = effective_target_file_system_kind ();
381
382 if (in_pathname == NULL)
383 return NULL;
af1900b0 384
ecf45d2c 385 if (*gdb_sysroot != '\0' && IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname))
af1900b0 386 {
ecf45d2c 387 result = solib_find_1 (in_pathname, fd, 0);
af1900b0 388
ecf45d2c 389 if (result == NULL && fskind == file_system_kind_dos_based)
af1900b0
GB
390 {
391 char *new_pathname;
392
224c3ddb 393 new_pathname = (char *) alloca (strlen (in_pathname) + 5);
af1900b0
GB
394 strcpy (new_pathname, in_pathname);
395 strcat (new_pathname, ".exe");
396
397 result = solib_find_1 (new_pathname, fd, 0);
398 }
399 }
ecf45d2c
SL
400 else
401 {
402 /* It's possible we don't have a full path, but rather just a
403 filename. Some targets, such as HP-UX, don't provide the
404 full path, sigh.
405
406 Attempt to qualify the filename against the source path.
407 (If that fails, we'll just fall back on the original
408 filename. Not much more we can do...) */
409
797bc1cb
TT
410 char *full_path = NULL;
411 if (source_full_path_of (in_pathname, &full_path))
412 result.reset (full_path);
413 else
414 result.reset (xstrdup (in_pathname));
ecf45d2c
SL
415 if (fd != NULL)
416 *fd = -1;
417 }
af1900b0
GB
418
419 return result;
420}
421
422/* Return the full pathname of a shared library file, or NULL if not
797bc1cb
TT
423 found. If FD is non-NULL, *FD is set to either -1 or an open file
424 handle for the shared library.
af1900b0
GB
425
426 The search algorithm used is described in solib_find_1's comment
427 above. */
428
797bc1cb 429gdb::unique_xmalloc_ptr<char>
992f1ddc 430solib_find (const char *in_pathname, int *fd)
af1900b0
GB
431{
432 const char *solib_symbols_extension
433 = gdbarch_solib_symbols_extension (target_gdbarch ());
434
435 /* If solib_symbols_extension is set, replace the file's
436 extension. */
437 if (solib_symbols_extension != NULL)
438 {
992f1ddc 439 const char *p = in_pathname + strlen (in_pathname);
af1900b0
GB
440
441 while (p > in_pathname && *p != '.')
442 p--;
443
444 if (*p == '.')
445 {
446 char *new_pathname;
447
224c3ddb
SM
448 new_pathname
449 = (char *) alloca (p - in_pathname + 1
450 + strlen (solib_symbols_extension) + 1);
af1900b0
GB
451 memcpy (new_pathname, in_pathname, p - in_pathname + 1);
452 strcpy (new_pathname + (p - in_pathname) + 1,
453 solib_symbols_extension);
454
455 in_pathname = new_pathname;
456 }
457 }
458
459 return solib_find_1 (in_pathname, fd, 1);
460}
461
572d275c
UW
462/* Open and return a BFD for the shared library PATHNAME. If FD is not -1,
463 it is used as file handle to open the file. Throws an error if the file
464 could not be opened. Handles both local and remote file access.
465
797bc1cb 466 If unsuccessful, the FD will be closed (unless FD was -1). */
572d275c 467
192b62ce 468gdb_bfd_ref_ptr
797bc1cb 469solib_bfd_fopen (const char *pathname, int fd)
572d275c 470{
192b62ce 471 gdb_bfd_ref_ptr abfd (gdb_bfd_open (pathname, gnutarget, fd));
572d275c 472
192b62ce
TT
473 if (abfd != NULL && !gdb_bfd_has_target_filename (abfd.get ()))
474 bfd_set_cacheable (abfd.get (), 1);
f1838a98 475
192b62ce 476 if (abfd == NULL)
f1838a98 477 {
9a897d43 478 /* Arrange to free PATHNAME when the error is thrown. */
f1838a98 479 error (_("Could not open `%s' as an executable file: %s"),
572d275c 480 pathname, bfd_errmsg (bfd_get_error ()));
f1838a98
UW
481 }
482
520b0001 483 return abfd;
572d275c
UW
484}
485
486/* Find shared library PATHNAME and open a BFD for it. */
487
192b62ce 488gdb_bfd_ref_ptr
572d275c
UW
489solib_bfd_open (char *pathname)
490{
572d275c 491 int found_file;
378d2b72 492 const struct bfd_arch_info *b;
572d275c 493
572d275c 494 /* Search for shared library file. */
797bc1cb
TT
495 gdb::unique_xmalloc_ptr<char> found_pathname
496 = solib_find (pathname, &found_file);
572d275c 497 if (found_pathname == NULL)
048d532d
PA
498 {
499 /* Return failure if the file could not be found, so that we can
500 accumulate messages about missing libraries. */
501 if (errno == ENOENT)
502 return NULL;
503
504 perror_with_name (pathname);
505 }
572d275c
UW
506
507 /* Open bfd for shared library. */
797bc1cb 508 gdb_bfd_ref_ptr abfd (solib_bfd_fopen (found_pathname.get (), found_file));
572d275c
UW
509
510 /* Check bfd format. */
192b62ce
TT
511 if (!bfd_check_format (abfd.get (), bfd_object))
512 error (_("`%s': not in executable format: %s"),
513 bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
f1838a98 514
378d2b72 515 /* Check bfd arch. */
f5656ead 516 b = gdbarch_bfd_arch_info (target_gdbarch ());
192b62ce 517 if (!b->compatible (b, bfd_get_arch_info (abfd.get ())))
378d2b72 518 warning (_("`%s': Shared library architecture %s is not compatible "
a4453b7e 519 "with target architecture %s."), bfd_get_filename (abfd),
192b62ce
TT
520 bfd_get_arch_info (abfd.get ())->printable_name,
521 b->printable_name);
378d2b72 522
f1838a98 523 return abfd;
e4f7b8c8
MS
524}
525
7f86f058
PA
526/* Given a pointer to one of the shared objects in our list of mapped
527 objects, use the recorded name to open a bfd descriptor for the
528 object, build a section table, relocate all the section addresses
529 by the base address at which the shared object was mapped, and then
530 add the sections to the target's section table.
e4f7b8c8 531
7f86f058
PA
532 FIXME: In most (all?) cases the shared object file name recorded in
533 the dynamic linkage tables will be a fully qualified pathname. For
c5aa993b
JM
534 cases where it isn't, do we really mimic the systems search
535 mechanism correctly in the below code (particularly the tilde
7f86f058 536 expansion stuff?). */
c906108c
SS
537
538static int
048d532d 539solib_map_sections (struct so_list *so)
c906108c 540{
3641da11 541 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
0542c86d 542 struct target_section *p;
c5aa993b 543
ee0c3293
TT
544 gdb::unique_xmalloc_ptr<char> filename (tilde_expand (so->so_name));
545 gdb_bfd_ref_ptr abfd (ops->bfd_open (filename.get ()));
e4f7b8c8 546
048d532d
PA
547 if (abfd == NULL)
548 return 0;
549
13437d4b 550 /* Leave bfd open, core_xfer_memory and "info files" need it. */
192b62ce 551 so->abfd = abfd.release ();
23e04971 552
b030cf11
JB
553 /* Copy the full path name into so_name, allowing symbol_file_add
554 to find it later. This also affects the =library-loaded GDB/MI
555 event, and in particular the part of that notification providing
556 the library's host-side path. If we let the target dictate
557 that objfile's path, and the target is different from the host,
558 GDB/MI will not provide the correct host-side path. */
192b62ce 559 if (strlen (bfd_get_filename (so->abfd)) >= SO_NAME_MAX_PATH_SIZE)
b030cf11 560 error (_("Shared library file name is too long."));
192b62ce 561 strcpy (so->so_name, bfd_get_filename (so->abfd));
b030cf11 562
192b62ce 563 if (build_section_table (so->abfd, &so->sections, &so->sections_end))
23e04971 564 {
8a3fe4f8 565 error (_("Can't find the file sections in `%s': %s"),
192b62ce 566 bfd_get_filename (so->abfd), bfd_errmsg (bfd_get_error ()));
23e04971 567 }
104c1213 568
13437d4b 569 for (p = so->sections; p < so->sections_end; p++)
104c1213 570 {
13437d4b
KB
571 /* Relocate the section binding addresses as recorded in the shared
572 object's file by the base address to which the object was actually
c378eb4e 573 mapped. */
66aba65d 574 ops->relocate_section_addresses (so, p);
cfa9d6d9
DJ
575
576 /* If the target didn't provide information about the address
577 range of the shared object, assume we want the location of
578 the .text section. */
579 if (so->addr_low == 0 && so->addr_high == 0
580 && strcmp (p->the_bfd_section->name, ".text") == 0)
13437d4b 581 {
cfa9d6d9
DJ
582 so->addr_low = p->addr;
583 so->addr_high = p->endaddr;
13437d4b 584 }
104c1213
JM
585 }
586
048d532d
PA
587 /* Add the shared object's sections to the current set of file
588 section tables. Do this immediately after mapping the object so
589 that later nodes in the list can query this object, as is needed
590 in solib-osf.c. */
ed9eebaf 591 add_target_sections (so, so->sections, so->sections_end);
048d532d
PA
592
593 return 1;
104c1213 594}
c906108c 595
0892cb63
DE
596/* Free symbol-file related contents of SO and reset for possible reloading
597 of SO. If we have opened a BFD for SO, close it. If we have placed SO's
598 sections in some target's section table, the caller is responsible for
599 removing them.
a86988f2
PA
600
601 This function doesn't mess with objfiles at all. If there is an
602 objfile associated with SO that needs to be removed, the caller is
603 responsible for taking care of that. */
604
605static void
0892cb63 606clear_so (struct so_list *so)
a86988f2 607{
3641da11 608 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
0892cb63 609
a86988f2
PA
610 if (so->sections)
611 {
612 xfree (so->sections);
613 so->sections = so->sections_end = NULL;
614 }
615
616 gdb_bfd_unref (so->abfd);
617 so->abfd = NULL;
618
619 /* Our caller closed the objfile, possibly via objfile_purge_solibs. */
620 so->symbols_loaded = 0;
621 so->objfile = NULL;
622
623 so->addr_low = so->addr_high = 0;
624
625 /* Restore the target-supplied file name. SO_NAME may be the path
626 of the symbol file. */
627 strcpy (so->so_name, so->so_original_name);
0892cb63
DE
628
629 /* Do the same for target-specific data. */
630 if (ops->clear_so != NULL)
631 ops->clear_so (so);
a86988f2
PA
632}
633
7f86f058 634/* Free the storage associated with the `struct so_list' object SO.
c378eb4e 635 If we have opened a BFD for SO, close it.
c906108c 636
07cd4b97
JB
637 The caller is responsible for removing SO from whatever list it is
638 a member of. If we have placed SO's sections in some target's
639 section table, the caller is responsible for removing them.
c906108c 640
07cd4b97
JB
641 This function doesn't mess with objfiles at all. If there is an
642 objfile associated with SO that needs to be removed, the caller is
643 responsible for taking care of that. */
644
13437d4b 645void
07cd4b97 646free_so (struct so_list *so)
c906108c 647{
3641da11 648 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
c5aa993b 649
0892cb63 650 clear_so (so);
66aba65d 651 ops->free_so (so);
07cd4b97 652
b8c9b27d 653 xfree (so);
c906108c
SS
654}
655
07cd4b97 656
f8766ec1
KB
657/* Return address of first so_list entry in master shared object list. */
658struct so_list *
659master_so_list (void)
660{
661 return so_list_head;
662}
663
7eedccfa
PP
664/* Read in symbols for shared object SO. If SYMFILE_VERBOSE is set in FLAGS,
665 be chatty about it. Return non-zero if any symbols were actually
42a6e6a0
MK
666 loaded. */
667
668int
b15cc25c 669solib_read_symbols (struct so_list *so, symfile_add_flags flags)
42a6e6a0
MK
670{
671 if (so->symbols_loaded)
672 {
a86988f2 673 /* If needed, we've already warned in our caller. */
42a6e6a0 674 }
8bb75286
DJ
675 else if (so->abfd == NULL)
676 {
048d532d
PA
677 /* We've already warned about this library, when trying to open
678 it. */
8bb75286 679 }
42a6e6a0
MK
680 else
681 {
048d532d 682
7dcd53a0
TT
683 flags |= current_inferior ()->symfile_flags;
684
492d29ea 685 TRY
048d532d
PA
686 {
687 struct section_addr_info *sap;
688
689 /* Have we already loaded this shared object? */
690 ALL_OBJFILES (so->objfile)
691 {
4262abfb 692 if (filename_cmp (objfile_name (so->objfile), so->so_name) == 0
e4f6d2ec 693 && so->objfile->addr_low == so->addr_low)
048d532d
PA
694 break;
695 }
9c6595ab
PA
696 if (so->objfile == NULL)
697 {
698 sap = build_section_addr_info_from_section_table (so->sections,
699 so->sections_end);
700 so->objfile = symbol_file_add_from_bfd (so->abfd, so->so_name,
701 flags, sap, OBJF_SHARED,
702 NULL);
703 so->objfile->addr_low = so->addr_low;
704 free_section_addr_info (sap);
705 }
492d29ea
PA
706
707 so->symbols_loaded = 1;
708 }
709 CATCH (e, RETURN_MASK_ERROR)
710 {
711 exception_fprintf (gdb_stderr, e, _("Error while reading shared"
712 " library symbols for %s:\n"),
713 so->so_name);
048d532d 714 }
492d29ea 715 END_CATCH
048d532d 716
7eedccfa 717 return 1;
42a6e6a0
MK
718 }
719
720 return 0;
721}
c906108c 722
59145f8c
AR
723/* Return 1 if KNOWN->objfile is used by any other so_list object in the
724 SO_LIST_HEAD list. Return 0 otherwise. */
725
726static int
727solib_used (const struct so_list *const known)
728{
729 const struct so_list *pivot;
730
731 for (pivot = so_list_head; pivot != NULL; pivot = pivot->next)
732 if (pivot != known && pivot->objfile == known->objfile)
733 return 1;
734 return 0;
735}
736
51457a05 737/* See solib.h. */
c906108c 738
e696b3ad
MAL
739void
740update_solib_list (int from_tty)
07cd4b97 741{
3641da11 742 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
66aba65d 743 struct so_list *inferior = ops->current_sos();
07cd4b97
JB
744 struct so_list *gdb, **gdb_link;
745
181e7f93
PA
746 /* We can reach here due to changing solib-search-path or the
747 sysroot, before having any inferior. */
50c71eaf 748 if (target_has_execution && !ptid_equal (inferior_ptid, null_ptid))
181e7f93
PA
749 {
750 struct inferior *inf = current_inferior ();
751
752 /* If we are attaching to a running process for which we
753 have not opened a symbol file, we may be able to get its
754 symbols now! */
755 if (inf->attach_flag && symfile_objfile == NULL)
bf469271
PA
756 {
757 TRY
758 {
759 ops->open_symbol_file_object (from_tty);
760 }
761 CATCH (ex, RETURN_MASK_ALL)
762 {
763 exception_fprintf (gdb_stderr, ex,
764 "Error reading attached "
765 "process's symbol file.\n");
766 }
767 END_CATCH
768 }
181e7f93 769 }
104c1213 770
07cd4b97
JB
771 /* GDB and the inferior's dynamic linker each maintain their own
772 list of currently loaded shared objects; we want to bring the
773 former in sync with the latter. Scan both lists, seeing which
774 shared objects appear where. There are three cases:
775
776 - A shared object appears on both lists. This means that GDB
105b175f
JB
777 knows about it already, and it's still loaded in the inferior.
778 Nothing needs to happen.
07cd4b97
JB
779
780 - A shared object appears only on GDB's list. This means that
105b175f
JB
781 the inferior has unloaded it. We should remove the shared
782 object from GDB's tables.
07cd4b97
JB
783
784 - A shared object appears only on the inferior's list. This
105b175f
JB
785 means that it's just been loaded. We should add it to GDB's
786 tables.
07cd4b97
JB
787
788 So we walk GDB's list, checking each entry to see if it appears
789 in the inferior's list too. If it does, no action is needed, and
790 we remove it from the inferior's list. If it doesn't, the
791 inferior has unloaded it, and we remove it from GDB's list. By
792 the time we're done walking GDB's list, the inferior's list
793 contains only the new shared objects, which we then add. */
794
795 gdb = so_list_head;
796 gdb_link = &so_list_head;
797 while (gdb)
c906108c 798 {
07cd4b97
JB
799 struct so_list *i = inferior;
800 struct so_list **i_link = &inferior;
801
802 /* Check to see whether the shared object *gdb also appears in
803 the inferior's current list. */
804 while (i)
c906108c 805 {
a7c02bc8
VP
806 if (ops->same)
807 {
808 if (ops->same (gdb, i))
809 break;
810 }
811 else
812 {
0ba1096a 813 if (! filename_cmp (gdb->so_original_name, i->so_original_name))
a7c02bc8
VP
814 break;
815 }
07cd4b97
JB
816
817 i_link = &i->next;
818 i = *i_link;
c906108c 819 }
c5aa993b 820
07cd4b97
JB
821 /* If the shared object appears on the inferior's list too, then
822 it's still loaded, so we don't need to do anything. Delete
823 it from the inferior's list, and leave it on GDB's list. */
824 if (i)
c906108c 825 {
07cd4b97 826 *i_link = i->next;
07cd4b97
JB
827 free_so (i);
828 gdb_link = &gdb->next;
829 gdb = *gdb_link;
830 }
831
832 /* If it's not on the inferior's list, remove it from GDB's tables. */
833 else
834 {
42a6e6a0
MK
835 /* Notify any observer that the shared object has been
836 unloaded before we remove it from GDB's tables. */
84acb35a
JJ
837 observer_notify_solib_unloaded (gdb);
838
edcc5120
TT
839 VEC_safe_push (char_ptr, current_program_space->deleted_solibs,
840 xstrdup (gdb->so_name));
841
07cd4b97 842 *gdb_link = gdb->next;
07cd4b97
JB
843
844 /* Unless the user loaded it explicitly, free SO's objfile. */
59145f8c
AR
845 if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED)
846 && !solib_used (gdb))
9e86da07 847 delete gdb->objfile;
07cd4b97
JB
848
849 /* Some targets' section tables might be referring to
850 sections from so->abfd; remove them. */
046ac79f 851 remove_target_sections (gdb);
07cd4b97
JB
852
853 free_so (gdb);
854 gdb = *gdb_link;
c906108c
SS
855 }
856 }
c5aa993b 857
07cd4b97
JB
858 /* Now the inferior's list contains only shared objects that don't
859 appear in GDB's list --- those that are newly loaded. Add them
e8930304 860 to GDB's shared object list. */
07cd4b97 861 if (inferior)
c906108c 862 {
048d532d
PA
863 int not_found = 0;
864 const char *not_found_filename = NULL;
865
07cd4b97
JB
866 struct so_list *i;
867
868 /* Add the new shared objects to GDB's list. */
869 *gdb_link = inferior;
870
e8930304 871 /* Fill in the rest of each of the `struct so_list' nodes. */
07cd4b97 872 for (i = inferior; i; i = i->next)
c906108c 873 {
048d532d 874
6c95b8df 875 i->pspace = current_program_space;
edcc5120 876 VEC_safe_push (so_list_ptr, current_program_space->added_solibs, i);
07cd4b97 877
492d29ea 878 TRY
048d532d
PA
879 {
880 /* Fill in the rest of the `struct so_list' node. */
881 if (!solib_map_sections (i))
882 {
883 not_found++;
884 if (not_found_filename == NULL)
885 not_found_filename = i->so_original_name;
886 }
887 }
07cd4b97 888
492d29ea
PA
889 CATCH (e, RETURN_MASK_ERROR)
890 {
891 exception_fprintf (gdb_stderr, e,
892 _("Error while mapping shared "
893 "library sections:\n"));
894 }
895 END_CATCH
42a6e6a0
MK
896
897 /* Notify any observer that the shared object has been
048d532d 898 loaded now that we've added it to GDB's tables. */
42a6e6a0 899 observer_notify_solib_loaded (i);
c906108c 900 }
048d532d
PA
901
902 /* If a library was not found, issue an appropriate warning
903 message. We have to use a single call to warning in case the
904 front end does something special with warnings, e.g., pop up
905 a dialog box. It Would Be Nice if we could get a "warning: "
906 prefix on each line in the CLI front end, though - it doesn't
907 stand out well. */
908
909 if (not_found == 1)
3e43a32a
MS
910 warning (_("Could not load shared library symbols for %s.\n"
911 "Do you need \"set solib-search-path\" "
912 "or \"set sysroot\"?"),
048d532d
PA
913 not_found_filename);
914 else if (not_found > 1)
915 warning (_("\
916Could not load shared library symbols for %d libraries, e.g. %s.\n\
917Use the \"info sharedlibrary\" command to see the complete listing.\n\
918Do you need \"set solib-search-path\" or \"set sysroot\"?"),
919 not_found, not_found_filename);
e8930304 920 }
105b175f
JB
921}
922
17a37d48
PP
923
924/* Return non-zero if NAME is the libpthread shared library.
6612ad7f
JB
925
926 Uses a fairly simplistic heuristic approach where we check
927 the file name against "/libpthread". This can lead to false
928 positives, but this should be good enough in practice. */
929
17a37d48
PP
930int
931libpthread_name_p (const char *name)
932{
933 return (strstr (name, "/libpthread") != NULL);
934}
935
936/* Return non-zero if SO is the libpthread shared library. */
937
6612ad7f
JB
938static int
939libpthread_solib_p (struct so_list *so)
940{
17a37d48 941 return libpthread_name_p (so->so_name);
6612ad7f 942}
105b175f 943
7f86f058 944/* Read in symbolic information for any shared objects whose names
105b175f
JB
945 match PATTERN. (If we've already read a shared object's symbol
946 info, leave it alone.) If PATTERN is zero, read them all.
947
990f9fe3
FF
948 If READSYMS is 0, defer reading symbolic information until later
949 but still do any needed low level processing.
950
e696b3ad 951 FROM_TTY is described for update_solib_list, above. */
105b175f
JB
952
953void
e696b3ad 954solib_add (const char *pattern, int from_tty, int readsyms)
105b175f
JB
955{
956 struct so_list *gdb;
957
770e7fc7
DE
958 if (print_symbol_loading_p (from_tty, 0, 0))
959 {
960 if (pattern != NULL)
961 {
962 printf_unfiltered (_("Loading symbols for shared libraries: %s\n"),
963 pattern);
964 }
965 else
966 printf_unfiltered (_("Loading symbols for shared libraries.\n"));
967 }
968
2eff07b3
PP
969 current_program_space->solib_add_generation++;
970
105b175f
JB
971 if (pattern)
972 {
973 char *re_err = re_comp (pattern);
974
975 if (re_err)
8a3fe4f8 976 error (_("Invalid regexp: %s"), re_err);
105b175f
JB
977 }
978
e696b3ad 979 update_solib_list (from_tty);
c906108c 980
105b175f
JB
981 /* Walk the list of currently loaded shared libraries, and read
982 symbols for any that match the pattern --- or any whose symbols
983 aren't already loaded, if no pattern was given. */
e8930304
JB
984 {
985 int any_matches = 0;
986 int loaded_any_symbols = 0;
b15cc25c
PA
987 symfile_add_flags add_flags = SYMFILE_DEFER_BP_RESET;
988
989 if (from_tty)
990 add_flags |= SYMFILE_VERBOSE;
c906108c 991
e8930304
JB
992 for (gdb = so_list_head; gdb; gdb = gdb->next)
993 if (! pattern || re_exec (gdb->so_name))
994 {
6612ad7f
JB
995 /* Normally, we would read the symbols from that library
996 only if READSYMS is set. However, we're making a small
997 exception for the pthread library, because we sometimes
998 need the library symbols to be loaded in order to provide
999 thread support (x86-linux for instance). */
1000 const int add_this_solib =
1001 (readsyms || libpthread_solib_p (gdb));
1002
e8930304 1003 any_matches = 1;
a86988f2
PA
1004 if (add_this_solib)
1005 {
1006 if (gdb->symbols_loaded)
1007 {
1008 /* If no pattern was given, be quiet for shared
1009 libraries we have already loaded. */
1010 if (pattern && (from_tty || info_verbose))
1011 printf_unfiltered (_("Symbols already loaded for %s\n"),
1012 gdb->so_name);
1013 }
b15cc25c 1014 else if (solib_read_symbols (gdb, add_flags))
a86988f2
PA
1015 loaded_any_symbols = 1;
1016 }
e8930304
JB
1017 }
1018
7eedccfa
PP
1019 if (loaded_any_symbols)
1020 breakpoint_re_set ();
1021
e8930304
JB
1022 if (from_tty && pattern && ! any_matches)
1023 printf_unfiltered
1024 ("No loaded shared libraries match the pattern `%s'.\n", pattern);
1025
1026 if (loaded_any_symbols)
1027 {
1028 /* Getting new symbols may change our opinion about what is
1029 frameless. */
1030 reinit_frame_cache ();
e8930304
JB
1031 }
1032 }
c906108c
SS
1033}
1034
7f86f058
PA
1035/* Implement the "info sharedlibrary" command. Walk through the
1036 shared library list and print information about each attached
1037 library matching PATTERN. If PATTERN is elided, print them
1038 all. */
c906108c
SS
1039
1040static void
1d12d88f 1041info_sharedlibrary_command (const char *pattern, int from_tty)
c906108c 1042{
52f0bd74 1043 struct so_list *so = NULL; /* link map state variable */
55333a84 1044 int so_missing_debug_info = 0;
c906108c 1045 int addr_width;
55333a84 1046 int nr_libs;
f5656ead 1047 struct gdbarch *gdbarch = target_gdbarch ();
79a45e25 1048 struct ui_out *uiout = current_uiout;
55333a84
DE
1049
1050 if (pattern)
1051 {
1052 char *re_err = re_comp (pattern);
1053
1054 if (re_err)
1055 error (_("Invalid regexp: %s"), re_err);
1056 }
c906108c 1057
84eb3c4f 1058 /* "0x", a little whitespace, and two hex digits per byte of pointers. */
55333a84 1059 addr_width = 4 + (gdbarch_ptr_bit (gdbarch) / 4);
c906108c 1060
e696b3ad 1061 update_solib_list (from_tty);
07cd4b97 1062
4a2b031d
TT
1063 /* ui_out_emit_table table_emitter needs to know the number of rows,
1064 so we need to make two passes over the libs. */
55333a84
DE
1065
1066 for (nr_libs = 0, so = so_list_head; so; so = so->next)
c906108c 1067 {
c5aa993b 1068 if (so->so_name[0])
c906108c 1069 {
55333a84
DE
1070 if (pattern && ! re_exec (so->so_name))
1071 continue;
1072 ++nr_libs;
1073 }
1074 }
1075
4a2b031d
TT
1076 {
1077 ui_out_emit_table table_emitter (uiout, 4, nr_libs, "SharedLibraryTable");
55333a84 1078
4a2b031d
TT
1079 /* The "- 1" is because ui_out adds one space between columns. */
1080 uiout->table_header (addr_width - 1, ui_left, "from", "From");
1081 uiout->table_header (addr_width - 1, ui_left, "to", "To");
1082 uiout->table_header (12 - 1, ui_left, "syms-read", "Syms Read");
1083 uiout->table_header (0, ui_noalign, "name", "Shared Object Library");
55333a84 1084
4a2b031d 1085 uiout->table_body ();
55333a84 1086
4a2b031d
TT
1087 ALL_SO_LIBS (so)
1088 {
1089 if (! so->so_name[0])
1090 continue;
1091 if (pattern && ! re_exec (so->so_name))
1092 continue;
1093
1094 ui_out_emit_tuple tuple_emitter (uiout, "lib");
1095
1096 if (so->addr_high != 0)
1097 {
1098 uiout->field_core_addr ("from", gdbarch, so->addr_low);
1099 uiout->field_core_addr ("to", gdbarch, so->addr_high);
1100 }
1101 else
1102 {
1103 uiout->field_skip ("from");
1104 uiout->field_skip ("to");
1105 }
1106
1107 if (! interp_ui_out (top_level_interpreter ())->is_mi_like_p ()
1108 && so->symbols_loaded
1109 && !objfile_has_symbols (so->objfile))
1110 {
1111 so_missing_debug_info = 1;
1112 uiout->field_string ("syms-read", "Yes (*)");
1113 }
1114 else
1115 uiout->field_string ("syms-read", so->symbols_loaded ? "Yes" : "No");
1116
1117 uiout->field_string ("name", so->so_name);
1118
1119 uiout->text ("\n");
1120 }
1121 }
55333a84
DE
1122
1123 if (nr_libs == 0)
1124 {
1125 if (pattern)
112e8700 1126 uiout->message (_("No shared libraries matched.\n"));
55333a84 1127 else
112e8700 1128 uiout->message (_("No shared libraries loaded at this time.\n"));
55333a84
DE
1129 }
1130 else
c906108c 1131 {
55333a84 1132 if (so_missing_debug_info)
112e8700 1133 uiout->message (_("(*): Shared library is missing "
3e43a32a 1134 "debugging information.\n"));
c906108c
SS
1135 }
1136}
1137
5fd1a349
PP
1138/* Return 1 if ADDRESS lies within SOLIB. */
1139
1140int
1141solib_contains_address_p (const struct so_list *const solib,
1142 CORE_ADDR address)
1143{
0542c86d 1144 struct target_section *p;
5fd1a349
PP
1145
1146 for (p = solib->sections; p < solib->sections_end; p++)
1147 if (p->addr <= address && address < p->endaddr)
1148 return 1;
1149
1150 return 0;
1151}
1152
7f86f058
PA
1153/* If ADDRESS is in a shared lib in program space PSPACE, return its
1154 name.
c906108c 1155
7f86f058
PA
1156 Provides a hook for other gdb routines to discover whether or not a
1157 particular address is within the mapped address space of a shared
1158 library.
c906108c 1159
c5aa993b
JM
1160 For example, this routine is called at one point to disable
1161 breakpoints which are in shared libraries that are not currently
7f86f058 1162 mapped in. */
c906108c
SS
1163
1164char *
6c95b8df 1165solib_name_from_address (struct program_space *pspace, CORE_ADDR address)
c906108c 1166{
6c95b8df 1167 struct so_list *so = NULL;
c5aa993b 1168
6c95b8df 1169 for (so = pspace->so_list; so; so = so->next)
5fd1a349
PP
1170 if (solib_contains_address_p (so, address))
1171 return (so->so_name);
07cd4b97 1172
c906108c
SS
1173 return (0);
1174}
1175
de18c1d8
JM
1176/* Return whether the data starting at VADDR, size SIZE, must be kept
1177 in a core file for shared libraries loaded before "gcore" is used
1178 to be handled correctly when the core file is loaded. This only
1179 applies when the section would otherwise not be kept in the core
1180 file (in particular, for readonly sections). */
1181
1182int
1183solib_keep_data_in_core (CORE_ADDR vaddr, unsigned long size)
1184{
3641da11 1185 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
de18c1d8
JM
1186
1187 if (ops->keep_data_in_core)
1188 return ops->keep_data_in_core (vaddr, size);
1189 else
1190 return 0;
1191}
1192
c906108c
SS
1193/* Called by free_all_symtabs */
1194
c5aa993b 1195void
fba45db2 1196clear_solib (void)
c906108c 1197{
3641da11 1198 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
66aba65d 1199
1736a7bd 1200 disable_breakpoints_in_shlibs ();
085dd6e6 1201
c906108c
SS
1202 while (so_list_head)
1203 {
07cd4b97 1204 struct so_list *so = so_list_head;
433759f7 1205
07cd4b97 1206 so_list_head = so->next;
c86cf029 1207 observer_notify_solib_unloaded (so);
046ac79f 1208 remove_target_sections (so);
07cd4b97 1209 free_so (so);
c906108c 1210 }
07cd4b97 1211
66aba65d 1212 ops->clear_solib ();
c906108c
SS
1213}
1214
7f86f058
PA
1215/* Shared library startup support. When GDB starts up the inferior,
1216 it nurses it along (through the shell) until it is ready to execute
1217 its first instruction. At this point, this function gets
1218 called. */
c5aa993b
JM
1219
1220void
268a4a75 1221solib_create_inferior_hook (int from_tty)
c906108c 1222{
3641da11 1223 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
433759f7 1224
268a4a75 1225 ops->solib_create_inferior_hook (from_tty);
c906108c
SS
1226}
1227
7f86f058
PA
1228/* Check to see if an address is in the dynamic loader's dynamic
1229 symbol resolution code. Return 1 if so, 0 otherwise. */
d7fa2ae2
KB
1230
1231int
1232in_solib_dynsym_resolve_code (CORE_ADDR pc)
1233{
3641da11 1234 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
433759f7 1235
66aba65d 1236 return ops->in_dynsym_resolve_code (pc);
d7fa2ae2 1237}
c906108c 1238
7f86f058 1239/* Implements the "sharedlibrary" command. */
c906108c
SS
1240
1241static void
0b39b52e 1242sharedlibrary_command (const char *args, int from_tty)
c906108c
SS
1243{
1244 dont_repeat ();
e696b3ad 1245 solib_add (args, from_tty, 1);
c906108c
SS
1246}
1247
7f86f058 1248/* Implements the command "nosharedlibrary", which discards symbols
cb0ba49e
MS
1249 that have been auto-loaded from shared libraries. Symbols from
1250 shared libraries that were added by explicit request of the user
1251 are not discarded. Also called from remote.c. */
1252
c60a7562 1253void
0b39b52e 1254no_shared_libraries (const char *ignored, int from_tty)
c60a7562 1255{
a3247a22
PP
1256 /* The order of the two routines below is important: clear_solib notifies
1257 the solib_unloaded observers, and some of these observers might need
1258 access to their associated objfiles. Therefore, we can not purge the
1259 solibs' objfiles before clear_solib has been called. */
1260
615b9dba 1261 clear_solib ();
a3247a22 1262 objfile_purge_solibs ();
c60a7562 1263}
c906108c 1264
f9e14852
GB
1265/* See solib.h. */
1266
1267void
1268update_solib_breakpoints (void)
1269{
1270 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1271
1272 if (ops->update_breakpoints != NULL)
1273 ops->update_breakpoints ();
1274}
1275
1276/* See solib.h. */
1277
1278void
1279handle_solib_event (void)
1280{
1281 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
1282
1283 if (ops->handle_event != NULL)
1284 ops->handle_event ();
1285
1286 clear_program_space_solib_cache (current_inferior ()->pspace);
1287
1288 /* Check for any newly added shared libraries if we're supposed to
1289 be adding them automatically. Switch terminal for any messages
1290 produced by breakpoint_re_set. */
223ffa71 1291 target_terminal::ours_for_output ();
e696b3ad 1292 solib_add (NULL, 0, auto_solib_add);
223ffa71 1293 target_terminal::inferior ();
f9e14852
GB
1294}
1295
a86988f2
PA
1296/* Reload shared libraries, but avoid reloading the same symbol file
1297 we already have loaded. */
1298
1299static void
1300reload_shared_libraries_1 (int from_tty)
1301{
1302 struct so_list *so;
a86988f2 1303
770e7fc7
DE
1304 if (print_symbol_loading_p (from_tty, 0, 0))
1305 printf_unfiltered (_("Loading symbols for shared libraries.\n"));
1306
a86988f2
PA
1307 for (so = so_list_head; so != NULL; so = so->next)
1308 {
ee0c3293 1309 char *found_pathname = NULL;
a86988f2 1310 int was_loaded = so->symbols_loaded;
b15cc25c
PA
1311 symfile_add_flags add_flags = SYMFILE_DEFER_BP_RESET;
1312
1313 if (from_tty)
1314 add_flags |= SYMFILE_VERBOSE;
a86988f2 1315
ee0c3293
TT
1316 gdb::unique_xmalloc_ptr<char> filename
1317 (tilde_expand (so->so_original_name));
1318 gdb_bfd_ref_ptr abfd (solib_bfd_open (filename.get ()));
a86988f2 1319 if (abfd != NULL)
ee0c3293 1320 found_pathname = bfd_get_filename (abfd.get ());
a86988f2
PA
1321
1322 /* If this shared library is no longer associated with its previous
1323 symbol file, close that. */
1324 if ((found_pathname == NULL && was_loaded)
1325 || (found_pathname != NULL
0ba1096a 1326 && filename_cmp (found_pathname, so->so_name) != 0))
a86988f2 1327 {
59145f8c
AR
1328 if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED)
1329 && !solib_used (so))
9e86da07 1330 delete so->objfile;
046ac79f 1331 remove_target_sections (so);
0892cb63 1332 clear_so (so);
a86988f2
PA
1333 }
1334
1335 /* If this shared library is now associated with a new symbol
1336 file, open it. */
1337 if (found_pathname != NULL
1338 && (!was_loaded
0ba1096a 1339 || filename_cmp (found_pathname, so->so_name) != 0))
a86988f2 1340 {
492d29ea 1341 int got_error = 0;
a86988f2 1342
492d29ea
PA
1343 TRY
1344 {
1345 solib_map_sections (so);
1346 }
1347
1348 CATCH (e, RETURN_MASK_ERROR)
1349 {
1350 exception_fprintf (gdb_stderr, e,
1351 _("Error while mapping "
1352 "shared library sections:\n"));
1353 got_error = 1;
1354 }
1355 END_CATCH
a86988f2 1356
492d29ea
PA
1357 if (!got_error
1358 && (auto_solib_add || was_loaded || libpthread_solib_p (so)))
b15cc25c 1359 solib_read_symbols (so, add_flags);
a86988f2
PA
1360 }
1361 }
a86988f2
PA
1362}
1363
cf466558 1364static void
eb4c3f4a 1365reload_shared_libraries (const char *ignored, int from_tty,
f397e303 1366 struct cmd_list_element *e)
cf466558 1367{
3641da11 1368 const struct target_so_ops *ops;
a86988f2
PA
1369
1370 reload_shared_libraries_1 (from_tty);
1371
f5656ead 1372 ops = solib_ops (target_gdbarch ());
a86988f2 1373
c378eb4e 1374 /* Creating inferior hooks here has two purposes. First, if we reload
c8fa6cdd
VP
1375 shared libraries then the address of solib breakpoint we've computed
1376 previously might be no longer valid. For example, if we forgot to set
1377 solib-absolute-prefix and are setting it right now, then the previous
1378 breakpoint address is plain wrong. Second, installing solib hooks
1379 also implicitly figures were ld.so is and loads symbols for it.
1380 Absent this call, if we've just connected to a target and set
1381 solib-absolute-prefix or solib-search-path, we'll lose all information
1382 about ld.so. */
1383 if (target_has_execution)
1384 {
a86988f2
PA
1385 /* Reset or free private data structures not associated with
1386 so_list entries. */
1387 ops->clear_solib ();
1388
1389 /* Remove any previous solib event breakpoint. This is usually
1390 done in common code, at breakpoint_init_inferior time, but
1391 we're not really starting up the inferior here. */
1392 remove_solib_event_breakpoints ();
1393
268a4a75 1394 solib_create_inferior_hook (from_tty);
c8fa6cdd 1395 }
268a4a75
JK
1396
1397 /* Sometimes the platform-specific hook loads initial shared
1398 libraries, and sometimes it doesn't. If it doesn't FROM_TTY will be
1399 incorrectly 0 but such solib targets should be fixed anyway. If we
1400 made all the inferior hook methods consistent, this call could be
1401 removed. Call it only after the solib target has been initialized by
1402 solib_create_inferior_hook. */
1403
e696b3ad 1404 solib_add (NULL, 0, auto_solib_add);
268a4a75 1405
a86988f2
PA
1406 breakpoint_re_set ();
1407
1408 /* We may have loaded or unloaded debug info for some (or all)
1409 shared libraries. However, frames may still reference them. For
1410 example, a frame's unwinder might still point at DWARF FDE
1411 structures that are now freed. Also, getting new symbols may
1412 change our opinion about what is frameless. */
c8fa6cdd 1413 reinit_frame_cache ();
cf466558
KB
1414}
1415
2938e6cf
GB
1416/* Wrapper for reload_shared_libraries that replaces "remote:"
1417 at the start of gdb_sysroot with "target:". */
1418
1419static void
eb4c3f4a 1420gdb_sysroot_changed (const char *ignored, int from_tty,
2938e6cf
GB
1421 struct cmd_list_element *e)
1422{
1423 const char *old_prefix = "remote:";
1424 const char *new_prefix = TARGET_SYSROOT_PREFIX;
1425
1426 if (startswith (gdb_sysroot, old_prefix))
1427 {
1428 static int warning_issued = 0;
1429
1430 gdb_assert (strlen (old_prefix) == strlen (new_prefix));
1431 memcpy (gdb_sysroot, new_prefix, strlen (new_prefix));
1432
1433 if (!warning_issued)
1434 {
1435 warning (_("\"%s\" is deprecated, use \"%s\" instead."),
1436 old_prefix, new_prefix);
1437 warning (_("sysroot set to \"%s\"."), gdb_sysroot);
1438
1439 warning_issued = 1;
1440 }
1441 }
1442
1443 reload_shared_libraries (ignored, from_tty, e);
1444}
1445
920d2a44
AC
1446static void
1447show_auto_solib_add (struct ui_file *file, int from_tty,
1448 struct cmd_list_element *c, const char *value)
1449{
1450 fprintf_filtered (file, _("Autoloading of shared library symbols is %s.\n"),
1451 value);
1452}
1453
1454
3a40aaa0
UW
1455/* Handler for library-specific lookup of global symbol NAME in OBJFILE. Call
1456 the library-specific handler if it is installed for the current target. */
1457
d12307c1 1458struct block_symbol
efad9b6a 1459solib_global_lookup (struct objfile *objfile,
3a40aaa0 1460 const char *name,
21b556f4 1461 const domain_enum domain)
3a40aaa0 1462{
6f059256 1463 const struct target_so_ops *ops = solib_ops (target_gdbarch ());
3a40aaa0 1464
e8a92f7b 1465 if (ops->lookup_lib_global_symbol != NULL)
94af9270 1466 return ops->lookup_lib_global_symbol (objfile, name, domain);
d12307c1 1467 return (struct block_symbol) {NULL, NULL};
3a40aaa0
UW
1468}
1469
cb457ae2
YQ
1470/* Lookup the value for a specific symbol from dynamic symbol table. Look
1471 up symbol from ABFD. MATCH_SYM is a callback function to determine
1472 whether to pick up a symbol. DATA is the input of this callback
1473 function. Return NULL if symbol is not found. */
1474
1475CORE_ADDR
1476gdb_bfd_lookup_symbol_from_symtab (bfd *abfd,
3953f15c
SM
1477 int (*match_sym) (const asymbol *,
1478 const void *),
1479 const void *data)
cb457ae2
YQ
1480{
1481 long storage_needed = bfd_get_symtab_upper_bound (abfd);
1482 CORE_ADDR symaddr = 0;
1483
1484 if (storage_needed > 0)
1485 {
1486 unsigned int i;
1487
1488 asymbol **symbol_table = (asymbol **) xmalloc (storage_needed);
1489 struct cleanup *back_to = make_cleanup (xfree, symbol_table);
1490 unsigned int number_of_symbols =
1491 bfd_canonicalize_symtab (abfd, symbol_table);
1492
1493 for (i = 0; i < number_of_symbols; i++)
1494 {
1495 asymbol *sym = *symbol_table++;
1496
1497 if (match_sym (sym, data))
1498 {
3e29f34a
MR
1499 struct gdbarch *gdbarch = target_gdbarch ();
1500 symaddr = sym->value;
1501
1502 /* Some ELF targets fiddle with addresses of symbols they
1503 consider special. They use minimal symbols to do that
1504 and this is needed for correct breakpoint placement,
1505 but we do not have full data here to build a complete
1506 minimal symbol, so just set the address and let the
1507 targets cope with that. */
1508 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1509 && gdbarch_elf_make_msymbol_special_p (gdbarch))
1510 {
1511 struct minimal_symbol msym;
1512
1513 memset (&msym, 0, sizeof (msym));
1514 SET_MSYMBOL_VALUE_ADDRESS (&msym, symaddr);
1515 gdbarch_elf_make_msymbol_special (gdbarch, sym, &msym);
1516 symaddr = MSYMBOL_VALUE_RAW_ADDRESS (&msym);
1517 }
1518
cb457ae2 1519 /* BFD symbols are section relative. */
3e29f34a 1520 symaddr += sym->section->vma;
cb457ae2
YQ
1521 break;
1522 }
1523 }
1524 do_cleanups (back_to);
1525 }
1526
1527 return symaddr;
1528}
1529
1530/* Lookup the value for a specific symbol from symbol table. Look up symbol
1531 from ABFD. MATCH_SYM is a callback function to determine whether to pick
1532 up a symbol. DATA is the input of this callback function. Return NULL
1533 if symbol is not found. */
1534
1535static CORE_ADDR
1536bfd_lookup_symbol_from_dyn_symtab (bfd *abfd,
3953f15c
SM
1537 int (*match_sym) (const asymbol *,
1538 const void *),
1539 const void *data)
cb457ae2
YQ
1540{
1541 long storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
1542 CORE_ADDR symaddr = 0;
1543
1544 if (storage_needed > 0)
1545 {
1546 unsigned int i;
1547 asymbol **symbol_table = (asymbol **) xmalloc (storage_needed);
1548 struct cleanup *back_to = make_cleanup (xfree, symbol_table);
1549 unsigned int number_of_symbols =
1550 bfd_canonicalize_dynamic_symtab (abfd, symbol_table);
1551
1552 for (i = 0; i < number_of_symbols; i++)
1553 {
1554 asymbol *sym = *symbol_table++;
1555
1556 if (match_sym (sym, data))
1557 {
1558 /* BFD symbols are section relative. */
1559 symaddr = sym->value + sym->section->vma;
1560 break;
1561 }
1562 }
1563 do_cleanups (back_to);
1564 }
1565 return symaddr;
1566}
1567
1568/* Lookup the value for a specific symbol from symbol table and dynamic
1569 symbol table. Look up symbol from ABFD. MATCH_SYM is a callback
1570 function to determine whether to pick up a symbol. DATA is the
1571 input of this callback function. Return NULL if symbol is not
1572 found. */
1573
1574CORE_ADDR
1575gdb_bfd_lookup_symbol (bfd *abfd,
3953f15c
SM
1576 int (*match_sym) (const asymbol *, const void *),
1577 const void *data)
cb457ae2
YQ
1578{
1579 CORE_ADDR symaddr = gdb_bfd_lookup_symbol_from_symtab (abfd, match_sym, data);
1580
1581 /* On FreeBSD, the dynamic linker is stripped by default. So we'll
1582 have to check the dynamic string table too. */
1583 if (symaddr == 0)
1584 symaddr = bfd_lookup_symbol_from_dyn_symtab (abfd, match_sym, data);
1585
1586 return symaddr;
1587}
3a40aaa0 1588
63644780
NB
1589/* SO_LIST_HEAD may contain user-loaded object files that can be removed
1590 out-of-band by the user. So upon notification of free_objfile remove
1591 all references to any user-loaded file that is about to be freed. */
1592
1593static void
1594remove_user_added_objfile (struct objfile *objfile)
1595{
1596 struct so_list *so;
1597
1598 if (objfile != 0 && objfile->flags & OBJF_USERLOADED)
1599 {
1600 for (so = so_list_head; so != NULL; so = so->next)
1601 if (so->objfile == objfile)
1602 so->objfile = NULL;
1603 }
1604}
1605
c906108c 1606void
fba45db2 1607_initialize_solib (void)
c906108c 1608{
66aba65d
MK
1609 solib_data = gdbarch_data_register_pre_init (solib_init);
1610
63644780
NB
1611 observer_attach_free_objfile (remove_user_added_objfile);
1612
c906108c 1613 add_com ("sharedlibrary", class_files, sharedlibrary_command,
1bedd215 1614 _("Load shared object library symbols for files matching REGEXP."));
c5aa993b 1615 add_info ("sharedlibrary", info_sharedlibrary_command,
1bedd215 1616 _("Status of loaded shared object libraries."));
b30a0bc3 1617 add_info_alias ("dll", "sharedlibrary", 1);
c60a7562 1618 add_com ("nosharedlibrary", class_files, no_shared_libraries,
1bedd215 1619 _("Unload all shared object library symbols."));
c906108c 1620
5bf193a2
AC
1621 add_setshow_boolean_cmd ("auto-solib-add", class_support,
1622 &auto_solib_add, _("\
1623Set autoloading of shared library symbols."), _("\
1624Show autoloading of shared library symbols."), _("\
b7209cb4
FF
1625If \"on\", symbols from all shared object libraries will be loaded\n\
1626automatically when the inferior begins execution, when the dynamic linker\n\
1627informs gdb that a new library has been loaded, or when attaching to the\n\
3e43a32a
MS
1628inferior. Otherwise, symbols must be loaded manually, using \
1629`sharedlibrary'."),
5bf193a2 1630 NULL,
920d2a44 1631 show_auto_solib_add,
5bf193a2 1632 &setlist, &showlist);
c906108c 1633
811a659a
GB
1634 add_setshow_optional_filename_cmd ("sysroot", class_support,
1635 &gdb_sysroot, _("\
f822c95b
DJ
1636Set an alternate system root."), _("\
1637Show the current system root."), _("\
1638The system root is used to load absolute shared library symbol files.\n\
1639For other (relative) files, you can add directories using\n\
1640`set solib-search-path'."),
2938e6cf 1641 gdb_sysroot_changed,
811a659a
GB
1642 NULL,
1643 &setlist, &showlist);
c906108c 1644
f822c95b
DJ
1645 add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1646 &setlist);
1647 add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
1648 &showlist);
030292b7 1649
525226b5
AC
1650 add_setshow_optional_filename_cmd ("solib-search-path", class_support,
1651 &solib_search_path, _("\
3e43a32a
MS
1652Set the search path for loading non-absolute shared library symbol files."),
1653 _("\
1654Show the search path for loading non-absolute shared library symbol files."),
1655 _("\
1656This takes precedence over the environment variables \
1657PATH and LD_LIBRARY_PATH."),
525226b5 1658 reload_shared_libraries,
920d2a44 1659 show_solib_search_path,
525226b5 1660 &setlist, &showlist);
c906108c 1661}
This page took 1.809237 seconds and 4 git commands to generate.