* defs.h (plongest,pulongest): Renamed from paddr_u,paddr_d.
[deliverable/binutils-gdb.git] / gdb / solib-svr4.c
CommitLineData
ab31aa69 1/* Handle SVR4 shared libraries for GDB, the GNU Debugger.
2f4950cd 2
6aba47ca 3 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
9b254dd1 4 2001, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
13437d4b
KB
5
6 This file is part of GDB.
7
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
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
13437d4b
KB
11 (at your option) any later version.
12
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
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
13437d4b 20
13437d4b
KB
21#include "defs.h"
22
13437d4b 23#include "elf/external.h"
21479ded 24#include "elf/common.h"
f7856c8f 25#include "elf/mips.h"
13437d4b
KB
26
27#include "symtab.h"
28#include "bfd.h"
29#include "symfile.h"
30#include "objfiles.h"
31#include "gdbcore.h"
13437d4b 32#include "target.h"
13437d4b 33#include "inferior.h"
13437d4b 34
4b188b9f
MK
35#include "gdb_assert.h"
36
13437d4b 37#include "solist.h"
bba93f6c 38#include "solib.h"
13437d4b
KB
39#include "solib-svr4.h"
40
2f4950cd 41#include "bfd-target.h"
cc10cae3 42#include "elf-bfd.h"
2f4950cd 43#include "exec.h"
8d4e36ba 44#include "auxv.h"
f1838a98 45#include "exceptions.h"
2f4950cd 46
e5e2b9ff 47static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
d5a921c9 48static int svr4_have_link_map_offsets (void);
1c4dcb57 49
13437d4b
KB
50/* Link map info to include in an allocated so_list entry */
51
52struct lm_info
53 {
54 /* Pointer to copy of link map from inferior. The type is char *
55 rather than void *, so that we may use byte offsets to find the
56 various fields without the need for a cast. */
4066fc10 57 gdb_byte *lm;
cc10cae3
AO
58
59 /* Amount by which addresses in the binary should be relocated to
60 match the inferior. This could most often be taken directly
61 from lm, but when prelinking is involved and the prelink base
62 address changes, we may need a different offset, we want to
63 warn about the difference and compute it only once. */
64 CORE_ADDR l_addr;
93a57060
DJ
65
66 /* The target location of lm. */
67 CORE_ADDR lm_addr;
13437d4b
KB
68 };
69
70/* On SVR4 systems, a list of symbols in the dynamic linker where
71 GDB can try to place a breakpoint to monitor shared library
72 events.
73
74 If none of these symbols are found, or other errors occur, then
75 SVR4 systems will fall back to using a symbol as the "startup
76 mapping complete" breakpoint address. */
77
13437d4b
KB
78static char *solib_break_names[] =
79{
80 "r_debug_state",
81 "_r_debug_state",
82 "_dl_debug_state",
83 "rtld_db_dlactivity",
1f72e589 84 "_rtld_debug_state",
4c0122c8 85
13437d4b
KB
86 NULL
87};
13437d4b 88
13437d4b
KB
89static char *bkpt_names[] =
90{
13437d4b 91 "_start",
ad3dcc5c 92 "__start",
13437d4b
KB
93 "main",
94 NULL
95};
13437d4b 96
13437d4b
KB
97static char *main_name_list[] =
98{
99 "main_$main",
100 NULL
101};
102
4d7b2d5b
JB
103/* Return non-zero if GDB_SO_NAME and INFERIOR_SO_NAME represent
104 the same shared library. */
105
106static int
107svr4_same_1 (const char *gdb_so_name, const char *inferior_so_name)
108{
109 if (strcmp (gdb_so_name, inferior_so_name) == 0)
110 return 1;
111
112 /* On Solaris, when starting inferior we think that dynamic linker is
113 /usr/lib/ld.so.1, but later on, the table of loaded shared libraries
114 contains /lib/ld.so.1. Sometimes one file is a link to another, but
115 sometimes they have identical content, but are not linked to each
116 other. We don't restrict this check for Solaris, but the chances
117 of running into this situation elsewhere are very low. */
118 if (strcmp (gdb_so_name, "/usr/lib/ld.so.1") == 0
119 && strcmp (inferior_so_name, "/lib/ld.so.1") == 0)
120 return 1;
121
122 /* Similarly, we observed the same issue with sparc64, but with
123 different locations. */
124 if (strcmp (gdb_so_name, "/usr/lib/sparcv9/ld.so.1") == 0
125 && strcmp (inferior_so_name, "/lib/sparcv9/ld.so.1") == 0)
126 return 1;
127
128 return 0;
129}
130
131static int
132svr4_same (struct so_list *gdb, struct so_list *inferior)
133{
134 return (svr4_same_1 (gdb->so_original_name, inferior->so_original_name));
135}
136
13437d4b
KB
137/* link map access functions */
138
139static CORE_ADDR
cc10cae3 140LM_ADDR_FROM_LINK_MAP (struct so_list *so)
13437d4b 141{
4b188b9f 142 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
13437d4b 143
cfaefc65
AS
144 return extract_typed_address (so->lm_info->lm + lmo->l_addr_offset,
145 builtin_type_void_data_ptr);
13437d4b
KB
146}
147
cc10cae3
AO
148static int
149HAS_LM_DYNAMIC_FROM_LINK_MAP ()
150{
151 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
152
cfaefc65 153 return lmo->l_ld_offset >= 0;
cc10cae3
AO
154}
155
156static CORE_ADDR
157LM_DYNAMIC_FROM_LINK_MAP (struct so_list *so)
158{
159 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
160
cfaefc65
AS
161 return extract_typed_address (so->lm_info->lm + lmo->l_ld_offset,
162 builtin_type_void_data_ptr);
cc10cae3
AO
163}
164
165static CORE_ADDR
166LM_ADDR_CHECK (struct so_list *so, bfd *abfd)
167{
168 if (so->lm_info->l_addr == (CORE_ADDR)-1)
169 {
170 struct bfd_section *dyninfo_sect;
171 CORE_ADDR l_addr, l_dynaddr, dynaddr, align = 0x1000;
172
173 l_addr = LM_ADDR_FROM_LINK_MAP (so);
174
175 if (! abfd || ! HAS_LM_DYNAMIC_FROM_LINK_MAP ())
176 goto set_addr;
177
178 l_dynaddr = LM_DYNAMIC_FROM_LINK_MAP (so);
179
180 dyninfo_sect = bfd_get_section_by_name (abfd, ".dynamic");
181 if (dyninfo_sect == NULL)
182 goto set_addr;
183
184 dynaddr = bfd_section_vma (abfd, dyninfo_sect);
185
186 if (dynaddr + l_addr != l_dynaddr)
187 {
cc10cae3
AO
188 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
189 {
190 Elf_Internal_Ehdr *ehdr = elf_tdata (abfd)->elf_header;
191 Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr;
192 int i;
193
194 align = 1;
195
196 for (i = 0; i < ehdr->e_phnum; i++)
197 if (phdr[i].p_type == PT_LOAD && phdr[i].p_align > align)
198 align = phdr[i].p_align;
199 }
200
201 /* Turn it into a mask. */
202 align--;
203
204 /* If the changes match the alignment requirements, we
205 assume we're using a core file that was generated by the
206 same binary, just prelinked with a different base offset.
207 If it doesn't match, we may have a different binary, the
208 same binary with the dynamic table loaded at an unrelated
209 location, or anything, really. To avoid regressions,
210 don't adjust the base offset in the latter case, although
211 odds are that, if things really changed, debugging won't
212 quite work. */
f1e55806 213 if ((l_addr & align) == ((l_dynaddr - dynaddr) & align))
cc10cae3
AO
214 {
215 l_addr = l_dynaddr - dynaddr;
79d4c408
DJ
216
217 warning (_(".dynamic section for \"%s\" "
218 "is not at the expected address"), so->so_name);
cc10cae3
AO
219 warning (_("difference appears to be caused by prelink, "
220 "adjusting expectations"));
221 }
79d4c408
DJ
222 else
223 warning (_(".dynamic section for \"%s\" "
224 "is not at the expected address "
225 "(wrong library or version mismatch?)"), so->so_name);
cc10cae3
AO
226 }
227
228 set_addr:
229 so->lm_info->l_addr = l_addr;
230 }
231
232 return so->lm_info->l_addr;
233}
234
13437d4b
KB
235static CORE_ADDR
236LM_NEXT (struct so_list *so)
237{
4b188b9f 238 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
13437d4b 239
cfaefc65
AS
240 return extract_typed_address (so->lm_info->lm + lmo->l_next_offset,
241 builtin_type_void_data_ptr);
13437d4b
KB
242}
243
244static CORE_ADDR
245LM_NAME (struct so_list *so)
246{
4b188b9f 247 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
13437d4b 248
cfaefc65
AS
249 return extract_typed_address (so->lm_info->lm + lmo->l_name_offset,
250 builtin_type_void_data_ptr);
13437d4b
KB
251}
252
13437d4b
KB
253static int
254IGNORE_FIRST_LINK_MAP_ENTRY (struct so_list *so)
255{
4b188b9f 256 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
13437d4b 257
e499d0f1
DJ
258 /* Assume that everything is a library if the dynamic loader was loaded
259 late by a static executable. */
260 if (bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
261 return 0;
262
cfaefc65
AS
263 return extract_typed_address (so->lm_info->lm + lmo->l_prev_offset,
264 builtin_type_void_data_ptr) == 0;
13437d4b
KB
265}
266
13437d4b 267static CORE_ADDR debug_base; /* Base of dynamic linker structures */
13437d4b 268
34439770
DJ
269/* Validity flag for debug_loader_offset. */
270static int debug_loader_offset_p;
271
272/* Load address for the dynamic linker, inferred. */
273static CORE_ADDR debug_loader_offset;
274
275/* Name of the dynamic linker, valid if debug_loader_offset_p. */
276static char *debug_loader_name;
277
93a57060
DJ
278/* Load map address for the main executable. */
279static CORE_ADDR main_lm_addr;
280
13437d4b
KB
281/* Local function prototypes */
282
283static int match_main (char *);
284
2bbe3cc1 285static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
13437d4b
KB
286
287/*
288
289 LOCAL FUNCTION
290
291 bfd_lookup_symbol -- lookup the value for a specific symbol
292
293 SYNOPSIS
294
2bbe3cc1 295 CORE_ADDR bfd_lookup_symbol (bfd *abfd, char *symname)
13437d4b
KB
296
297 DESCRIPTION
298
299 An expensive way to lookup the value of a single symbol for
300 bfd's that are only temporary anyway. This is used by the
301 shared library support to find the address of the debugger
2bbe3cc1 302 notification routine in the shared library.
13437d4b 303
2bbe3cc1
DJ
304 The returned symbol may be in a code or data section; functions
305 will normally be in a code section, but may be in a data section
306 if this architecture uses function descriptors.
87f84c9d 307
13437d4b
KB
308 Note that 0 is specifically allowed as an error return (no
309 such symbol).
310 */
311
312static CORE_ADDR
2bbe3cc1 313bfd_lookup_symbol (bfd *abfd, char *symname)
13437d4b 314{
435b259c 315 long storage_needed;
13437d4b
KB
316 asymbol *sym;
317 asymbol **symbol_table;
318 unsigned int number_of_symbols;
319 unsigned int i;
320 struct cleanup *back_to;
321 CORE_ADDR symaddr = 0;
322
323 storage_needed = bfd_get_symtab_upper_bound (abfd);
324
325 if (storage_needed > 0)
326 {
327 symbol_table = (asymbol **) xmalloc (storage_needed);
4efb68b1 328 back_to = make_cleanup (xfree, symbol_table);
13437d4b
KB
329 number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table);
330
331 for (i = 0; i < number_of_symbols; i++)
332 {
333 sym = *symbol_table++;
6314a349 334 if (strcmp (sym->name, symname) == 0
2bbe3cc1 335 && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0)
13437d4b 336 {
2bbe3cc1 337 /* BFD symbols are section relative. */
13437d4b
KB
338 symaddr = sym->value + sym->section->vma;
339 break;
340 }
341 }
342 do_cleanups (back_to);
343 }
344
345 if (symaddr)
346 return symaddr;
347
348 /* On FreeBSD, the dynamic linker is stripped by default. So we'll
349 have to check the dynamic string table too. */
350
351 storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
352
353 if (storage_needed > 0)
354 {
355 symbol_table = (asymbol **) xmalloc (storage_needed);
4efb68b1 356 back_to = make_cleanup (xfree, symbol_table);
13437d4b
KB
357 number_of_symbols = bfd_canonicalize_dynamic_symtab (abfd, symbol_table);
358
359 for (i = 0; i < number_of_symbols; i++)
360 {
361 sym = *symbol_table++;
87f84c9d 362
6314a349 363 if (strcmp (sym->name, symname) == 0
2bbe3cc1 364 && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0)
13437d4b 365 {
2bbe3cc1 366 /* BFD symbols are section relative. */
13437d4b
KB
367 symaddr = sym->value + sym->section->vma;
368 break;
369 }
370 }
371 do_cleanups (back_to);
372 }
373
374 return symaddr;
375}
376
97ec2c2f
UW
377
378/* Read program header TYPE from inferior memory. The header is found
379 by scanning the OS auxillary vector.
380
381 Return a pointer to allocated memory holding the program header contents,
382 or NULL on failure. If sucessful, and unless P_SECT_SIZE is NULL, the
383 size of those contents is returned to P_SECT_SIZE. Likewise, the target
384 architecture size (32-bit or 64-bit) is returned to P_ARCH_SIZE. */
385
386static gdb_byte *
387read_program_header (int type, int *p_sect_size, int *p_arch_size)
388{
389 CORE_ADDR at_phdr, at_phent, at_phnum;
390 int arch_size, sect_size;
391 CORE_ADDR sect_addr;
392 gdb_byte *buf;
393
394 /* Get required auxv elements from target. */
395 if (target_auxv_search (&current_target, AT_PHDR, &at_phdr) <= 0)
396 return 0;
397 if (target_auxv_search (&current_target, AT_PHENT, &at_phent) <= 0)
398 return 0;
399 if (target_auxv_search (&current_target, AT_PHNUM, &at_phnum) <= 0)
400 return 0;
401 if (!at_phdr || !at_phnum)
402 return 0;
403
404 /* Determine ELF architecture type. */
405 if (at_phent == sizeof (Elf32_External_Phdr))
406 arch_size = 32;
407 else if (at_phent == sizeof (Elf64_External_Phdr))
408 arch_size = 64;
409 else
410 return 0;
411
412 /* Find .dynamic section via the PT_DYNAMIC PHDR. */
413 if (arch_size == 32)
414 {
415 Elf32_External_Phdr phdr;
416 int i;
417
418 /* Search for requested PHDR. */
419 for (i = 0; i < at_phnum; i++)
420 {
421 if (target_read_memory (at_phdr + i * sizeof (phdr),
422 (gdb_byte *)&phdr, sizeof (phdr)))
423 return 0;
424
425 if (extract_unsigned_integer ((gdb_byte *)phdr.p_type, 4) == type)
426 break;
427 }
428
429 if (i == at_phnum)
430 return 0;
431
432 /* Retrieve address and size. */
433 sect_addr = extract_unsigned_integer ((gdb_byte *)phdr.p_vaddr, 4);
434 sect_size = extract_unsigned_integer ((gdb_byte *)phdr.p_memsz, 4);
435 }
436 else
437 {
438 Elf64_External_Phdr phdr;
439 int i;
440
441 /* Search for requested PHDR. */
442 for (i = 0; i < at_phnum; i++)
443 {
444 if (target_read_memory (at_phdr + i * sizeof (phdr),
445 (gdb_byte *)&phdr, sizeof (phdr)))
446 return 0;
447
448 if (extract_unsigned_integer ((gdb_byte *)phdr.p_type, 4) == type)
449 break;
450 }
451
452 if (i == at_phnum)
453 return 0;
454
455 /* Retrieve address and size. */
456 sect_addr = extract_unsigned_integer ((gdb_byte *)phdr.p_vaddr, 8);
457 sect_size = extract_unsigned_integer ((gdb_byte *)phdr.p_memsz, 8);
458 }
459
460 /* Read in requested program header. */
461 buf = xmalloc (sect_size);
462 if (target_read_memory (sect_addr, buf, sect_size))
463 {
464 xfree (buf);
465 return NULL;
466 }
467
468 if (p_arch_size)
469 *p_arch_size = arch_size;
470 if (p_sect_size)
471 *p_sect_size = sect_size;
472
473 return buf;
474}
475
476
477/* Return program interpreter string. */
478static gdb_byte *
479find_program_interpreter (void)
480{
481 gdb_byte *buf = NULL;
482
483 /* If we have an exec_bfd, use its section table. */
484 if (exec_bfd
485 && bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour)
486 {
487 struct bfd_section *interp_sect;
488
489 interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
490 if (interp_sect != NULL)
491 {
492 CORE_ADDR sect_addr = bfd_section_vma (exec_bfd, interp_sect);
493 int sect_size = bfd_section_size (exec_bfd, interp_sect);
494
495 buf = xmalloc (sect_size);
496 bfd_get_section_contents (exec_bfd, interp_sect, buf, 0, sect_size);
497 }
498 }
499
500 /* If we didn't find it, use the target auxillary vector. */
501 if (!buf)
502 buf = read_program_header (PT_INTERP, NULL, NULL);
503
504 return buf;
505}
506
507
3a40aaa0
UW
508/* Scan for DYNTAG in .dynamic section of ABFD. If DYNTAG is found 1 is
509 returned and the corresponding PTR is set. */
510
511static int
512scan_dyntag (int dyntag, bfd *abfd, CORE_ADDR *ptr)
513{
514 int arch_size, step, sect_size;
515 long dyn_tag;
516 CORE_ADDR dyn_ptr, dyn_addr;
65728c26 517 gdb_byte *bufend, *bufstart, *buf;
3a40aaa0
UW
518 Elf32_External_Dyn *x_dynp_32;
519 Elf64_External_Dyn *x_dynp_64;
520 struct bfd_section *sect;
521
522 if (abfd == NULL)
523 return 0;
524 arch_size = bfd_get_arch_size (abfd);
525 if (arch_size == -1)
526 return 0;
527
528 /* Find the start address of the .dynamic section. */
529 sect = bfd_get_section_by_name (abfd, ".dynamic");
530 if (sect == NULL)
531 return 0;
532 dyn_addr = bfd_section_vma (abfd, sect);
533
65728c26
DJ
534 /* Read in .dynamic from the BFD. We will get the actual value
535 from memory later. */
3a40aaa0 536 sect_size = bfd_section_size (abfd, sect);
65728c26
DJ
537 buf = bufstart = alloca (sect_size);
538 if (!bfd_get_section_contents (abfd, sect,
539 buf, 0, sect_size))
540 return 0;
3a40aaa0
UW
541
542 /* Iterate over BUF and scan for DYNTAG. If found, set PTR and return. */
543 step = (arch_size == 32) ? sizeof (Elf32_External_Dyn)
544 : sizeof (Elf64_External_Dyn);
545 for (bufend = buf + sect_size;
546 buf < bufend;
547 buf += step)
548 {
549 if (arch_size == 32)
550 {
551 x_dynp_32 = (Elf32_External_Dyn *) buf;
552 dyn_tag = bfd_h_get_32 (abfd, (bfd_byte *) x_dynp_32->d_tag);
553 dyn_ptr = bfd_h_get_32 (abfd, (bfd_byte *) x_dynp_32->d_un.d_ptr);
554 }
65728c26 555 else
3a40aaa0
UW
556 {
557 x_dynp_64 = (Elf64_External_Dyn *) buf;
558 dyn_tag = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_tag);
559 dyn_ptr = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_un.d_ptr);
560 }
561 if (dyn_tag == DT_NULL)
562 return 0;
563 if (dyn_tag == dyntag)
564 {
65728c26
DJ
565 /* If requested, try to read the runtime value of this .dynamic
566 entry. */
3a40aaa0 567 if (ptr)
65728c26
DJ
568 {
569 gdb_byte ptr_buf[8];
570 CORE_ADDR ptr_addr;
571
572 ptr_addr = dyn_addr + (buf - bufstart) + arch_size / 8;
573 if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0)
574 dyn_ptr = extract_typed_address (ptr_buf,
575 builtin_type_void_data_ptr);
576 *ptr = dyn_ptr;
577 }
578 return 1;
3a40aaa0
UW
579 }
580 }
581
582 return 0;
583}
584
97ec2c2f
UW
585/* Scan for DYNTAG in .dynamic section of the target's main executable,
586 found by consulting the OS auxillary vector. If DYNTAG is found 1 is
587 returned and the corresponding PTR is set. */
588
589static int
590scan_dyntag_auxv (int dyntag, CORE_ADDR *ptr)
591{
592 int sect_size, arch_size, step;
593 long dyn_tag;
594 CORE_ADDR dyn_ptr;
595 gdb_byte *bufend, *bufstart, *buf;
596
597 /* Read in .dynamic section. */
598 buf = bufstart = read_program_header (PT_DYNAMIC, &sect_size, &arch_size);
599 if (!buf)
600 return 0;
601
602 /* Iterate over BUF and scan for DYNTAG. If found, set PTR and return. */
603 step = (arch_size == 32) ? sizeof (Elf32_External_Dyn)
604 : sizeof (Elf64_External_Dyn);
605 for (bufend = buf + sect_size;
606 buf < bufend;
607 buf += step)
608 {
609 if (arch_size == 32)
610 {
611 Elf32_External_Dyn *dynp = (Elf32_External_Dyn *) buf;
612 dyn_tag = extract_unsigned_integer ((gdb_byte *) dynp->d_tag, 4);
613 dyn_ptr = extract_unsigned_integer ((gdb_byte *) dynp->d_un.d_ptr, 4);
614 }
615 else
616 {
617 Elf64_External_Dyn *dynp = (Elf64_External_Dyn *) buf;
618 dyn_tag = extract_unsigned_integer ((gdb_byte *) dynp->d_tag, 8);
619 dyn_ptr = extract_unsigned_integer ((gdb_byte *) dynp->d_un.d_ptr, 8);
620 }
621 if (dyn_tag == DT_NULL)
622 break;
623
624 if (dyn_tag == dyntag)
625 {
626 if (ptr)
627 *ptr = dyn_ptr;
628
629 xfree (bufstart);
630 return 1;
631 }
632 }
633
634 xfree (bufstart);
635 return 0;
636}
637
3a40aaa0 638
13437d4b
KB
639/*
640
641 LOCAL FUNCTION
642
643 elf_locate_base -- locate the base address of dynamic linker structs
644 for SVR4 elf targets.
645
646 SYNOPSIS
647
648 CORE_ADDR elf_locate_base (void)
649
650 DESCRIPTION
651
652 For SVR4 elf targets the address of the dynamic linker's runtime
653 structure is contained within the dynamic info section in the
654 executable file. The dynamic section is also mapped into the
655 inferior address space. Because the runtime loader fills in the
656 real address before starting the inferior, we have to read in the
657 dynamic info section from the inferior address space.
658 If there are any errors while trying to find the address, we
659 silently return 0, otherwise the found address is returned.
660
661 */
662
663static CORE_ADDR
664elf_locate_base (void)
665{
3a40aaa0
UW
666 struct minimal_symbol *msymbol;
667 CORE_ADDR dyn_ptr;
13437d4b 668
65728c26
DJ
669 /* Look for DT_MIPS_RLD_MAP first. MIPS executables use this
670 instead of DT_DEBUG, although they sometimes contain an unused
671 DT_DEBUG. */
97ec2c2f
UW
672 if (scan_dyntag (DT_MIPS_RLD_MAP, exec_bfd, &dyn_ptr)
673 || scan_dyntag_auxv (DT_MIPS_RLD_MAP, &dyn_ptr))
3a40aaa0
UW
674 {
675 gdb_byte *pbuf;
676 int pbuf_size = TYPE_LENGTH (builtin_type_void_data_ptr);
677 pbuf = alloca (pbuf_size);
678 /* DT_MIPS_RLD_MAP contains a pointer to the address
679 of the dynamic link structure. */
680 if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
e499d0f1 681 return 0;
3a40aaa0 682 return extract_typed_address (pbuf, builtin_type_void_data_ptr);
e499d0f1
DJ
683 }
684
65728c26 685 /* Find DT_DEBUG. */
97ec2c2f
UW
686 if (scan_dyntag (DT_DEBUG, exec_bfd, &dyn_ptr)
687 || scan_dyntag_auxv (DT_DEBUG, &dyn_ptr))
65728c26
DJ
688 return dyn_ptr;
689
3a40aaa0
UW
690 /* This may be a static executable. Look for the symbol
691 conventionally named _r_debug, as a last resort. */
692 msymbol = lookup_minimal_symbol ("_r_debug", NULL, symfile_objfile);
693 if (msymbol != NULL)
694 return SYMBOL_VALUE_ADDRESS (msymbol);
13437d4b
KB
695
696 /* DT_DEBUG entry not found. */
697 return 0;
698}
699
13437d4b
KB
700/*
701
702 LOCAL FUNCTION
703
704 locate_base -- locate the base address of dynamic linker structs
705
706 SYNOPSIS
707
708 CORE_ADDR locate_base (void)
709
710 DESCRIPTION
711
712 For both the SunOS and SVR4 shared library implementations, if the
713 inferior executable has been linked dynamically, there is a single
714 address somewhere in the inferior's data space which is the key to
715 locating all of the dynamic linker's runtime structures. This
716 address is the value of the debug base symbol. The job of this
717 function is to find and return that address, or to return 0 if there
718 is no such address (the executable is statically linked for example).
719
720 For SunOS, the job is almost trivial, since the dynamic linker and
721 all of it's structures are statically linked to the executable at
722 link time. Thus the symbol for the address we are looking for has
723 already been added to the minimal symbol table for the executable's
724 objfile at the time the symbol file's symbols were read, and all we
725 have to do is look it up there. Note that we explicitly do NOT want
726 to find the copies in the shared library.
727
728 The SVR4 version is a bit more complicated because the address
729 is contained somewhere in the dynamic info section. We have to go
730 to a lot more work to discover the address of the debug base symbol.
731 Because of this complexity, we cache the value we find and return that
732 value on subsequent invocations. Note there is no copy in the
733 executable symbol tables.
734
735 */
736
737static CORE_ADDR
738locate_base (void)
739{
13437d4b
KB
740 /* Check to see if we have a currently valid address, and if so, avoid
741 doing all this work again and just return the cached address. If
742 we have no cached address, try to locate it in the dynamic info
d5a921c9
KB
743 section for ELF executables. There's no point in doing any of this
744 though if we don't have some link map offsets to work with. */
13437d4b 745
d5a921c9 746 if (debug_base == 0 && svr4_have_link_map_offsets ())
13437d4b
KB
747 {
748 if (exec_bfd != NULL
749 && bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour)
750 debug_base = elf_locate_base ();
13437d4b
KB
751 }
752 return (debug_base);
13437d4b
KB
753}
754
e4cd0d6a
MK
755/* Find the first element in the inferior's dynamic link map, and
756 return its address in the inferior.
13437d4b 757
e4cd0d6a
MK
758 FIXME: Perhaps we should validate the info somehow, perhaps by
759 checking r_version for a known version number, or r_state for
760 RT_CONSISTENT. */
13437d4b
KB
761
762static CORE_ADDR
e4cd0d6a 763solib_svr4_r_map (void)
13437d4b 764{
4b188b9f 765 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
13437d4b 766
e4cd0d6a
MK
767 return read_memory_typed_address (debug_base + lmo->r_map_offset,
768 builtin_type_void_data_ptr);
769}
13437d4b 770
7cd25cfc
DJ
771/* Find r_brk from the inferior's debug base. */
772
773static CORE_ADDR
774solib_svr4_r_brk (void)
775{
776 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
777
778 return read_memory_typed_address (debug_base + lmo->r_brk_offset,
779 builtin_type_void_data_ptr);
780}
781
e4cd0d6a
MK
782/* Find the link map for the dynamic linker (if it is not in the
783 normal list of loaded shared objects). */
13437d4b 784
e4cd0d6a
MK
785static CORE_ADDR
786solib_svr4_r_ldsomap (void)
787{
788 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
789 ULONGEST version;
13437d4b 790
e4cd0d6a
MK
791 /* Check version, and return zero if `struct r_debug' doesn't have
792 the r_ldsomap member. */
793 version = read_memory_unsigned_integer (debug_base + lmo->r_version_offset,
794 lmo->r_version_size);
795 if (version < 2 || lmo->r_ldsomap_offset == -1)
796 return 0;
13437d4b 797
e4cd0d6a
MK
798 return read_memory_typed_address (debug_base + lmo->r_ldsomap_offset,
799 builtin_type_void_data_ptr);
13437d4b
KB
800}
801
13437d4b
KB
802/*
803
804 LOCAL FUNCTION
805
806 open_symbol_file_object
807
808 SYNOPSIS
809
810 void open_symbol_file_object (void *from_tty)
811
812 DESCRIPTION
813
814 If no open symbol file, attempt to locate and open the main symbol
815 file. On SVR4 systems, this is the first link map entry. If its
816 name is here, we can open it. Useful when attaching to a process
817 without first loading its symbol file.
818
819 If FROM_TTYP dereferences to a non-zero integer, allow messages to
820 be printed. This parameter is a pointer rather than an int because
821 open_symbol_file_object() is called via catch_errors() and
822 catch_errors() requires a pointer argument. */
823
824static int
825open_symbol_file_object (void *from_ttyp)
826{
827 CORE_ADDR lm, l_name;
828 char *filename;
829 int errcode;
830 int from_tty = *(int *)from_ttyp;
4b188b9f 831 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
cfaefc65
AS
832 int l_name_size = TYPE_LENGTH (builtin_type_void_data_ptr);
833 gdb_byte *l_name_buf = xmalloc (l_name_size);
b8c9b27d 834 struct cleanup *cleanups = make_cleanup (xfree, l_name_buf);
13437d4b
KB
835
836 if (symfile_objfile)
837 if (!query ("Attempt to reload symbols from process? "))
838 return 0;
839
7cd25cfc
DJ
840 /* Always locate the debug struct, in case it has moved. */
841 debug_base = 0;
842 if (locate_base () == 0)
13437d4b
KB
843 return 0; /* failed somehow... */
844
845 /* First link map member should be the executable. */
e4cd0d6a
MK
846 lm = solib_svr4_r_map ();
847 if (lm == 0)
13437d4b
KB
848 return 0; /* failed somehow... */
849
850 /* Read address of name from target memory to GDB. */
cfaefc65 851 read_memory (lm + lmo->l_name_offset, l_name_buf, l_name_size);
13437d4b 852
cfaefc65
AS
853 /* Convert the address to host format. */
854 l_name = extract_typed_address (l_name_buf, builtin_type_void_data_ptr);
13437d4b
KB
855
856 /* Free l_name_buf. */
857 do_cleanups (cleanups);
858
859 if (l_name == 0)
860 return 0; /* No filename. */
861
862 /* Now fetch the filename from target memory. */
863 target_read_string (l_name, &filename, SO_NAME_MAX_PATH_SIZE - 1, &errcode);
ea5bf0a1 864 make_cleanup (xfree, filename);
13437d4b
KB
865
866 if (errcode)
867 {
8a3fe4f8 868 warning (_("failed to read exec filename from attached file: %s"),
13437d4b
KB
869 safe_strerror (errcode));
870 return 0;
871 }
872
13437d4b 873 /* Have a pathname: read the symbol file. */
1adeb98a 874 symbol_file_add_main (filename, from_tty);
13437d4b
KB
875
876 return 1;
877}
13437d4b 878
34439770
DJ
879/* If no shared library information is available from the dynamic
880 linker, build a fallback list from other sources. */
881
882static struct so_list *
883svr4_default_sos (void)
884{
885 struct so_list *head = NULL;
886 struct so_list **link_ptr = &head;
887
888 if (debug_loader_offset_p)
889 {
890 struct so_list *new = XZALLOC (struct so_list);
891
892 new->lm_info = xmalloc (sizeof (struct lm_info));
893
894 /* Nothing will ever check the cached copy of the link
895 map if we set l_addr. */
896 new->lm_info->l_addr = debug_loader_offset;
93a57060 897 new->lm_info->lm_addr = 0;
34439770
DJ
898 new->lm_info->lm = NULL;
899
900 strncpy (new->so_name, debug_loader_name, SO_NAME_MAX_PATH_SIZE - 1);
901 new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
902 strcpy (new->so_original_name, new->so_name);
903
904 *link_ptr = new;
905 link_ptr = &new->next;
906 }
907
908 return head;
909}
910
13437d4b
KB
911/* LOCAL FUNCTION
912
913 current_sos -- build a list of currently loaded shared objects
914
915 SYNOPSIS
916
917 struct so_list *current_sos ()
918
919 DESCRIPTION
920
921 Build a list of `struct so_list' objects describing the shared
922 objects currently loaded in the inferior. This list does not
923 include an entry for the main executable file.
924
925 Note that we only gather information directly available from the
926 inferior --- we don't examine any of the shared library files
927 themselves. The declaration of `struct so_list' says which fields
928 we provide values for. */
929
930static struct so_list *
931svr4_current_sos (void)
932{
933 CORE_ADDR lm;
934 struct so_list *head = 0;
935 struct so_list **link_ptr = &head;
e4cd0d6a 936 CORE_ADDR ldsomap = 0;
13437d4b 937
7cd25cfc
DJ
938 /* Always locate the debug struct, in case it has moved. */
939 debug_base = 0;
940 locate_base ();
13437d4b 941
7cd25cfc
DJ
942 /* If we can't find the dynamic linker's base structure, this
943 must not be a dynamically linked executable. Hmm. */
944 if (! debug_base)
945 return svr4_default_sos ();
13437d4b
KB
946
947 /* Walk the inferior's link map list, and build our list of
948 `struct so_list' nodes. */
e4cd0d6a 949 lm = solib_svr4_r_map ();
34439770 950
13437d4b
KB
951 while (lm)
952 {
4b188b9f 953 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
f4456994 954 struct so_list *new = XZALLOC (struct so_list);
b8c9b27d 955 struct cleanup *old_chain = make_cleanup (xfree, new);
13437d4b 956
13437d4b 957 new->lm_info = xmalloc (sizeof (struct lm_info));
b8c9b27d 958 make_cleanup (xfree, new->lm_info);
13437d4b 959
831004b7 960 new->lm_info->l_addr = (CORE_ADDR)-1;
93a57060 961 new->lm_info->lm_addr = lm;
f4456994 962 new->lm_info->lm = xzalloc (lmo->link_map_size);
b8c9b27d 963 make_cleanup (xfree, new->lm_info->lm);
13437d4b
KB
964
965 read_memory (lm, new->lm_info->lm, lmo->link_map_size);
966
967 lm = LM_NEXT (new);
968
969 /* For SVR4 versions, the first entry in the link map is for the
970 inferior executable, so we must ignore it. For some versions of
971 SVR4, it has no name. For others (Solaris 2.3 for example), it
972 does have a name, so we can no longer use a missing name to
973 decide when to ignore it. */
e4cd0d6a 974 if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
93a57060
DJ
975 {
976 main_lm_addr = new->lm_info->lm_addr;
977 free_so (new);
978 }
13437d4b
KB
979 else
980 {
981 int errcode;
982 char *buffer;
983
984 /* Extract this shared object's name. */
985 target_read_string (LM_NAME (new), &buffer,
986 SO_NAME_MAX_PATH_SIZE - 1, &errcode);
987 if (errcode != 0)
8a3fe4f8
AC
988 warning (_("Can't read pathname for load map: %s."),
989 safe_strerror (errcode));
13437d4b
KB
990 else
991 {
992 strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
993 new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
13437d4b
KB
994 strcpy (new->so_original_name, new->so_name);
995 }
ea5bf0a1 996 xfree (buffer);
13437d4b
KB
997
998 /* If this entry has no name, or its name matches the name
999 for the main executable, don't include it in the list. */
1000 if (! new->so_name[0]
1001 || match_main (new->so_name))
1002 free_so (new);
1003 else
1004 {
1005 new->next = 0;
1006 *link_ptr = new;
1007 link_ptr = &new->next;
1008 }
1009 }
1010
e4cd0d6a
MK
1011 /* On Solaris, the dynamic linker is not in the normal list of
1012 shared objects, so make sure we pick it up too. Having
1013 symbol information for the dynamic linker is quite crucial
1014 for skipping dynamic linker resolver code. */
1015 if (lm == 0 && ldsomap == 0)
1016 lm = ldsomap = solib_svr4_r_ldsomap ();
1017
13437d4b
KB
1018 discard_cleanups (old_chain);
1019 }
1020
34439770
DJ
1021 if (head == NULL)
1022 return svr4_default_sos ();
1023
13437d4b
KB
1024 return head;
1025}
1026
93a57060 1027/* Get the address of the link_map for a given OBJFILE. */
bc4a16ae
EZ
1028
1029CORE_ADDR
1030svr4_fetch_objfile_link_map (struct objfile *objfile)
1031{
93a57060 1032 struct so_list *so;
bc4a16ae 1033
93a57060
DJ
1034 /* Cause svr4_current_sos() to be run if it hasn't been already. */
1035 if (main_lm_addr == 0)
1036 solib_add (NULL, 0, &current_target, auto_solib_add);
bc4a16ae 1037
93a57060
DJ
1038 /* svr4_current_sos() will set main_lm_addr for the main executable. */
1039 if (objfile == symfile_objfile)
1040 return main_lm_addr;
1041
1042 /* The other link map addresses may be found by examining the list
1043 of shared libraries. */
1044 for (so = master_so_list (); so; so = so->next)
1045 if (so->objfile == objfile)
1046 return so->lm_info->lm_addr;
1047
1048 /* Not found! */
bc4a16ae
EZ
1049 return 0;
1050}
13437d4b
KB
1051
1052/* On some systems, the only way to recognize the link map entry for
1053 the main executable file is by looking at its name. Return
1054 non-zero iff SONAME matches one of the known main executable names. */
1055
1056static int
1057match_main (char *soname)
1058{
1059 char **mainp;
1060
1061 for (mainp = main_name_list; *mainp != NULL; mainp++)
1062 {
1063 if (strcmp (soname, *mainp) == 0)
1064 return (1);
1065 }
1066
1067 return (0);
1068}
1069
13437d4b
KB
1070/* Return 1 if PC lies in the dynamic symbol resolution code of the
1071 SVR4 run time loader. */
13437d4b
KB
1072static CORE_ADDR interp_text_sect_low;
1073static CORE_ADDR interp_text_sect_high;
1074static CORE_ADDR interp_plt_sect_low;
1075static CORE_ADDR interp_plt_sect_high;
1076
7d522c90 1077int
d7fa2ae2 1078svr4_in_dynsym_resolve_code (CORE_ADDR pc)
13437d4b
KB
1079{
1080 return ((pc >= interp_text_sect_low && pc < interp_text_sect_high)
1081 || (pc >= interp_plt_sect_low && pc < interp_plt_sect_high)
1082 || in_plt_section (pc, NULL));
1083}
13437d4b 1084
2f4950cd
AC
1085/* Given an executable's ABFD and target, compute the entry-point
1086 address. */
1087
1088static CORE_ADDR
1089exec_entry_point (struct bfd *abfd, struct target_ops *targ)
1090{
1091 /* KevinB wrote ... for most targets, the address returned by
1092 bfd_get_start_address() is the entry point for the start
1093 function. But, for some targets, bfd_get_start_address() returns
1094 the address of a function descriptor from which the entry point
1095 address may be extracted. This address is extracted by
1096 gdbarch_convert_from_func_ptr_addr(). The method
1097 gdbarch_convert_from_func_ptr_addr() is the merely the identify
1098 function for targets which don't use function descriptors. */
1cf3db46 1099 return gdbarch_convert_from_func_ptr_addr (target_gdbarch,
2f4950cd
AC
1100 bfd_get_start_address (abfd),
1101 targ);
1102}
13437d4b
KB
1103
1104/*
1105
1106 LOCAL FUNCTION
1107
1108 enable_break -- arrange for dynamic linker to hit breakpoint
1109
1110 SYNOPSIS
1111
1112 int enable_break (void)
1113
1114 DESCRIPTION
1115
1116 Both the SunOS and the SVR4 dynamic linkers have, as part of their
1117 debugger interface, support for arranging for the inferior to hit
1118 a breakpoint after mapping in the shared libraries. This function
1119 enables that breakpoint.
1120
1121 For SunOS, there is a special flag location (in_debugger) which we
1122 set to 1. When the dynamic linker sees this flag set, it will set
1123 a breakpoint at a location known only to itself, after saving the
1124 original contents of that place and the breakpoint address itself,
1125 in it's own internal structures. When we resume the inferior, it
1126 will eventually take a SIGTRAP when it runs into the breakpoint.
1127 We handle this (in a different place) by restoring the contents of
1128 the breakpointed location (which is only known after it stops),
1129 chasing around to locate the shared libraries that have been
1130 loaded, then resuming.
1131
1132 For SVR4, the debugger interface structure contains a member (r_brk)
1133 which is statically initialized at the time the shared library is
1134 built, to the offset of a function (_r_debug_state) which is guaran-
1135 teed to be called once before mapping in a library, and again when
1136 the mapping is complete. At the time we are examining this member,
1137 it contains only the unrelocated offset of the function, so we have
1138 to do our own relocation. Later, when the dynamic linker actually
1139 runs, it relocates r_brk to be the actual address of _r_debug_state().
1140
1141 The debugger interface structure also contains an enumeration which
1142 is set to either RT_ADD or RT_DELETE prior to changing the mapping,
1143 depending upon whether or not the library is being mapped or unmapped,
1144 and then set to RT_CONSISTENT after the library is mapped/unmapped.
1145 */
1146
1147static int
1148enable_break (void)
1149{
13437d4b
KB
1150 struct minimal_symbol *msymbol;
1151 char **bkpt_namep;
1152 asection *interp_sect;
97ec2c2f 1153 gdb_byte *interp_name;
7cd25cfc 1154 CORE_ADDR sym_addr;
13437d4b
KB
1155
1156 /* First, remove all the solib event breakpoints. Their addresses
1157 may have changed since the last time we ran the program. */
1158 remove_solib_event_breakpoints ();
1159
13437d4b
KB
1160 interp_text_sect_low = interp_text_sect_high = 0;
1161 interp_plt_sect_low = interp_plt_sect_high = 0;
1162
7cd25cfc
DJ
1163 /* If we already have a shared library list in the target, and
1164 r_debug contains r_brk, set the breakpoint there - this should
1165 mean r_brk has already been relocated. Assume the dynamic linker
1166 is the object containing r_brk. */
1167
1168 solib_add (NULL, 0, &current_target, auto_solib_add);
1169 sym_addr = 0;
1170 if (debug_base && solib_svr4_r_map () != 0)
1171 sym_addr = solib_svr4_r_brk ();
1172
1173 if (sym_addr != 0)
1174 {
1175 struct obj_section *os;
1176
b36ec657 1177 sym_addr = gdbarch_addr_bits_remove
1cf3db46 1178 (target_gdbarch, gdbarch_convert_from_func_ptr_addr (target_gdbarch,
b36ec657
DJ
1179 sym_addr,
1180 &current_target));
1181
7cd25cfc
DJ
1182 os = find_pc_section (sym_addr);
1183 if (os != NULL)
1184 {
1185 /* Record the relocated start and end address of the dynamic linker
1186 text and plt section for svr4_in_dynsym_resolve_code. */
1187 bfd *tmp_bfd;
1188 CORE_ADDR load_addr;
1189
1190 tmp_bfd = os->objfile->obfd;
1191 load_addr = ANOFFSET (os->objfile->section_offsets,
1192 os->objfile->sect_index_text);
1193
1194 interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
1195 if (interp_sect)
1196 {
1197 interp_text_sect_low =
1198 bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1199 interp_text_sect_high =
1200 interp_text_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1201 }
1202 interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt");
1203 if (interp_sect)
1204 {
1205 interp_plt_sect_low =
1206 bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1207 interp_plt_sect_high =
1208 interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1209 }
1210
1211 create_solib_event_breakpoint (sym_addr);
1212 return 1;
1213 }
1214 }
1215
97ec2c2f 1216 /* Find the program interpreter; if not found, warn the user and drop
13437d4b 1217 into the old breakpoint at symbol code. */
97ec2c2f
UW
1218 interp_name = find_program_interpreter ();
1219 if (interp_name)
13437d4b 1220 {
8ad2fcde
KB
1221 CORE_ADDR load_addr = 0;
1222 int load_addr_found = 0;
2ec9a4f8 1223 int loader_found_in_list = 0;
f8766ec1 1224 struct so_list *so;
e4f7b8c8 1225 bfd *tmp_bfd = NULL;
2f4950cd 1226 struct target_ops *tmp_bfd_target;
f1838a98 1227 volatile struct gdb_exception ex;
13437d4b 1228
7cd25cfc 1229 sym_addr = 0;
13437d4b
KB
1230
1231 /* Now we need to figure out where the dynamic linker was
1232 loaded so that we can load its symbols and place a breakpoint
1233 in the dynamic linker itself.
1234
1235 This address is stored on the stack. However, I've been unable
1236 to find any magic formula to find it for Solaris (appears to
1237 be trivial on GNU/Linux). Therefore, we have to try an alternate
1238 mechanism to find the dynamic linker's base address. */
e4f7b8c8 1239
f1838a98
UW
1240 TRY_CATCH (ex, RETURN_MASK_ALL)
1241 {
97ec2c2f 1242 tmp_bfd = solib_bfd_open (interp_name);
f1838a98 1243 }
13437d4b
KB
1244 if (tmp_bfd == NULL)
1245 goto bkpt_at_symbol;
1246
2f4950cd
AC
1247 /* Now convert the TMP_BFD into a target. That way target, as
1248 well as BFD operations can be used. Note that closing the
1249 target will also close the underlying bfd. */
1250 tmp_bfd_target = target_bfd_reopen (tmp_bfd);
1251
f8766ec1
KB
1252 /* On a running target, we can get the dynamic linker's base
1253 address from the shared library table. */
f8766ec1
KB
1254 so = master_so_list ();
1255 while (so)
8ad2fcde 1256 {
97ec2c2f 1257 if (svr4_same_1 (interp_name, so->so_original_name))
8ad2fcde
KB
1258 {
1259 load_addr_found = 1;
2ec9a4f8 1260 loader_found_in_list = 1;
cc10cae3 1261 load_addr = LM_ADDR_CHECK (so, tmp_bfd);
8ad2fcde
KB
1262 break;
1263 }
f8766ec1 1264 so = so->next;
8ad2fcde
KB
1265 }
1266
8d4e36ba
JB
1267 /* If we were not able to find the base address of the loader
1268 from our so_list, then try using the AT_BASE auxilliary entry. */
1269 if (!load_addr_found)
1270 if (target_auxv_search (&current_target, AT_BASE, &load_addr) > 0)
1271 load_addr_found = 1;
1272
8ad2fcde
KB
1273 /* Otherwise we find the dynamic linker's base address by examining
1274 the current pc (which should point at the entry point for the
8d4e36ba
JB
1275 dynamic linker) and subtracting the offset of the entry point.
1276
1277 This is more fragile than the previous approaches, but is a good
1278 fallback method because it has actually been working well in
1279 most cases. */
8ad2fcde 1280 if (!load_addr_found)
2ec9a4f8
DJ
1281 load_addr = (read_pc ()
1282 - exec_entry_point (tmp_bfd, tmp_bfd_target));
1283
1284 if (!loader_found_in_list)
34439770 1285 {
97ec2c2f 1286 debug_loader_name = xstrdup (interp_name);
34439770
DJ
1287 debug_loader_offset_p = 1;
1288 debug_loader_offset = load_addr;
2bbe3cc1 1289 solib_add (NULL, 0, &current_target, auto_solib_add);
34439770 1290 }
13437d4b
KB
1291
1292 /* Record the relocated start and end address of the dynamic linker
d7fa2ae2 1293 text and plt section for svr4_in_dynsym_resolve_code. */
13437d4b
KB
1294 interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
1295 if (interp_sect)
1296 {
1297 interp_text_sect_low =
1298 bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1299 interp_text_sect_high =
1300 interp_text_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1301 }
1302 interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt");
1303 if (interp_sect)
1304 {
1305 interp_plt_sect_low =
1306 bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1307 interp_plt_sect_high =
1308 interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1309 }
1310
1311 /* Now try to set a breakpoint in the dynamic linker. */
1312 for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
1313 {
2bbe3cc1 1314 sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep);
13437d4b
KB
1315 if (sym_addr != 0)
1316 break;
1317 }
1318
2bbe3cc1
DJ
1319 if (sym_addr != 0)
1320 /* Convert 'sym_addr' from a function pointer to an address.
1321 Because we pass tmp_bfd_target instead of the current
1322 target, this will always produce an unrelocated value. */
1cf3db46 1323 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch,
2bbe3cc1
DJ
1324 sym_addr,
1325 tmp_bfd_target);
1326
2f4950cd
AC
1327 /* We're done with both the temporary bfd and target. Remember,
1328 closing the target closes the underlying bfd. */
1329 target_close (tmp_bfd_target, 0);
13437d4b
KB
1330
1331 if (sym_addr != 0)
1332 {
1333 create_solib_event_breakpoint (load_addr + sym_addr);
97ec2c2f 1334 xfree (interp_name);
13437d4b
KB
1335 return 1;
1336 }
1337
1338 /* For whatever reason we couldn't set a breakpoint in the dynamic
1339 linker. Warn and drop into the old code. */
1340 bkpt_at_symbol:
97ec2c2f 1341 xfree (interp_name);
82d03102
PG
1342 warning (_("Unable to find dynamic linker breakpoint function.\n"
1343 "GDB will be unable to debug shared library initializers\n"
1344 "and track explicitly loaded dynamic code."));
13437d4b 1345 }
13437d4b 1346
e499d0f1
DJ
1347 /* Scan through the lists of symbols, trying to look up the symbol and
1348 set a breakpoint there. Terminate loop when we/if we succeed. */
1349
1350 for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
1351 {
1352 msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
1353 if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
1354 {
1355 create_solib_event_breakpoint (SYMBOL_VALUE_ADDRESS (msymbol));
1356 return 1;
1357 }
1358 }
13437d4b 1359
13437d4b
KB
1360 for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
1361 {
1362 msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
1363 if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
1364 {
1365 create_solib_event_breakpoint (SYMBOL_VALUE_ADDRESS (msymbol));
1366 return 1;
1367 }
1368 }
542c95c2 1369 return 0;
13437d4b
KB
1370}
1371
1372/*
1373
1374 LOCAL FUNCTION
1375
1376 special_symbol_handling -- additional shared library symbol handling
1377
1378 SYNOPSIS
1379
1380 void special_symbol_handling ()
1381
1382 DESCRIPTION
1383
1384 Once the symbols from a shared object have been loaded in the usual
1385 way, we are called to do any system specific symbol handling that
1386 is needed.
1387
ab31aa69 1388 For SunOS4, this consisted of grunging around in the dynamic
13437d4b
KB
1389 linkers structures to find symbol definitions for "common" symbols
1390 and adding them to the minimal symbol table for the runtime common
1391 objfile.
1392
ab31aa69
KB
1393 However, for SVR4, there's nothing to do.
1394
13437d4b
KB
1395 */
1396
1397static void
1398svr4_special_symbol_handling (void)
1399{
13437d4b
KB
1400}
1401
e2a44558
KB
1402/* Relocate the main executable. This function should be called upon
1403 stopping the inferior process at the entry point to the program.
1404 The entry point from BFD is compared to the PC and if they are
1405 different, the main executable is relocated by the proper amount.
1406
1407 As written it will only attempt to relocate executables which
1408 lack interpreter sections. It seems likely that only dynamic
1409 linker executables will get relocated, though it should work
1410 properly for a position-independent static executable as well. */
1411
1412static void
1413svr4_relocate_main_executable (void)
1414{
1415 asection *interp_sect;
1416 CORE_ADDR pc = read_pc ();
1417
1418 /* Decide if the objfile needs to be relocated. As indicated above,
1419 we will only be here when execution is stopped at the beginning
1420 of the program. Relocation is necessary if the address at which
1421 we are presently stopped differs from the start address stored in
1422 the executable AND there's no interpreter section. The condition
1423 regarding the interpreter section is very important because if
1424 there *is* an interpreter section, execution will begin there
1425 instead. When there is an interpreter section, the start address
1426 is (presumably) used by the interpreter at some point to start
1427 execution of the program.
1428
1429 If there is an interpreter, it is normal for it to be set to an
1430 arbitrary address at the outset. The job of finding it is
1431 handled in enable_break().
1432
1433 So, to summarize, relocations are necessary when there is no
1434 interpreter section and the start address obtained from the
1435 executable is different from the address at which GDB is
1436 currently stopped.
1437
1438 [ The astute reader will note that we also test to make sure that
1439 the executable in question has the DYNAMIC flag set. It is my
1440 opinion that this test is unnecessary (undesirable even). It
1441 was added to avoid inadvertent relocation of an executable
1442 whose e_type member in the ELF header is not ET_DYN. There may
1443 be a time in the future when it is desirable to do relocations
1444 on other types of files as well in which case this condition
1445 should either be removed or modified to accomodate the new file
1446 type. (E.g, an ET_EXEC executable which has been built to be
1447 position-independent could safely be relocated by the OS if
1448 desired. It is true that this violates the ABI, but the ABI
1449 has been known to be bent from time to time.) - Kevin, Nov 2000. ]
1450 */
1451
1452 interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
1453 if (interp_sect == NULL
1454 && (bfd_get_file_flags (exec_bfd) & DYNAMIC) != 0
2f4950cd 1455 && (exec_entry_point (exec_bfd, &exec_ops) != pc))
e2a44558
KB
1456 {
1457 struct cleanup *old_chain;
1458 struct section_offsets *new_offsets;
1459 int i, changed;
1460 CORE_ADDR displacement;
1461
1462 /* It is necessary to relocate the objfile. The amount to
1463 relocate by is simply the address at which we are stopped
1464 minus the starting address from the executable.
1465
1466 We relocate all of the sections by the same amount. This
1467 behavior is mandated by recent editions of the System V ABI.
1468 According to the System V Application Binary Interface,
1469 Edition 4.1, page 5-5:
1470
1471 ... Though the system chooses virtual addresses for
1472 individual processes, it maintains the segments' relative
1473 positions. Because position-independent code uses relative
1474 addressesing between segments, the difference between
1475 virtual addresses in memory must match the difference
1476 between virtual addresses in the file. The difference
1477 between the virtual address of any segment in memory and
1478 the corresponding virtual address in the file is thus a
1479 single constant value for any one executable or shared
1480 object in a given process. This difference is the base
1481 address. One use of the base address is to relocate the
1482 memory image of the program during dynamic linking.
1483
1484 The same language also appears in Edition 4.0 of the System V
1485 ABI and is left unspecified in some of the earlier editions. */
1486
2f4950cd 1487 displacement = pc - exec_entry_point (exec_bfd, &exec_ops);
e2a44558
KB
1488 changed = 0;
1489
13fc0c2f
KB
1490 new_offsets = xcalloc (symfile_objfile->num_sections,
1491 sizeof (struct section_offsets));
b8c9b27d 1492 old_chain = make_cleanup (xfree, new_offsets);
e2a44558
KB
1493
1494 for (i = 0; i < symfile_objfile->num_sections; i++)
1495 {
1496 if (displacement != ANOFFSET (symfile_objfile->section_offsets, i))
1497 changed = 1;
1498 new_offsets->offsets[i] = displacement;
1499 }
1500
1501 if (changed)
1502 objfile_relocate (symfile_objfile, new_offsets);
1503
1504 do_cleanups (old_chain);
1505 }
1506}
1507
13437d4b
KB
1508/*
1509
1510 GLOBAL FUNCTION
1511
1512 svr4_solib_create_inferior_hook -- shared library startup support
1513
1514 SYNOPSIS
1515
7095b863 1516 void svr4_solib_create_inferior_hook ()
13437d4b
KB
1517
1518 DESCRIPTION
1519
1520 When gdb starts up the inferior, it nurses it along (through the
1521 shell) until it is ready to execute it's first instruction. At this
1522 point, this function gets called via expansion of the macro
1523 SOLIB_CREATE_INFERIOR_HOOK.
1524
1525 For SunOS executables, this first instruction is typically the
1526 one at "_start", or a similar text label, regardless of whether
1527 the executable is statically or dynamically linked. The runtime
1528 startup code takes care of dynamically linking in any shared
1529 libraries, once gdb allows the inferior to continue.
1530
1531 For SVR4 executables, this first instruction is either the first
1532 instruction in the dynamic linker (for dynamically linked
1533 executables) or the instruction at "start" for statically linked
1534 executables. For dynamically linked executables, the system
1535 first exec's /lib/libc.so.N, which contains the dynamic linker,
1536 and starts it running. The dynamic linker maps in any needed
1537 shared libraries, maps in the actual user executable, and then
1538 jumps to "start" in the user executable.
1539
1540 For both SunOS shared libraries, and SVR4 shared libraries, we
1541 can arrange to cooperate with the dynamic linker to discover the
1542 names of shared libraries that are dynamically linked, and the
1543 base addresses to which they are linked.
1544
1545 This function is responsible for discovering those names and
1546 addresses, and saving sufficient information about them to allow
1547 their symbols to be read at a later time.
1548
1549 FIXME
1550
1551 Between enable_break() and disable_break(), this code does not
1552 properly handle hitting breakpoints which the user might have
1553 set in the startup code or in the dynamic linker itself. Proper
1554 handling will probably have to wait until the implementation is
1555 changed to use the "breakpoint handler function" method.
1556
1557 Also, what if child has exit()ed? Must exit loop somehow.
1558 */
1559
e2a44558 1560static void
13437d4b
KB
1561svr4_solib_create_inferior_hook (void)
1562{
e2a44558
KB
1563 /* Relocate the main executable if necessary. */
1564 svr4_relocate_main_executable ();
1565
d5a921c9 1566 if (!svr4_have_link_map_offsets ())
513f5903 1567 return;
d5a921c9 1568
13437d4b 1569 if (!enable_break ())
542c95c2 1570 return;
13437d4b 1571
ab31aa69
KB
1572#if defined(_SCO_DS)
1573 /* SCO needs the loop below, other systems should be using the
13437d4b
KB
1574 special shared library breakpoints and the shared library breakpoint
1575 service routine.
1576
1577 Now run the target. It will eventually hit the breakpoint, at
1578 which point all of the libraries will have been mapped in and we
1579 can go groveling around in the dynamic linker structures to find
1580 out what we need to know about them. */
1581
1582 clear_proceed_status ();
c0236d92 1583 stop_soon = STOP_QUIETLY;
13437d4b
KB
1584 stop_signal = TARGET_SIGNAL_0;
1585 do
1586 {
39f77062 1587 target_resume (pid_to_ptid (-1), 0, stop_signal);
ae123ec6 1588 wait_for_inferior (0);
13437d4b
KB
1589 }
1590 while (stop_signal != TARGET_SIGNAL_TRAP);
c0236d92 1591 stop_soon = NO_STOP_QUIETLY;
ab31aa69 1592#endif /* defined(_SCO_DS) */
13437d4b
KB
1593}
1594
1595static void
1596svr4_clear_solib (void)
1597{
1598 debug_base = 0;
34439770
DJ
1599 debug_loader_offset_p = 0;
1600 debug_loader_offset = 0;
1601 xfree (debug_loader_name);
1602 debug_loader_name = NULL;
93a57060 1603 main_lm_addr = 0;
13437d4b
KB
1604}
1605
1606static void
1607svr4_free_so (struct so_list *so)
1608{
b8c9b27d
KB
1609 xfree (so->lm_info->lm);
1610 xfree (so->lm_info);
13437d4b
KB
1611}
1612
6bb7be43
JB
1613
1614/* Clear any bits of ADDR that wouldn't fit in a target-format
1615 data pointer. "Data pointer" here refers to whatever sort of
1616 address the dynamic linker uses to manage its sections. At the
1617 moment, we don't support shared libraries on any processors where
1618 code and data pointers are different sizes.
1619
1620 This isn't really the right solution. What we really need here is
1621 a way to do arithmetic on CORE_ADDR values that respects the
1622 natural pointer/address correspondence. (For example, on the MIPS,
1623 converting a 32-bit pointer to a 64-bit CORE_ADDR requires you to
1624 sign-extend the value. There, simply truncating the bits above
819844ad 1625 gdbarch_ptr_bit, as we do below, is no good.) This should probably
6bb7be43
JB
1626 be a new gdbarch method or something. */
1627static CORE_ADDR
1628svr4_truncate_ptr (CORE_ADDR addr)
1629{
1cf3db46 1630 if (gdbarch_ptr_bit (target_gdbarch) == sizeof (CORE_ADDR) * 8)
6bb7be43
JB
1631 /* We don't need to truncate anything, and the bit twiddling below
1632 will fail due to overflow problems. */
1633 return addr;
1634 else
1cf3db46 1635 return addr & (((CORE_ADDR) 1 << gdbarch_ptr_bit (target_gdbarch)) - 1);
6bb7be43
JB
1636}
1637
1638
749499cb
KB
1639static void
1640svr4_relocate_section_addresses (struct so_list *so,
1641 struct section_table *sec)
1642{
cc10cae3
AO
1643 sec->addr = svr4_truncate_ptr (sec->addr + LM_ADDR_CHECK (so,
1644 sec->bfd));
1645 sec->endaddr = svr4_truncate_ptr (sec->endaddr + LM_ADDR_CHECK (so,
1646 sec->bfd));
749499cb 1647}
4b188b9f 1648\f
749499cb 1649
4b188b9f 1650/* Architecture-specific operations. */
6bb7be43 1651
4b188b9f
MK
1652/* Per-architecture data key. */
1653static struct gdbarch_data *solib_svr4_data;
e5e2b9ff 1654
4b188b9f 1655struct solib_svr4_ops
e5e2b9ff 1656{
4b188b9f
MK
1657 /* Return a description of the layout of `struct link_map'. */
1658 struct link_map_offsets *(*fetch_link_map_offsets)(void);
1659};
e5e2b9ff 1660
4b188b9f 1661/* Return a default for the architecture-specific operations. */
e5e2b9ff 1662
4b188b9f
MK
1663static void *
1664solib_svr4_init (struct obstack *obstack)
e5e2b9ff 1665{
4b188b9f 1666 struct solib_svr4_ops *ops;
e5e2b9ff 1667
4b188b9f 1668 ops = OBSTACK_ZALLOC (obstack, struct solib_svr4_ops);
8d005789 1669 ops->fetch_link_map_offsets = NULL;
4b188b9f 1670 return ops;
e5e2b9ff
KB
1671}
1672
4b188b9f 1673/* Set the architecture-specific `struct link_map_offsets' fetcher for
7e3cb44c 1674 GDBARCH to FLMO. Also, install SVR4 solib_ops into GDBARCH. */
1c4dcb57 1675
21479ded 1676void
e5e2b9ff
KB
1677set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch,
1678 struct link_map_offsets *(*flmo) (void))
21479ded 1679{
4b188b9f
MK
1680 struct solib_svr4_ops *ops = gdbarch_data (gdbarch, solib_svr4_data);
1681
1682 ops->fetch_link_map_offsets = flmo;
7e3cb44c
UW
1683
1684 set_solib_ops (gdbarch, &svr4_so_ops);
21479ded
KB
1685}
1686
4b188b9f
MK
1687/* Fetch a link_map_offsets structure using the architecture-specific
1688 `struct link_map_offsets' fetcher. */
1c4dcb57 1689
4b188b9f
MK
1690static struct link_map_offsets *
1691svr4_fetch_link_map_offsets (void)
21479ded 1692{
1cf3db46 1693 struct solib_svr4_ops *ops = gdbarch_data (target_gdbarch, solib_svr4_data);
4b188b9f
MK
1694
1695 gdb_assert (ops->fetch_link_map_offsets);
1696 return ops->fetch_link_map_offsets ();
21479ded
KB
1697}
1698
4b188b9f
MK
1699/* Return 1 if a link map offset fetcher has been defined, 0 otherwise. */
1700
1701static int
1702svr4_have_link_map_offsets (void)
1703{
1cf3db46 1704 struct solib_svr4_ops *ops = gdbarch_data (target_gdbarch, solib_svr4_data);
4b188b9f
MK
1705 return (ops->fetch_link_map_offsets != NULL);
1706}
1707\f
1708
e4bbbda8
MK
1709/* Most OS'es that have SVR4-style ELF dynamic libraries define a
1710 `struct r_debug' and a `struct link_map' that are binary compatible
1711 with the origional SVR4 implementation. */
1712
1713/* Fetch (and possibly build) an appropriate `struct link_map_offsets'
1714 for an ILP32 SVR4 system. */
1715
1716struct link_map_offsets *
1717svr4_ilp32_fetch_link_map_offsets (void)
1718{
1719 static struct link_map_offsets lmo;
1720 static struct link_map_offsets *lmp = NULL;
1721
1722 if (lmp == NULL)
1723 {
1724 lmp = &lmo;
1725
e4cd0d6a
MK
1726 lmo.r_version_offset = 0;
1727 lmo.r_version_size = 4;
e4bbbda8 1728 lmo.r_map_offset = 4;
7cd25cfc 1729 lmo.r_brk_offset = 8;
e4cd0d6a 1730 lmo.r_ldsomap_offset = 20;
e4bbbda8
MK
1731
1732 /* Everything we need is in the first 20 bytes. */
1733 lmo.link_map_size = 20;
1734 lmo.l_addr_offset = 0;
e4bbbda8 1735 lmo.l_name_offset = 4;
cc10cae3 1736 lmo.l_ld_offset = 8;
e4bbbda8 1737 lmo.l_next_offset = 12;
e4bbbda8 1738 lmo.l_prev_offset = 16;
e4bbbda8
MK
1739 }
1740
1741 return lmp;
1742}
1743
1744/* Fetch (and possibly build) an appropriate `struct link_map_offsets'
1745 for an LP64 SVR4 system. */
1746
1747struct link_map_offsets *
1748svr4_lp64_fetch_link_map_offsets (void)
1749{
1750 static struct link_map_offsets lmo;
1751 static struct link_map_offsets *lmp = NULL;
1752
1753 if (lmp == NULL)
1754 {
1755 lmp = &lmo;
1756
e4cd0d6a
MK
1757 lmo.r_version_offset = 0;
1758 lmo.r_version_size = 4;
e4bbbda8 1759 lmo.r_map_offset = 8;
7cd25cfc 1760 lmo.r_brk_offset = 16;
e4cd0d6a 1761 lmo.r_ldsomap_offset = 40;
e4bbbda8
MK
1762
1763 /* Everything we need is in the first 40 bytes. */
1764 lmo.link_map_size = 40;
1765 lmo.l_addr_offset = 0;
e4bbbda8 1766 lmo.l_name_offset = 8;
cc10cae3 1767 lmo.l_ld_offset = 16;
e4bbbda8 1768 lmo.l_next_offset = 24;
e4bbbda8 1769 lmo.l_prev_offset = 32;
e4bbbda8
MK
1770 }
1771
1772 return lmp;
1773}
1774\f
1775
7d522c90 1776struct target_so_ops svr4_so_ops;
13437d4b 1777
3a40aaa0
UW
1778/* Lookup global symbol for ELF DSOs linked with -Bsymbolic. Those DSOs have a
1779 different rule for symbol lookup. The lookup begins here in the DSO, not in
1780 the main executable. */
1781
1782static struct symbol *
1783elf_lookup_lib_symbol (const struct objfile *objfile,
1784 const char *name,
1785 const char *linkage_name,
21b556f4 1786 const domain_enum domain)
3a40aaa0
UW
1787{
1788 if (objfile->obfd == NULL
1789 || scan_dyntag (DT_SYMBOLIC, objfile->obfd, NULL) != 1)
1790 return NULL;
1791
65728c26 1792 return lookup_global_symbol_from_objfile
21b556f4 1793 (objfile, name, linkage_name, domain);
3a40aaa0
UW
1794}
1795
a78f21af
AC
1796extern initialize_file_ftype _initialize_svr4_solib; /* -Wmissing-prototypes */
1797
13437d4b
KB
1798void
1799_initialize_svr4_solib (void)
1800{
4b188b9f
MK
1801 solib_svr4_data = gdbarch_data_register_pre_init (solib_svr4_init);
1802
749499cb 1803 svr4_so_ops.relocate_section_addresses = svr4_relocate_section_addresses;
13437d4b
KB
1804 svr4_so_ops.free_so = svr4_free_so;
1805 svr4_so_ops.clear_solib = svr4_clear_solib;
1806 svr4_so_ops.solib_create_inferior_hook = svr4_solib_create_inferior_hook;
1807 svr4_so_ops.special_symbol_handling = svr4_special_symbol_handling;
1808 svr4_so_ops.current_sos = svr4_current_sos;
1809 svr4_so_ops.open_symbol_file_object = open_symbol_file_object;
d7fa2ae2 1810 svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
3a40aaa0 1811 svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol;
a7c02bc8 1812 svr4_so_ops.same = svr4_same;
13437d4b 1813}
This page took 0.796197 seconds and 4 git commands to generate.