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