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