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