* utils.c (xmalloc,xcalloc,xstrdup): New fns.
[deliverable/binutils-gdb.git] / gdb / solib-svr4.c
1 /* Handle SVR4 shared libraries for GDB, the GNU Debugger.
2
3 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
4 2001, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
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
10 the Free Software Foundation; either version 3 of the License, or
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
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 #include "defs.h"
22
23 #include "elf/external.h"
24 #include "elf/common.h"
25 #include "elf/mips.h"
26
27 #include "symtab.h"
28 #include "bfd.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "gdbcore.h"
32 #include "target.h"
33 #include "inferior.h"
34 #include "gdbthread.h"
35
36 #include "gdb_assert.h"
37
38 #include "solist.h"
39 #include "solib.h"
40 #include "solib-svr4.h"
41
42 #include "bfd-target.h"
43 #include "elf-bfd.h"
44 #include "exec.h"
45 #include "auxv.h"
46 #include "exceptions.h"
47
48 static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
49 static int svr4_have_link_map_offsets (void);
50
51 /* Link map info to include in an allocated so_list entry */
52
53 struct 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. */
58 gdb_byte *lm;
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;
66
67 /* The target location of lm. */
68 CORE_ADDR lm_addr;
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
79 static char *solib_break_names[] =
80 {
81 "r_debug_state",
82 "_r_debug_state",
83 "_dl_debug_state",
84 "rtld_db_dlactivity",
85 "_rtld_debug_state",
86
87 NULL
88 };
89
90 static char *bkpt_names[] =
91 {
92 "_start",
93 "__start",
94 "main",
95 NULL
96 };
97
98 static char *main_name_list[] =
99 {
100 "main_$main",
101 NULL
102 };
103
104 /* Return non-zero if GDB_SO_NAME and INFERIOR_SO_NAME represent
105 the same shared library. */
106
107 static int
108 svr4_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
132 static int
133 svr4_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
138 /* link map access functions */
139
140 static CORE_ADDR
141 LM_ADDR_FROM_LINK_MAP (struct so_list *so)
142 {
143 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
144 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
145
146 return extract_typed_address (so->lm_info->lm + lmo->l_addr_offset,
147 ptr_type);
148 }
149
150 static int
151 HAS_LM_DYNAMIC_FROM_LINK_MAP ()
152 {
153 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
154
155 return lmo->l_ld_offset >= 0;
156 }
157
158 static CORE_ADDR
159 LM_DYNAMIC_FROM_LINK_MAP (struct so_list *so)
160 {
161 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
162 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
163
164 return extract_typed_address (so->lm_info->lm + lmo->l_ld_offset,
165 ptr_type);
166 }
167
168 static CORE_ADDR
169 LM_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 {
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. */
216 if ((l_addr & align) == ((l_dynaddr - dynaddr) & align))
217 {
218 l_addr = l_dynaddr - dynaddr;
219
220 warning (_(".dynamic section for \"%s\" "
221 "is not at the expected address"), so->so_name);
222 warning (_("difference appears to be caused by prelink, "
223 "adjusting expectations"));
224 }
225 else
226 warning (_(".dynamic section for \"%s\" "
227 "is not at the expected address "
228 "(wrong library or version mismatch?)"), so->so_name);
229 }
230
231 set_addr:
232 so->lm_info->l_addr = l_addr;
233 }
234
235 return so->lm_info->l_addr;
236 }
237
238 static CORE_ADDR
239 LM_NEXT (struct so_list *so)
240 {
241 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
242 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
243
244 return extract_typed_address (so->lm_info->lm + lmo->l_next_offset,
245 ptr_type);
246 }
247
248 static CORE_ADDR
249 LM_NAME (struct so_list *so)
250 {
251 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
252 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
253
254 return extract_typed_address (so->lm_info->lm + lmo->l_name_offset,
255 ptr_type);
256 }
257
258 static int
259 IGNORE_FIRST_LINK_MAP_ENTRY (struct so_list *so)
260 {
261 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
262 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
263
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
269 return extract_typed_address (so->lm_info->lm + lmo->l_prev_offset,
270 ptr_type) == 0;
271 }
272
273 static CORE_ADDR debug_base; /* Base of dynamic linker structures */
274
275 /* Validity flag for debug_loader_offset. */
276 static int debug_loader_offset_p;
277
278 /* Load address for the dynamic linker, inferred. */
279 static CORE_ADDR debug_loader_offset;
280
281 /* Name of the dynamic linker, valid if debug_loader_offset_p. */
282 static char *debug_loader_name;
283
284 /* Load map address for the main executable. */
285 static CORE_ADDR main_lm_addr;
286
287 /* Local function prototypes */
288
289 static int match_main (char *);
290
291 static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
292
293 /*
294
295 LOCAL FUNCTION
296
297 bfd_lookup_symbol -- lookup the value for a specific symbol
298
299 SYNOPSIS
300
301 CORE_ADDR bfd_lookup_symbol (bfd *abfd, char *symname)
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
308 notification routine in the shared library.
309
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.
313
314 Note that 0 is specifically allowed as an error return (no
315 such symbol).
316 */
317
318 static CORE_ADDR
319 bfd_lookup_symbol (bfd *abfd, char *symname)
320 {
321 long storage_needed;
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);
334 back_to = make_cleanup (xfree, symbol_table);
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++;
340 if (strcmp (sym->name, symname) == 0
341 && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0)
342 {
343 /* BFD symbols are section relative. */
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);
362 back_to = make_cleanup (xfree, symbol_table);
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++;
368
369 if (strcmp (sym->name, symname) == 0
370 && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0)
371 {
372 /* BFD symbols are section relative. */
373 symaddr = sym->value + sym->section->vma;
374 break;
375 }
376 }
377 do_cleanups (back_to);
378 }
379
380 return symaddr;
381 }
382
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
392 static gdb_byte *
393 read_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. */
484 static gdb_byte *
485 find_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
514 /* Scan for DYNTAG in .dynamic section of ABFD. If DYNTAG is found 1 is
515 returned and the corresponding PTR is set. */
516
517 static int
518 scan_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;
523 gdb_byte *bufend, *bufstart, *buf;
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
540 /* Read in .dynamic from the BFD. We will get the actual value
541 from memory later. */
542 sect_size = bfd_section_size (abfd, sect);
543 buf = bufstart = alloca (sect_size);
544 if (!bfd_get_section_contents (abfd, sect,
545 buf, 0, sect_size))
546 return 0;
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 }
561 else
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 {
571 /* If requested, try to read the runtime value of this .dynamic
572 entry. */
573 if (ptr)
574 {
575 struct type *ptr_type;
576 gdb_byte ptr_buf[8];
577 CORE_ADDR ptr_addr;
578
579 ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
580 ptr_addr = dyn_addr + (buf - bufstart) + arch_size / 8;
581 if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0)
582 dyn_ptr = extract_typed_address (ptr_buf, ptr_type);
583 *ptr = dyn_ptr;
584 }
585 return 1;
586 }
587 }
588
589 return 0;
590 }
591
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
596 static int
597 scan_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
645
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
670 static CORE_ADDR
671 elf_locate_base (void)
672 {
673 struct minimal_symbol *msymbol;
674 CORE_ADDR dyn_ptr;
675
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. */
679 if (scan_dyntag (DT_MIPS_RLD_MAP, exec_bfd, &dyn_ptr)
680 || scan_dyntag_auxv (DT_MIPS_RLD_MAP, &dyn_ptr))
681 {
682 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
683 gdb_byte *pbuf;
684 int pbuf_size = TYPE_LENGTH (ptr_type);
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))
689 return 0;
690 return extract_typed_address (pbuf, ptr_type);
691 }
692
693 /* Find DT_DEBUG. */
694 if (scan_dyntag (DT_DEBUG, exec_bfd, &dyn_ptr)
695 || scan_dyntag_auxv (DT_DEBUG, &dyn_ptr))
696 return dyn_ptr;
697
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);
703
704 /* DT_DEBUG entry not found. */
705 return 0;
706 }
707
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
745 static CORE_ADDR
746 locate_base (void)
747 {
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
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. */
753
754 if (debug_base == 0 && svr4_have_link_map_offsets ())
755 {
756 if (exec_bfd != NULL
757 && bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour)
758 debug_base = elf_locate_base ();
759 }
760 return (debug_base);
761 }
762
763 /* Find the first element in the inferior's dynamic link map, and
764 return its address in the inferior.
765
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. */
769
770 static CORE_ADDR
771 solib_svr4_r_map (void)
772 {
773 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
774 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
775
776 return read_memory_typed_address (debug_base + lmo->r_map_offset, ptr_type);
777 }
778
779 /* Find r_brk from the inferior's debug base. */
780
781 static CORE_ADDR
782 solib_svr4_r_brk (void)
783 {
784 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
785 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
786
787 return read_memory_typed_address (debug_base + lmo->r_brk_offset, ptr_type);
788 }
789
790 /* Find the link map for the dynamic linker (if it is not in the
791 normal list of loaded shared objects). */
792
793 static CORE_ADDR
794 solib_svr4_r_ldsomap (void)
795 {
796 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
797 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
798 ULONGEST version;
799
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;
806
807 return read_memory_typed_address (debug_base + lmo->r_ldsomap_offset,
808 ptr_type);
809 }
810
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
833 static int
834 open_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;
840 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
841 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
842 int l_name_size = TYPE_LENGTH (ptr_type);
843 gdb_byte *l_name_buf = xmalloc (l_name_size);
844 struct cleanup *cleanups = make_cleanup (xfree, l_name_buf);
845
846 if (symfile_objfile)
847 if (!query ("Attempt to reload symbols from process? "))
848 return 0;
849
850 /* Always locate the debug struct, in case it has moved. */
851 debug_base = 0;
852 if (locate_base () == 0)
853 return 0; /* failed somehow... */
854
855 /* First link map member should be the executable. */
856 lm = solib_svr4_r_map ();
857 if (lm == 0)
858 return 0; /* failed somehow... */
859
860 /* Read address of name from target memory to GDB. */
861 read_memory (lm + lmo->l_name_offset, l_name_buf, l_name_size);
862
863 /* Convert the address to host format. */
864 l_name = extract_typed_address (l_name_buf, ptr_type);
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);
874 make_cleanup (xfree, filename);
875
876 if (errcode)
877 {
878 warning (_("failed to read exec filename from attached file: %s"),
879 safe_strerror (errcode));
880 return 0;
881 }
882
883 /* Have a pathname: read the symbol file. */
884 symbol_file_add_main (filename, from_tty);
885
886 return 1;
887 }
888
889 /* If no shared library information is available from the dynamic
890 linker, build a fallback list from other sources. */
891
892 static struct so_list *
893 svr4_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;
907 new->lm_info->lm_addr = 0;
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
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
940 static struct so_list *
941 svr4_current_sos (void)
942 {
943 CORE_ADDR lm;
944 struct so_list *head = 0;
945 struct so_list **link_ptr = &head;
946 CORE_ADDR ldsomap = 0;
947
948 /* Always locate the debug struct, in case it has moved. */
949 debug_base = 0;
950 locate_base ();
951
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 ();
956
957 /* Walk the inferior's link map list, and build our list of
958 `struct so_list' nodes. */
959 lm = solib_svr4_r_map ();
960
961 while (lm)
962 {
963 struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
964 struct so_list *new = XZALLOC (struct so_list);
965 struct cleanup *old_chain = make_cleanup (xfree, new);
966
967 new->lm_info = xmalloc (sizeof (struct lm_info));
968 make_cleanup (xfree, new->lm_info);
969
970 new->lm_info->l_addr = (CORE_ADDR)-1;
971 new->lm_info->lm_addr = lm;
972 new->lm_info->lm = xzalloc (lmo->link_map_size);
973 make_cleanup (xfree, new->lm_info->lm);
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. */
984 if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
985 {
986 main_lm_addr = new->lm_info->lm_addr;
987 free_so (new);
988 }
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)
998 warning (_("Can't read pathname for load map: %s."),
999 safe_strerror (errcode));
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';
1004 strcpy (new->so_original_name, new->so_name);
1005 }
1006 xfree (buffer);
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
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
1028 discard_cleanups (old_chain);
1029 }
1030
1031 if (head == NULL)
1032 return svr4_default_sos ();
1033
1034 return head;
1035 }
1036
1037 /* Get the address of the link_map for a given OBJFILE. */
1038
1039 CORE_ADDR
1040 svr4_fetch_objfile_link_map (struct objfile *objfile)
1041 {
1042 struct so_list *so;
1043
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);
1047
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! */
1059 return 0;
1060 }
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
1066 static int
1067 match_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
1080 /* Return 1 if PC lies in the dynamic symbol resolution code of the
1081 SVR4 run time loader. */
1082 static CORE_ADDR interp_text_sect_low;
1083 static CORE_ADDR interp_text_sect_high;
1084 static CORE_ADDR interp_plt_sect_low;
1085 static CORE_ADDR interp_plt_sect_high;
1086
1087 int
1088 svr4_in_dynsym_resolve_code (CORE_ADDR pc)
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 }
1094
1095 /* Given an executable's ABFD and target, compute the entry-point
1096 address. */
1097
1098 static CORE_ADDR
1099 exec_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. */
1109 return gdbarch_convert_from_func_ptr_addr (target_gdbarch,
1110 bfd_get_start_address (abfd),
1111 targ);
1112 }
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
1157 static int
1158 enable_break (void)
1159 {
1160 struct minimal_symbol *msymbol;
1161 char **bkpt_namep;
1162 asection *interp_sect;
1163 gdb_byte *interp_name;
1164 CORE_ADDR sym_addr;
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
1170 interp_text_sect_low = interp_text_sect_high = 0;
1171 interp_plt_sect_low = interp_plt_sect_high = 0;
1172
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
1187 sym_addr = gdbarch_addr_bits_remove
1188 (target_gdbarch, gdbarch_convert_from_func_ptr_addr (target_gdbarch,
1189 sym_addr,
1190 &current_target));
1191
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
1226 /* Find the program interpreter; if not found, warn the user and drop
1227 into the old breakpoint at symbol code. */
1228 interp_name = find_program_interpreter ();
1229 if (interp_name)
1230 {
1231 CORE_ADDR load_addr = 0;
1232 int load_addr_found = 0;
1233 int loader_found_in_list = 0;
1234 struct so_list *so;
1235 bfd *tmp_bfd = NULL;
1236 struct target_ops *tmp_bfd_target;
1237 volatile struct gdb_exception ex;
1238
1239 sym_addr = 0;
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. */
1249
1250 TRY_CATCH (ex, RETURN_MASK_ALL)
1251 {
1252 tmp_bfd = solib_bfd_open (interp_name);
1253 }
1254 if (tmp_bfd == NULL)
1255 goto bkpt_at_symbol;
1256
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
1262 /* On a running target, we can get the dynamic linker's base
1263 address from the shared library table. */
1264 so = master_so_list ();
1265 while (so)
1266 {
1267 if (svr4_same_1 (interp_name, so->so_original_name))
1268 {
1269 load_addr_found = 1;
1270 loader_found_in_list = 1;
1271 load_addr = LM_ADDR_CHECK (so, tmp_bfd);
1272 break;
1273 }
1274 so = so->next;
1275 }
1276
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
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
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. */
1290 if (!load_addr_found)
1291 load_addr = (read_pc ()
1292 - exec_entry_point (tmp_bfd, tmp_bfd_target));
1293
1294 if (!loader_found_in_list)
1295 {
1296 debug_loader_name = xstrdup (interp_name);
1297 debug_loader_offset_p = 1;
1298 debug_loader_offset = load_addr;
1299 solib_add (NULL, 0, &current_target, auto_solib_add);
1300 }
1301
1302 /* Record the relocated start and end address of the dynamic linker
1303 text and plt section for svr4_in_dynsym_resolve_code. */
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 {
1324 sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep);
1325 if (sym_addr != 0)
1326 break;
1327 }
1328
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. */
1333 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch,
1334 sym_addr,
1335 tmp_bfd_target);
1336
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);
1340
1341 if (sym_addr != 0)
1342 {
1343 create_solib_event_breakpoint (load_addr + sym_addr);
1344 xfree (interp_name);
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:
1351 xfree (interp_name);
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."));
1355 }
1356
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 }
1369
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 }
1379 return 0;
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
1398 For SunOS4, this consisted of grunging around in the dynamic
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
1403 However, for SVR4, there's nothing to do.
1404
1405 */
1406
1407 static void
1408 svr4_special_symbol_handling (void)
1409 {
1410 }
1411
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
1422 static void
1423 svr4_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
1465 && (exec_entry_point (exec_bfd, &exec_ops) != pc))
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
1497 displacement = pc - exec_entry_point (exec_bfd, &exec_ops);
1498 changed = 0;
1499
1500 new_offsets = xcalloc (symfile_objfile->num_sections,
1501 sizeof (struct section_offsets));
1502 old_chain = make_cleanup (xfree, new_offsets);
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
1518 /*
1519
1520 GLOBAL FUNCTION
1521
1522 svr4_solib_create_inferior_hook -- shared library startup support
1523
1524 SYNOPSIS
1525
1526 void svr4_solib_create_inferior_hook ()
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
1570 static void
1571 svr4_solib_create_inferior_hook (void)
1572 {
1573 struct inferior *inf;
1574 struct thread_info *tp;
1575
1576 /* Relocate the main executable if necessary. */
1577 svr4_relocate_main_executable ();
1578
1579 if (!svr4_have_link_map_offsets ())
1580 return;
1581
1582 if (!enable_break ())
1583 return;
1584
1585 #if defined(_SCO_DS)
1586 /* SCO needs the loop below, other systems should be using the
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
1595 inf = current_inferior ();
1596 tp = inferior_thread ();
1597
1598 clear_proceed_status ();
1599 inf->stop_soon = STOP_QUIETLY;
1600 tp->stop_signal = TARGET_SIGNAL_0;
1601 do
1602 {
1603 target_resume (pid_to_ptid (-1), 0, tp->stop_signal);
1604 wait_for_inferior (0);
1605 }
1606 while (tp->stop_signal != TARGET_SIGNAL_TRAP);
1607 inf->stop_soon = NO_STOP_QUIETLY;
1608 #endif /* defined(_SCO_DS) */
1609 }
1610
1611 static void
1612 svr4_clear_solib (void)
1613 {
1614 debug_base = 0;
1615 debug_loader_offset_p = 0;
1616 debug_loader_offset = 0;
1617 xfree (debug_loader_name);
1618 debug_loader_name = NULL;
1619 main_lm_addr = 0;
1620 }
1621
1622 static void
1623 svr4_free_so (struct so_list *so)
1624 {
1625 xfree (so->lm_info->lm);
1626 xfree (so->lm_info);
1627 }
1628
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
1641 gdbarch_ptr_bit, as we do below, is no good.) This should probably
1642 be a new gdbarch method or something. */
1643 static CORE_ADDR
1644 svr4_truncate_ptr (CORE_ADDR addr)
1645 {
1646 if (gdbarch_ptr_bit (target_gdbarch) == sizeof (CORE_ADDR) * 8)
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
1651 return addr & (((CORE_ADDR) 1 << gdbarch_ptr_bit (target_gdbarch)) - 1);
1652 }
1653
1654
1655 static void
1656 svr4_relocate_section_addresses (struct so_list *so,
1657 struct section_table *sec)
1658 {
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));
1663 }
1664 \f
1665
1666 /* Architecture-specific operations. */
1667
1668 /* Per-architecture data key. */
1669 static struct gdbarch_data *solib_svr4_data;
1670
1671 struct solib_svr4_ops
1672 {
1673 /* Return a description of the layout of `struct link_map'. */
1674 struct link_map_offsets *(*fetch_link_map_offsets)(void);
1675 };
1676
1677 /* Return a default for the architecture-specific operations. */
1678
1679 static void *
1680 solib_svr4_init (struct obstack *obstack)
1681 {
1682 struct solib_svr4_ops *ops;
1683
1684 ops = OBSTACK_ZALLOC (obstack, struct solib_svr4_ops);
1685 ops->fetch_link_map_offsets = NULL;
1686 return ops;
1687 }
1688
1689 /* Set the architecture-specific `struct link_map_offsets' fetcher for
1690 GDBARCH to FLMO. Also, install SVR4 solib_ops into GDBARCH. */
1691
1692 void
1693 set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch,
1694 struct link_map_offsets *(*flmo) (void))
1695 {
1696 struct solib_svr4_ops *ops = gdbarch_data (gdbarch, solib_svr4_data);
1697
1698 ops->fetch_link_map_offsets = flmo;
1699
1700 set_solib_ops (gdbarch, &svr4_so_ops);
1701 }
1702
1703 /* Fetch a link_map_offsets structure using the architecture-specific
1704 `struct link_map_offsets' fetcher. */
1705
1706 static struct link_map_offsets *
1707 svr4_fetch_link_map_offsets (void)
1708 {
1709 struct solib_svr4_ops *ops = gdbarch_data (target_gdbarch, solib_svr4_data);
1710
1711 gdb_assert (ops->fetch_link_map_offsets);
1712 return ops->fetch_link_map_offsets ();
1713 }
1714
1715 /* Return 1 if a link map offset fetcher has been defined, 0 otherwise. */
1716
1717 static int
1718 svr4_have_link_map_offsets (void)
1719 {
1720 struct solib_svr4_ops *ops = gdbarch_data (target_gdbarch, solib_svr4_data);
1721 return (ops->fetch_link_map_offsets != NULL);
1722 }
1723 \f
1724
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
1732 struct link_map_offsets *
1733 svr4_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
1742 lmo.r_version_offset = 0;
1743 lmo.r_version_size = 4;
1744 lmo.r_map_offset = 4;
1745 lmo.r_brk_offset = 8;
1746 lmo.r_ldsomap_offset = 20;
1747
1748 /* Everything we need is in the first 20 bytes. */
1749 lmo.link_map_size = 20;
1750 lmo.l_addr_offset = 0;
1751 lmo.l_name_offset = 4;
1752 lmo.l_ld_offset = 8;
1753 lmo.l_next_offset = 12;
1754 lmo.l_prev_offset = 16;
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
1763 struct link_map_offsets *
1764 svr4_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
1773 lmo.r_version_offset = 0;
1774 lmo.r_version_size = 4;
1775 lmo.r_map_offset = 8;
1776 lmo.r_brk_offset = 16;
1777 lmo.r_ldsomap_offset = 40;
1778
1779 /* Everything we need is in the first 40 bytes. */
1780 lmo.link_map_size = 40;
1781 lmo.l_addr_offset = 0;
1782 lmo.l_name_offset = 8;
1783 lmo.l_ld_offset = 16;
1784 lmo.l_next_offset = 24;
1785 lmo.l_prev_offset = 32;
1786 }
1787
1788 return lmp;
1789 }
1790 \f
1791
1792 struct target_so_ops svr4_so_ops;
1793
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
1798 static struct symbol *
1799 elf_lookup_lib_symbol (const struct objfile *objfile,
1800 const char *name,
1801 const char *linkage_name,
1802 const domain_enum domain)
1803 {
1804 if (objfile->obfd == NULL
1805 || scan_dyntag (DT_SYMBOLIC, objfile->obfd, NULL) != 1)
1806 return NULL;
1807
1808 return lookup_global_symbol_from_objfile
1809 (objfile, name, linkage_name, domain);
1810 }
1811
1812 extern initialize_file_ftype _initialize_svr4_solib; /* -Wmissing-prototypes */
1813
1814 void
1815 _initialize_svr4_solib (void)
1816 {
1817 solib_svr4_data = gdbarch_data_register_pre_init (solib_svr4_init);
1818
1819 svr4_so_ops.relocate_section_addresses = svr4_relocate_section_addresses;
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;
1826 svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
1827 svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol;
1828 svr4_so_ops.same = svr4_same;
1829 }
This page took 0.144349 seconds and 4 git commands to generate.