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