Merge branch 'vendor/GDTOA'
[dragonfly.git] / contrib / gdb-7 / 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 (exec_bfd && 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   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
469   CORE_ADDR at_phdr, at_phent, at_phnum;
470   int arch_size, sect_size;
471   CORE_ADDR sect_addr;
472   gdb_byte *buf;
473
474   /* Get required auxv elements from target.  */
475   if (target_auxv_search (&current_target, AT_PHDR, &at_phdr) <= 0)
476     return 0;
477   if (target_auxv_search (&current_target, AT_PHENT, &at_phent) <= 0)
478     return 0;
479   if (target_auxv_search (&current_target, AT_PHNUM, &at_phnum) <= 0)
480     return 0;
481   if (!at_phdr || !at_phnum)
482     return 0;
483
484   /* Determine ELF architecture type.  */
485   if (at_phent == sizeof (Elf32_External_Phdr))
486     arch_size = 32;
487   else if (at_phent == sizeof (Elf64_External_Phdr))
488     arch_size = 64;
489   else
490     return 0;
491
492   /* Find .dynamic section via the PT_DYNAMIC PHDR.  */
493   if (arch_size == 32)
494     {
495       Elf32_External_Phdr phdr;
496       int i;
497
498       /* Search for requested PHDR.  */
499       for (i = 0; i < at_phnum; i++)
500         {
501           if (target_read_memory (at_phdr + i * sizeof (phdr),
502                                   (gdb_byte *)&phdr, sizeof (phdr)))
503             return 0;
504
505           if (extract_unsigned_integer ((gdb_byte *)phdr.p_type,
506                                         4, byte_order) == type)
507             break;
508         }
509
510       if (i == at_phnum)
511         return 0;
512
513       /* Retrieve address and size.  */
514       sect_addr = extract_unsigned_integer ((gdb_byte *)phdr.p_vaddr,
515                                             4, byte_order);
516       sect_size = extract_unsigned_integer ((gdb_byte *)phdr.p_memsz,
517                                             4, byte_order);
518     }
519   else
520     {
521       Elf64_External_Phdr phdr;
522       int i;
523
524       /* Search for requested PHDR.  */
525       for (i = 0; i < at_phnum; i++)
526         {
527           if (target_read_memory (at_phdr + i * sizeof (phdr),
528                                   (gdb_byte *)&phdr, sizeof (phdr)))
529             return 0;
530
531           if (extract_unsigned_integer ((gdb_byte *)phdr.p_type,
532                                         4, byte_order) == type)
533             break;
534         }
535
536       if (i == at_phnum)
537         return 0;
538
539       /* Retrieve address and size.  */
540       sect_addr = extract_unsigned_integer ((gdb_byte *)phdr.p_vaddr,
541                                             8, byte_order);
542       sect_size = extract_unsigned_integer ((gdb_byte *)phdr.p_memsz,
543                                             8, byte_order);
544     }
545
546   /* Read in requested program header.  */
547   buf = xmalloc (sect_size);
548   if (target_read_memory (sect_addr, buf, sect_size))
549     {
550       xfree (buf);
551       return NULL;
552     }
553
554   if (p_arch_size)
555     *p_arch_size = arch_size;
556   if (p_sect_size)
557     *p_sect_size = sect_size;
558
559   return buf;
560 }
561
562
563 /* Return program interpreter string.  */
564 static gdb_byte *
565 find_program_interpreter (void)
566 {
567   gdb_byte *buf = NULL;
568
569   /* If we have an exec_bfd, use its section table.  */
570   if (exec_bfd
571       && bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour)
572    {
573      struct bfd_section *interp_sect;
574
575      interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
576      if (interp_sect != NULL)
577       {
578         CORE_ADDR sect_addr = bfd_section_vma (exec_bfd, interp_sect);
579         int sect_size = bfd_section_size (exec_bfd, interp_sect);
580
581         buf = xmalloc (sect_size);
582         bfd_get_section_contents (exec_bfd, interp_sect, buf, 0, sect_size);
583       }
584    }
585
586   /* If we didn't find it, use the target auxillary vector.  */
587   if (!buf)
588     buf = read_program_header (PT_INTERP, NULL, NULL);
589
590   return buf;
591 }
592
593
594 /* Scan for DYNTAG in .dynamic section of ABFD. If DYNTAG is found 1 is
595    returned and the corresponding PTR is set.  */
596
597 static int
598 scan_dyntag (int dyntag, bfd *abfd, CORE_ADDR *ptr)
599 {
600   int arch_size, step, sect_size;
601   long dyn_tag;
602   CORE_ADDR dyn_ptr, dyn_addr;
603   gdb_byte *bufend, *bufstart, *buf;
604   Elf32_External_Dyn *x_dynp_32;
605   Elf64_External_Dyn *x_dynp_64;
606   struct bfd_section *sect;
607
608   if (abfd == NULL)
609     return 0;
610
611   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
612     return 0;
613
614   arch_size = bfd_get_arch_size (abfd);
615   if (arch_size == -1)
616     return 0;
617
618   /* Find the start address of the .dynamic section.  */
619   sect = bfd_get_section_by_name (abfd, ".dynamic");
620   if (sect == NULL)
621     return 0;
622   dyn_addr = bfd_section_vma (abfd, sect);
623
624   /* Read in .dynamic from the BFD.  We will get the actual value
625      from memory later.  */
626   sect_size = bfd_section_size (abfd, sect);
627   buf = bufstart = alloca (sect_size);
628   if (!bfd_get_section_contents (abfd, sect,
629                                  buf, 0, sect_size))
630     return 0;
631
632   /* Iterate over BUF and scan for DYNTAG.  If found, set PTR and return.  */
633   step = (arch_size == 32) ? sizeof (Elf32_External_Dyn)
634                            : sizeof (Elf64_External_Dyn);
635   for (bufend = buf + sect_size;
636        buf < bufend;
637        buf += step)
638   {
639     if (arch_size == 32)
640       {
641         x_dynp_32 = (Elf32_External_Dyn *) buf;
642         dyn_tag = bfd_h_get_32 (abfd, (bfd_byte *) x_dynp_32->d_tag);
643         dyn_ptr = bfd_h_get_32 (abfd, (bfd_byte *) x_dynp_32->d_un.d_ptr);
644       }
645     else
646       {
647         x_dynp_64 = (Elf64_External_Dyn *) buf;
648         dyn_tag = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_tag);
649         dyn_ptr = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_un.d_ptr);
650       }
651      if (dyn_tag == DT_NULL)
652        return 0;
653      if (dyn_tag == dyntag)
654        {
655          /* If requested, try to read the runtime value of this .dynamic
656             entry.  */
657          if (ptr)
658            {
659              struct type *ptr_type;
660              gdb_byte ptr_buf[8];
661              CORE_ADDR ptr_addr;
662
663              ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
664              ptr_addr = dyn_addr + (buf - bufstart) + arch_size / 8;
665              if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0)
666                dyn_ptr = extract_typed_address (ptr_buf, ptr_type);
667              *ptr = dyn_ptr;
668            }
669          return 1;
670        }
671   }
672
673   return 0;
674 }
675
676 /* Scan for DYNTAG in .dynamic section of the target's main executable,
677    found by consulting the OS auxillary vector.  If DYNTAG is found 1 is
678    returned and the corresponding PTR is set.  */
679
680 static int
681 scan_dyntag_auxv (int dyntag, CORE_ADDR *ptr)
682 {
683   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
684   int sect_size, arch_size, step;
685   long dyn_tag;
686   CORE_ADDR dyn_ptr;
687   gdb_byte *bufend, *bufstart, *buf;
688
689   /* Read in .dynamic section.  */
690   buf = bufstart = read_program_header (PT_DYNAMIC, &sect_size, &arch_size);
691   if (!buf)
692     return 0;
693
694   /* Iterate over BUF and scan for DYNTAG.  If found, set PTR and return.  */
695   step = (arch_size == 32) ? sizeof (Elf32_External_Dyn)
696                            : sizeof (Elf64_External_Dyn);
697   for (bufend = buf + sect_size;
698        buf < bufend;
699        buf += step)
700   {
701     if (arch_size == 32)
702       {
703         Elf32_External_Dyn *dynp = (Elf32_External_Dyn *) buf;
704         dyn_tag = extract_unsigned_integer ((gdb_byte *) dynp->d_tag,
705                                             4, byte_order);
706         dyn_ptr = extract_unsigned_integer ((gdb_byte *) dynp->d_un.d_ptr,
707                                             4, byte_order);
708       }
709     else
710       {
711         Elf64_External_Dyn *dynp = (Elf64_External_Dyn *) buf;
712         dyn_tag = extract_unsigned_integer ((gdb_byte *) dynp->d_tag,
713                                             8, byte_order);
714         dyn_ptr = extract_unsigned_integer ((gdb_byte *) dynp->d_un.d_ptr,
715                                             8, byte_order);
716       }
717     if (dyn_tag == DT_NULL)
718       break;
719
720     if (dyn_tag == dyntag)
721       {
722         if (ptr)
723           *ptr = dyn_ptr;
724
725         xfree (bufstart);
726         return 1;
727       }
728   }
729
730   xfree (bufstart);
731   return 0;
732 }
733
734
735 /*
736
737    LOCAL FUNCTION
738
739    elf_locate_base -- locate the base address of dynamic linker structs
740    for SVR4 elf targets.
741
742    SYNOPSIS
743
744    CORE_ADDR elf_locate_base (void)
745
746    DESCRIPTION
747
748    For SVR4 elf targets the address of the dynamic linker's runtime
749    structure is contained within the dynamic info section in the
750    executable file.  The dynamic section is also mapped into the
751    inferior address space.  Because the runtime loader fills in the
752    real address before starting the inferior, we have to read in the
753    dynamic info section from the inferior address space.
754    If there are any errors while trying to find the address, we
755    silently return 0, otherwise the found address is returned.
756
757  */
758
759 static CORE_ADDR
760 elf_locate_base (void)
761 {
762   struct minimal_symbol *msymbol;
763   CORE_ADDR dyn_ptr;
764
765   /* Look for DT_MIPS_RLD_MAP first.  MIPS executables use this
766      instead of DT_DEBUG, although they sometimes contain an unused
767      DT_DEBUG.  */
768   if (scan_dyntag (DT_MIPS_RLD_MAP, exec_bfd, &dyn_ptr)
769       || scan_dyntag_auxv (DT_MIPS_RLD_MAP, &dyn_ptr))
770     {
771       struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
772       gdb_byte *pbuf;
773       int pbuf_size = TYPE_LENGTH (ptr_type);
774       pbuf = alloca (pbuf_size);
775       /* DT_MIPS_RLD_MAP contains a pointer to the address
776          of the dynamic link structure.  */
777       if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
778         return 0;
779       return extract_typed_address (pbuf, ptr_type);
780     }
781
782   /* Find DT_DEBUG.  */
783   if (scan_dyntag (DT_DEBUG, exec_bfd, &dyn_ptr)
784       || scan_dyntag_auxv (DT_DEBUG, &dyn_ptr))
785     return dyn_ptr;
786
787   /* This may be a static executable.  Look for the symbol
788      conventionally named _r_debug, as a last resort.  */
789   msymbol = lookup_minimal_symbol ("_r_debug", NULL, symfile_objfile);
790   if (msymbol != NULL)
791     return SYMBOL_VALUE_ADDRESS (msymbol);
792
793   /* DT_DEBUG entry not found.  */
794   return 0;
795 }
796
797 /*
798
799    LOCAL FUNCTION
800
801    locate_base -- locate the base address of dynamic linker structs
802
803    SYNOPSIS
804
805    CORE_ADDR locate_base (struct svr4_info *)
806
807    DESCRIPTION
808
809    For both the SunOS and SVR4 shared library implementations, if the
810    inferior executable has been linked dynamically, there is a single
811    address somewhere in the inferior's data space which is the key to
812    locating all of the dynamic linker's runtime structures.  This
813    address is the value of the debug base symbol.  The job of this
814    function is to find and return that address, or to return 0 if there
815    is no such address (the executable is statically linked for example).
816
817    For SunOS, the job is almost trivial, since the dynamic linker and
818    all of it's structures are statically linked to the executable at
819    link time.  Thus the symbol for the address we are looking for has
820    already been added to the minimal symbol table for the executable's
821    objfile at the time the symbol file's symbols were read, and all we
822    have to do is look it up there.  Note that we explicitly do NOT want
823    to find the copies in the shared library.
824
825    The SVR4 version is a bit more complicated because the address
826    is contained somewhere in the dynamic info section.  We have to go
827    to a lot more work to discover the address of the debug base symbol.
828    Because of this complexity, we cache the value we find and return that
829    value on subsequent invocations.  Note there is no copy in the
830    executable symbol tables.
831
832  */
833
834 static CORE_ADDR
835 locate_base (struct svr4_info *info)
836 {
837   /* Check to see if we have a currently valid address, and if so, avoid
838      doing all this work again and just return the cached address.  If
839      we have no cached address, try to locate it in the dynamic info
840      section for ELF executables.  There's no point in doing any of this
841      though if we don't have some link map offsets to work with.  */
842
843   if (info->debug_base == 0 && svr4_have_link_map_offsets ())
844     info->debug_base = elf_locate_base ();
845   return info->debug_base;
846 }
847
848 /* Find the first element in the inferior's dynamic link map, and
849    return its address in the inferior.
850
851    FIXME: Perhaps we should validate the info somehow, perhaps by
852    checking r_version for a known version number, or r_state for
853    RT_CONSISTENT.  */
854
855 static CORE_ADDR
856 solib_svr4_r_map (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_map_offset,
862                                     ptr_type);
863 }
864
865 /* Find r_brk from the inferior's debug base.  */
866
867 static CORE_ADDR
868 solib_svr4_r_brk (struct svr4_info *info)
869 {
870   struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
871   struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
872
873   return read_memory_typed_address (info->debug_base + lmo->r_brk_offset,
874                                     ptr_type);
875 }
876
877 /* Find the link map for the dynamic linker (if it is not in the
878    normal list of loaded shared objects).  */
879
880 static CORE_ADDR
881 solib_svr4_r_ldsomap (struct svr4_info *info)
882 {
883   struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
884   struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
885   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
886   ULONGEST version;
887
888   /* Check version, and return zero if `struct r_debug' doesn't have
889      the r_ldsomap member.  */
890   version
891     = read_memory_unsigned_integer (info->debug_base + lmo->r_version_offset,
892                                     lmo->r_version_size, byte_order);
893   if (version < 2 || lmo->r_ldsomap_offset == -1)
894     return 0;
895
896   return read_memory_typed_address (info->debug_base + lmo->r_ldsomap_offset,
897                                     ptr_type);
898 }
899
900 /*
901
902   LOCAL FUNCTION
903
904   open_symbol_file_object
905
906   SYNOPSIS
907
908   void open_symbol_file_object (void *from_tty)
909
910   DESCRIPTION
911
912   If no open symbol file, attempt to locate and open the main symbol
913   file.  On SVR4 systems, this is the first link map entry.  If its
914   name is here, we can open it.  Useful when attaching to a process
915   without first loading its symbol file.
916
917   If FROM_TTYP dereferences to a non-zero integer, allow messages to
918   be printed.  This parameter is a pointer rather than an int because
919   open_symbol_file_object() is called via catch_errors() and
920   catch_errors() requires a pointer argument. */
921
922 static int
923 open_symbol_file_object (void *from_ttyp)
924 {
925   CORE_ADDR lm, l_name;
926   char *filename;
927   int errcode;
928   int from_tty = *(int *)from_ttyp;
929   struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
930   struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
931   int l_name_size = TYPE_LENGTH (ptr_type);
932   gdb_byte *l_name_buf = xmalloc (l_name_size);
933   struct cleanup *cleanups = make_cleanup (xfree, l_name_buf);
934   struct svr4_info *info = get_svr4_info (PIDGET (inferior_ptid));
935
936   if (symfile_objfile)
937     if (!query (_("Attempt to reload symbols from process? ")))
938       return 0;
939
940   /* Always locate the debug struct, in case it has moved.  */
941   info->debug_base = 0;
942   if (locate_base (info) == 0)
943     return 0;   /* failed somehow... */
944
945   /* First link map member should be the executable.  */
946   lm = solib_svr4_r_map (info);
947   if (lm == 0)
948     return 0;   /* failed somehow... */
949
950   /* Read address of name from target memory to GDB.  */
951   read_memory (lm + lmo->l_name_offset, l_name_buf, l_name_size);
952
953   /* Convert the address to host format.  */
954   l_name = extract_typed_address (l_name_buf, ptr_type);
955
956   /* Free l_name_buf.  */
957   do_cleanups (cleanups);
958
959   if (l_name == 0)
960     return 0;           /* No filename.  */
961
962   /* Now fetch the filename from target memory.  */
963   target_read_string (l_name, &filename, SO_NAME_MAX_PATH_SIZE - 1, &errcode);
964   make_cleanup (xfree, filename);
965
966   if (errcode)
967     {
968       warning (_("failed to read exec filename from attached file: %s"),
969                safe_strerror (errcode));
970       return 0;
971     }
972
973   /* Have a pathname: read the symbol file.  */
974   symbol_file_add_main (filename, from_tty);
975
976   return 1;
977 }
978
979 /* If no shared library information is available from the dynamic
980    linker, build a fallback list from other sources.  */
981
982 static struct so_list *
983 svr4_default_sos (void)
984 {
985   struct inferior *inf = current_inferior ();
986   struct svr4_info *info = get_svr4_info (inf->pid);
987
988   struct so_list *head = NULL;
989   struct so_list **link_ptr = &head;
990
991   if (info->debug_loader_offset_p)
992     {
993       struct so_list *new = XZALLOC (struct so_list);
994
995       new->lm_info = xmalloc (sizeof (struct lm_info));
996
997       /* Nothing will ever check the cached copy of the link
998          map if we set l_addr.  */
999       new->lm_info->l_addr = info->debug_loader_offset;
1000       new->lm_info->lm_addr = 0;
1001       new->lm_info->lm = NULL;
1002
1003       strncpy (new->so_name, info->debug_loader_name,
1004                SO_NAME_MAX_PATH_SIZE - 1);
1005       new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
1006       strcpy (new->so_original_name, new->so_name);
1007
1008       *link_ptr = new;
1009       link_ptr = &new->next;
1010     }
1011
1012   return head;
1013 }
1014
1015 /* LOCAL FUNCTION
1016
1017    current_sos -- build a list of currently loaded shared objects
1018
1019    SYNOPSIS
1020
1021    struct so_list *current_sos ()
1022
1023    DESCRIPTION
1024
1025    Build a list of `struct so_list' objects describing the shared
1026    objects currently loaded in the inferior.  This list does not
1027    include an entry for the main executable file.
1028
1029    Note that we only gather information directly available from the
1030    inferior --- we don't examine any of the shared library files
1031    themselves.  The declaration of `struct so_list' says which fields
1032    we provide values for.  */
1033
1034 static struct so_list *
1035 svr4_current_sos (void)
1036 {
1037   CORE_ADDR lm;
1038   struct so_list *head = 0;
1039   struct so_list **link_ptr = &head;
1040   CORE_ADDR ldsomap = 0;
1041   struct inferior *inf;
1042   struct svr4_info *info;
1043
1044   if (ptid_equal (inferior_ptid, null_ptid))
1045     return NULL;
1046
1047   inf = current_inferior ();
1048   info = get_svr4_info (inf->pid);
1049
1050   /* Always locate the debug struct, in case it has moved.  */
1051   info->debug_base = 0;
1052   locate_base (info);
1053
1054   /* If we can't find the dynamic linker's base structure, this
1055      must not be a dynamically linked executable.  Hmm.  */
1056   if (! info->debug_base)
1057     return svr4_default_sos ();
1058
1059   /* Walk the inferior's link map list, and build our list of
1060      `struct so_list' nodes.  */
1061   lm = solib_svr4_r_map (info);
1062
1063   while (lm)
1064     {
1065       struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
1066       struct so_list *new = XZALLOC (struct so_list);
1067       struct cleanup *old_chain = make_cleanup (xfree, new);
1068
1069       new->lm_info = xmalloc (sizeof (struct lm_info));
1070       make_cleanup (xfree, new->lm_info);
1071
1072       new->lm_info->l_addr = (CORE_ADDR)-1;
1073       new->lm_info->lm_addr = lm;
1074       new->lm_info->lm = xzalloc (lmo->link_map_size);
1075       make_cleanup (xfree, new->lm_info->lm);
1076
1077       read_memory (lm, new->lm_info->lm, lmo->link_map_size);
1078
1079       lm = LM_NEXT (new);
1080
1081       /* For SVR4 versions, the first entry in the link map is for the
1082          inferior executable, so we must ignore it.  For some versions of
1083          SVR4, it has no name.  For others (Solaris 2.3 for example), it
1084          does have a name, so we can no longer use a missing name to
1085          decide when to ignore it. */
1086       if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
1087         {
1088           info->main_lm_addr = new->lm_info->lm_addr;
1089           free_so (new);
1090         }
1091       else
1092         {
1093           int errcode;
1094           char *buffer;
1095
1096           /* Extract this shared object's name.  */
1097           target_read_string (LM_NAME (new), &buffer,
1098                               SO_NAME_MAX_PATH_SIZE - 1, &errcode);
1099           if (errcode != 0)
1100             warning (_("Can't read pathname for load map: %s."),
1101                      safe_strerror (errcode));
1102           else
1103             {
1104               strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
1105               new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
1106               strcpy (new->so_original_name, new->so_name);
1107             }
1108           xfree (buffer);
1109
1110           /* If this entry has no name, or its name matches the name
1111              for the main executable, don't include it in the list.  */
1112           if (! new->so_name[0]
1113               || match_main (new->so_name))
1114             free_so (new);
1115           else
1116             {
1117               new->next = 0;
1118               *link_ptr = new;
1119               link_ptr = &new->next;
1120             }
1121         }
1122
1123       /* On Solaris, the dynamic linker is not in the normal list of
1124          shared objects, so make sure we pick it up too.  Having
1125          symbol information for the dynamic linker is quite crucial
1126          for skipping dynamic linker resolver code.  */
1127       if (lm == 0 && ldsomap == 0)
1128         lm = ldsomap = solib_svr4_r_ldsomap (info);
1129
1130       discard_cleanups (old_chain);
1131     }
1132
1133   if (head == NULL)
1134     return svr4_default_sos ();
1135
1136   return head;
1137 }
1138
1139 /* Get the address of the link_map for a given OBJFILE.  */
1140
1141 CORE_ADDR
1142 svr4_fetch_objfile_link_map (struct objfile *objfile)
1143 {
1144   struct so_list *so;
1145   struct svr4_info *info = get_svr4_info (PIDGET (inferior_ptid));
1146
1147   /* Cause svr4_current_sos() to be run if it hasn't been already.  */
1148   if (info->main_lm_addr == 0)
1149     solib_add (NULL, 0, &current_target, auto_solib_add);
1150
1151   /* svr4_current_sos() will set main_lm_addr for the main executable.  */
1152   if (objfile == symfile_objfile)
1153     return info->main_lm_addr;
1154
1155   /* The other link map addresses may be found by examining the list
1156      of shared libraries.  */
1157   for (so = master_so_list (); so; so = so->next)
1158     if (so->objfile == objfile)
1159       return so->lm_info->lm_addr;
1160
1161   /* Not found!  */
1162   return 0;
1163 }
1164
1165 /* On some systems, the only way to recognize the link map entry for
1166    the main executable file is by looking at its name.  Return
1167    non-zero iff SONAME matches one of the known main executable names.  */
1168
1169 static int
1170 match_main (char *soname)
1171 {
1172   char **mainp;
1173
1174   for (mainp = main_name_list; *mainp != NULL; mainp++)
1175     {
1176       if (strcmp (soname, *mainp) == 0)
1177         return (1);
1178     }
1179
1180   return (0);
1181 }
1182
1183 /* Return 1 if PC lies in the dynamic symbol resolution code of the
1184    SVR4 run time loader.  */
1185 static CORE_ADDR interp_text_sect_low;
1186 static CORE_ADDR interp_text_sect_high;
1187 static CORE_ADDR interp_plt_sect_low;
1188 static CORE_ADDR interp_plt_sect_high;
1189
1190 int
1191 svr4_in_dynsym_resolve_code (CORE_ADDR pc)
1192 {
1193   return ((pc >= interp_text_sect_low && pc < interp_text_sect_high)
1194           || (pc >= interp_plt_sect_low && pc < interp_plt_sect_high)
1195           || in_plt_section (pc, NULL));
1196 }
1197
1198 /* Given an executable's ABFD and target, compute the entry-point
1199    address.  */
1200
1201 static CORE_ADDR
1202 exec_entry_point (struct bfd *abfd, struct target_ops *targ)
1203 {
1204   /* KevinB wrote ... for most targets, the address returned by
1205      bfd_get_start_address() is the entry point for the start
1206      function.  But, for some targets, bfd_get_start_address() returns
1207      the address of a function descriptor from which the entry point
1208      address may be extracted.  This address is extracted by
1209      gdbarch_convert_from_func_ptr_addr().  The method
1210      gdbarch_convert_from_func_ptr_addr() is the merely the identify
1211      function for targets which don't use function descriptors.  */
1212   return gdbarch_convert_from_func_ptr_addr (target_gdbarch,
1213                                              bfd_get_start_address (abfd),
1214                                              targ);
1215 }
1216
1217 /*
1218
1219    LOCAL FUNCTION
1220
1221    enable_break -- arrange for dynamic linker to hit breakpoint
1222
1223    SYNOPSIS
1224
1225    int enable_break (void)
1226
1227    DESCRIPTION
1228
1229    Both the SunOS and the SVR4 dynamic linkers have, as part of their
1230    debugger interface, support for arranging for the inferior to hit
1231    a breakpoint after mapping in the shared libraries.  This function
1232    enables that breakpoint.
1233
1234    For SunOS, there is a special flag location (in_debugger) which we
1235    set to 1.  When the dynamic linker sees this flag set, it will set
1236    a breakpoint at a location known only to itself, after saving the
1237    original contents of that place and the breakpoint address itself,
1238    in it's own internal structures.  When we resume the inferior, it
1239    will eventually take a SIGTRAP when it runs into the breakpoint.
1240    We handle this (in a different place) by restoring the contents of
1241    the breakpointed location (which is only known after it stops),
1242    chasing around to locate the shared libraries that have been
1243    loaded, then resuming.
1244
1245    For SVR4, the debugger interface structure contains a member (r_brk)
1246    which is statically initialized at the time the shared library is
1247    built, to the offset of a function (_r_debug_state) which is guaran-
1248    teed to be called once before mapping in a library, and again when
1249    the mapping is complete.  At the time we are examining this member,
1250    it contains only the unrelocated offset of the function, so we have
1251    to do our own relocation.  Later, when the dynamic linker actually
1252    runs, it relocates r_brk to be the actual address of _r_debug_state().
1253
1254    The debugger interface structure also contains an enumeration which
1255    is set to either RT_ADD or RT_DELETE prior to changing the mapping,
1256    depending upon whether or not the library is being mapped or unmapped,
1257    and then set to RT_CONSISTENT after the library is mapped/unmapped.
1258  */
1259
1260 static int
1261 enable_break (struct svr4_info *info)
1262 {
1263   struct minimal_symbol *msymbol;
1264   char **bkpt_namep;
1265   asection *interp_sect;
1266   gdb_byte *interp_name;
1267   CORE_ADDR sym_addr;
1268   struct inferior *inf = current_inferior ();
1269
1270   /* First, remove all the solib event breakpoints.  Their addresses
1271      may have changed since the last time we ran the program.  */
1272   remove_solib_event_breakpoints ();
1273
1274   interp_text_sect_low = interp_text_sect_high = 0;
1275   interp_plt_sect_low = interp_plt_sect_high = 0;
1276
1277   /* If we already have a shared library list in the target, and
1278      r_debug contains r_brk, set the breakpoint there - this should
1279      mean r_brk has already been relocated.  Assume the dynamic linker
1280      is the object containing r_brk.  */
1281
1282   solib_add (NULL, 0, &current_target, auto_solib_add);
1283   sym_addr = 0;
1284   if (info->debug_base && solib_svr4_r_map (info) != 0)
1285     sym_addr = solib_svr4_r_brk (info);
1286
1287   if (sym_addr != 0)
1288     {
1289       struct obj_section *os;
1290
1291       sym_addr = gdbarch_addr_bits_remove
1292         (target_gdbarch, gdbarch_convert_from_func_ptr_addr (target_gdbarch,
1293                                                               sym_addr,
1294                                                               &current_target));
1295
1296       os = find_pc_section (sym_addr);
1297       if (os != NULL)
1298         {
1299           /* Record the relocated start and end address of the dynamic linker
1300              text and plt section for svr4_in_dynsym_resolve_code.  */
1301           bfd *tmp_bfd;
1302           CORE_ADDR load_addr;
1303
1304           tmp_bfd = os->objfile->obfd;
1305           load_addr = ANOFFSET (os->objfile->section_offsets,
1306                                 os->objfile->sect_index_text);
1307
1308           interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
1309           if (interp_sect)
1310             {
1311               interp_text_sect_low =
1312                 bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1313               interp_text_sect_high =
1314                 interp_text_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1315             }
1316           interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt");
1317           if (interp_sect)
1318             {
1319               interp_plt_sect_low =
1320                 bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1321               interp_plt_sect_high =
1322                 interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1323             }
1324
1325           create_solib_event_breakpoint (target_gdbarch, sym_addr);
1326           return 1;
1327         }
1328     }
1329
1330   /* Find the program interpreter; if not found, warn the user and drop
1331      into the old breakpoint at symbol code.  */
1332   interp_name = find_program_interpreter ();
1333   if (interp_name)
1334     {
1335       CORE_ADDR load_addr = 0;
1336       int load_addr_found = 0;
1337       int loader_found_in_list = 0;
1338       struct so_list *so;
1339       bfd *tmp_bfd = NULL;
1340       struct target_ops *tmp_bfd_target;
1341       volatile struct gdb_exception ex;
1342
1343       sym_addr = 0;
1344
1345       /* Now we need to figure out where the dynamic linker was
1346          loaded so that we can load its symbols and place a breakpoint
1347          in the dynamic linker itself.
1348
1349          This address is stored on the stack.  However, I've been unable
1350          to find any magic formula to find it for Solaris (appears to
1351          be trivial on GNU/Linux).  Therefore, we have to try an alternate
1352          mechanism to find the dynamic linker's base address.  */
1353
1354       TRY_CATCH (ex, RETURN_MASK_ALL)
1355         {
1356           tmp_bfd = solib_bfd_open (interp_name);
1357         }
1358       if (tmp_bfd == NULL)
1359         goto bkpt_at_symbol;
1360
1361       /* Now convert the TMP_BFD into a target.  That way target, as
1362          well as BFD operations can be used.  Note that closing the
1363          target will also close the underlying bfd.  */
1364       tmp_bfd_target = target_bfd_reopen (tmp_bfd);
1365
1366       /* On a running target, we can get the dynamic linker's base
1367          address from the shared library table.  */
1368       so = master_so_list ();
1369       while (so)
1370         {
1371           if (svr4_same_1 (interp_name, so->so_original_name))
1372             {
1373               load_addr_found = 1;
1374               loader_found_in_list = 1;
1375               load_addr = LM_ADDR_CHECK (so, tmp_bfd);
1376               break;
1377             }
1378           so = so->next;
1379         }
1380
1381       /* If we were not able to find the base address of the loader
1382          from our so_list, then try using the AT_BASE auxilliary entry.  */
1383       if (!load_addr_found)
1384         if (target_auxv_search (&current_target, AT_BASE, &load_addr) > 0)
1385           load_addr_found = 1;
1386
1387       /* Otherwise we find the dynamic linker's base address by examining
1388          the current pc (which should point at the entry point for the
1389          dynamic linker) and subtracting the offset of the entry point.
1390
1391          This is more fragile than the previous approaches, but is a good
1392          fallback method because it has actually been working well in
1393          most cases.  */
1394       if (!load_addr_found)
1395         {
1396           struct regcache *regcache
1397             = get_thread_arch_regcache (inferior_ptid, target_gdbarch);
1398           load_addr = (regcache_read_pc (regcache)
1399                        - exec_entry_point (tmp_bfd, tmp_bfd_target));
1400         }
1401
1402       if (!loader_found_in_list)
1403         {
1404           info->debug_loader_name = xstrdup (interp_name);
1405           info->debug_loader_offset_p = 1;
1406           info->debug_loader_offset = load_addr;
1407           solib_add (NULL, 0, &current_target, auto_solib_add);
1408         }
1409
1410       /* Record the relocated start and end address of the dynamic linker
1411          text and plt section for svr4_in_dynsym_resolve_code.  */
1412       interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
1413       if (interp_sect)
1414         {
1415           interp_text_sect_low =
1416             bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1417           interp_text_sect_high =
1418             interp_text_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1419         }
1420       interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt");
1421       if (interp_sect)
1422         {
1423           interp_plt_sect_low =
1424             bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1425           interp_plt_sect_high =
1426             interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1427         }
1428
1429       /* Now try to set a breakpoint in the dynamic linker.  */
1430       for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
1431         {
1432           sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep);
1433           if (sym_addr != 0)
1434             break;
1435         }
1436
1437       if (sym_addr != 0)
1438         /* Convert 'sym_addr' from a function pointer to an address.
1439            Because we pass tmp_bfd_target instead of the current
1440            target, this will always produce an unrelocated value.  */
1441         sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch,
1442                                                        sym_addr,
1443                                                        tmp_bfd_target);
1444
1445       /* We're done with both the temporary bfd and target.  Remember,
1446          closing the target closes the underlying bfd.  */
1447       target_close (tmp_bfd_target, 0);
1448
1449       if (sym_addr != 0)
1450         {
1451           create_solib_event_breakpoint (target_gdbarch, load_addr + sym_addr);
1452           xfree (interp_name);
1453           return 1;
1454         }
1455
1456       /* For whatever reason we couldn't set a breakpoint in the dynamic
1457          linker.  Warn and drop into the old code.  */
1458     bkpt_at_symbol:
1459       xfree (interp_name);
1460       warning (_("Unable to find dynamic linker breakpoint function.\n"
1461                "GDB will be unable to debug shared library initializers\n"
1462                "and track explicitly loaded dynamic code."));
1463     }
1464
1465   /* Scan through the lists of symbols, trying to look up the symbol and
1466      set a breakpoint there.  Terminate loop when we/if we succeed.  */
1467
1468   for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
1469     {
1470       msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
1471       if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
1472         {
1473           create_solib_event_breakpoint (target_gdbarch,
1474                                          SYMBOL_VALUE_ADDRESS (msymbol));
1475           return 1;
1476         }
1477     }
1478
1479   for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
1480     {
1481       msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
1482       if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
1483         {
1484           create_solib_event_breakpoint (target_gdbarch,
1485                                          SYMBOL_VALUE_ADDRESS (msymbol));
1486           return 1;
1487         }
1488     }
1489   return 0;
1490 }
1491
1492 /*
1493
1494    LOCAL FUNCTION
1495
1496    special_symbol_handling -- additional shared library symbol handling
1497
1498    SYNOPSIS
1499
1500    void special_symbol_handling ()
1501
1502    DESCRIPTION
1503
1504    Once the symbols from a shared object have been loaded in the usual
1505    way, we are called to do any system specific symbol handling that 
1506    is needed.
1507
1508    For SunOS4, this consisted of grunging around in the dynamic
1509    linkers structures to find symbol definitions for "common" symbols
1510    and adding them to the minimal symbol table for the runtime common
1511    objfile.
1512
1513    However, for SVR4, there's nothing to do.
1514
1515  */
1516
1517 static void
1518 svr4_special_symbol_handling (void)
1519 {
1520 }
1521
1522 /* Relocate the main executable.  This function should be called upon
1523    stopping the inferior process at the entry point to the program. 
1524    The entry point from BFD is compared to the PC and if they are
1525    different, the main executable is relocated by the proper amount. 
1526    
1527    As written it will only attempt to relocate executables which
1528    lack interpreter sections.  It seems likely that only dynamic
1529    linker executables will get relocated, though it should work
1530    properly for a position-independent static executable as well.  */
1531
1532 static void
1533 svr4_relocate_main_executable (void)
1534 {
1535   asection *interp_sect;
1536   struct regcache *regcache
1537     = get_thread_arch_regcache (inferior_ptid, target_gdbarch);
1538   CORE_ADDR pc = regcache_read_pc (regcache);
1539
1540   /* Decide if the objfile needs to be relocated.  As indicated above,
1541      we will only be here when execution is stopped at the beginning
1542      of the program.  Relocation is necessary if the address at which
1543      we are presently stopped differs from the start address stored in
1544      the executable AND there's no interpreter section.  The condition
1545      regarding the interpreter section is very important because if
1546      there *is* an interpreter section, execution will begin there
1547      instead.  When there is an interpreter section, the start address
1548      is (presumably) used by the interpreter at some point to start
1549      execution of the program.
1550
1551      If there is an interpreter, it is normal for it to be set to an
1552      arbitrary address at the outset.  The job of finding it is
1553      handled in enable_break().
1554
1555      So, to summarize, relocations are necessary when there is no
1556      interpreter section and the start address obtained from the
1557      executable is different from the address at which GDB is
1558      currently stopped.
1559      
1560      [ The astute reader will note that we also test to make sure that
1561        the executable in question has the DYNAMIC flag set.  It is my
1562        opinion that this test is unnecessary (undesirable even).  It
1563        was added to avoid inadvertent relocation of an executable
1564        whose e_type member in the ELF header is not ET_DYN.  There may
1565        be a time in the future when it is desirable to do relocations
1566        on other types of files as well in which case this condition
1567        should either be removed or modified to accomodate the new file
1568        type.  (E.g, an ET_EXEC executable which has been built to be
1569        position-independent could safely be relocated by the OS if
1570        desired.  It is true that this violates the ABI, but the ABI
1571        has been known to be bent from time to time.)  - Kevin, Nov 2000. ]
1572      */
1573
1574   interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
1575   if (interp_sect == NULL 
1576       && (bfd_get_file_flags (exec_bfd) & DYNAMIC) != 0
1577       && (exec_entry_point (exec_bfd, &exec_ops) != pc))
1578     {
1579       struct cleanup *old_chain;
1580       struct section_offsets *new_offsets;
1581       int i, changed;
1582       CORE_ADDR displacement;
1583       
1584       /* It is necessary to relocate the objfile.  The amount to
1585          relocate by is simply the address at which we are stopped
1586          minus the starting address from the executable.
1587
1588          We relocate all of the sections by the same amount.  This
1589          behavior is mandated by recent editions of the System V ABI. 
1590          According to the System V Application Binary Interface,
1591          Edition 4.1, page 5-5:
1592
1593            ...  Though the system chooses virtual addresses for
1594            individual processes, it maintains the segments' relative
1595            positions.  Because position-independent code uses relative
1596            addressesing between segments, the difference between
1597            virtual addresses in memory must match the difference
1598            between virtual addresses in the file.  The difference
1599            between the virtual address of any segment in memory and
1600            the corresponding virtual address in the file is thus a
1601            single constant value for any one executable or shared
1602            object in a given process.  This difference is the base
1603            address.  One use of the base address is to relocate the
1604            memory image of the program during dynamic linking.
1605
1606          The same language also appears in Edition 4.0 of the System V
1607          ABI and is left unspecified in some of the earlier editions.  */
1608
1609       displacement = pc - exec_entry_point (exec_bfd, &exec_ops);
1610       changed = 0;
1611
1612       new_offsets = xcalloc (symfile_objfile->num_sections,
1613                              sizeof (struct section_offsets));
1614       old_chain = make_cleanup (xfree, new_offsets);
1615
1616       for (i = 0; i < symfile_objfile->num_sections; i++)
1617         {
1618           if (displacement != ANOFFSET (symfile_objfile->section_offsets, i))
1619             changed = 1;
1620           new_offsets->offsets[i] = displacement;
1621         }
1622
1623       if (changed)
1624         objfile_relocate (symfile_objfile, new_offsets);
1625
1626       do_cleanups (old_chain);
1627     }
1628 }
1629
1630 /*
1631
1632    GLOBAL FUNCTION
1633
1634    svr4_solib_create_inferior_hook -- shared library startup support
1635
1636    SYNOPSIS
1637
1638    void svr4_solib_create_inferior_hook ()
1639
1640    DESCRIPTION
1641
1642    When gdb starts up the inferior, it nurses it along (through the
1643    shell) until it is ready to execute it's first instruction.  At this
1644    point, this function gets called via expansion of the macro
1645    SOLIB_CREATE_INFERIOR_HOOK.
1646
1647    For SunOS executables, this first instruction is typically the
1648    one at "_start", or a similar text label, regardless of whether
1649    the executable is statically or dynamically linked.  The runtime
1650    startup code takes care of dynamically linking in any shared
1651    libraries, once gdb allows the inferior to continue.
1652
1653    For SVR4 executables, this first instruction is either the first
1654    instruction in the dynamic linker (for dynamically linked
1655    executables) or the instruction at "start" for statically linked
1656    executables.  For dynamically linked executables, the system
1657    first exec's /lib/libc.so.N, which contains the dynamic linker,
1658    and starts it running.  The dynamic linker maps in any needed
1659    shared libraries, maps in the actual user executable, and then
1660    jumps to "start" in the user executable.
1661
1662    For both SunOS shared libraries, and SVR4 shared libraries, we
1663    can arrange to cooperate with the dynamic linker to discover the
1664    names of shared libraries that are dynamically linked, and the
1665    base addresses to which they are linked.
1666
1667    This function is responsible for discovering those names and
1668    addresses, and saving sufficient information about them to allow
1669    their symbols to be read at a later time.
1670
1671    FIXME
1672
1673    Between enable_break() and disable_break(), this code does not
1674    properly handle hitting breakpoints which the user might have
1675    set in the startup code or in the dynamic linker itself.  Proper
1676    handling will probably have to wait until the implementation is
1677    changed to use the "breakpoint handler function" method.
1678
1679    Also, what if child has exit()ed?  Must exit loop somehow.
1680  */
1681
1682 static void
1683 svr4_solib_create_inferior_hook (void)
1684 {
1685   struct inferior *inf;
1686   struct thread_info *tp;
1687   struct svr4_info *info;
1688
1689   info = get_svr4_info (PIDGET (inferior_ptid));
1690
1691   /* Relocate the main executable if necessary.  */
1692   svr4_relocate_main_executable ();
1693
1694   if (!svr4_have_link_map_offsets ())
1695     return;
1696
1697   if (!enable_break (info))
1698     return;
1699
1700 #if defined(_SCO_DS)
1701   /* SCO needs the loop below, other systems should be using the
1702      special shared library breakpoints and the shared library breakpoint
1703      service routine.
1704
1705      Now run the target.  It will eventually hit the breakpoint, at
1706      which point all of the libraries will have been mapped in and we
1707      can go groveling around in the dynamic linker structures to find
1708      out what we need to know about them. */
1709
1710   inf = current_inferior ();
1711   tp = inferior_thread ();
1712
1713   clear_proceed_status ();
1714   inf->stop_soon = STOP_QUIETLY;
1715   tp->stop_signal = TARGET_SIGNAL_0;
1716   do
1717     {
1718       target_resume (pid_to_ptid (-1), 0, tp->stop_signal);
1719       wait_for_inferior (0);
1720     }
1721   while (tp->stop_signal != TARGET_SIGNAL_TRAP);
1722   inf->stop_soon = NO_STOP_QUIETLY;
1723 #endif /* defined(_SCO_DS) */
1724 }
1725
1726 static void
1727 svr4_clear_solib (void)
1728 {
1729   remove_svr4_info (PIDGET (inferior_ptid));
1730 }
1731
1732 static void
1733 svr4_free_so (struct so_list *so)
1734 {
1735   xfree (so->lm_info->lm);
1736   xfree (so->lm_info);
1737 }
1738
1739
1740 /* Clear any bits of ADDR that wouldn't fit in a target-format
1741    data pointer.  "Data pointer" here refers to whatever sort of
1742    address the dynamic linker uses to manage its sections.  At the
1743    moment, we don't support shared libraries on any processors where
1744    code and data pointers are different sizes.
1745
1746    This isn't really the right solution.  What we really need here is
1747    a way to do arithmetic on CORE_ADDR values that respects the
1748    natural pointer/address correspondence.  (For example, on the MIPS,
1749    converting a 32-bit pointer to a 64-bit CORE_ADDR requires you to
1750    sign-extend the value.  There, simply truncating the bits above
1751    gdbarch_ptr_bit, as we do below, is no good.)  This should probably
1752    be a new gdbarch method or something.  */
1753 static CORE_ADDR
1754 svr4_truncate_ptr (CORE_ADDR addr)
1755 {
1756   if (gdbarch_ptr_bit (target_gdbarch) == sizeof (CORE_ADDR) * 8)
1757     /* We don't need to truncate anything, and the bit twiddling below
1758        will fail due to overflow problems.  */
1759     return addr;
1760   else
1761     return addr & (((CORE_ADDR) 1 << gdbarch_ptr_bit (target_gdbarch)) - 1);
1762 }
1763
1764
1765 static void
1766 svr4_relocate_section_addresses (struct so_list *so,
1767                                  struct target_section *sec)
1768 {
1769   sec->addr    = svr4_truncate_ptr (sec->addr    + LM_ADDR_CHECK (so,
1770                                                                   sec->bfd));
1771   sec->endaddr = svr4_truncate_ptr (sec->endaddr + LM_ADDR_CHECK (so,
1772                                                                   sec->bfd));
1773 }
1774 \f
1775
1776 /* Architecture-specific operations.  */
1777
1778 /* Per-architecture data key.  */
1779 static struct gdbarch_data *solib_svr4_data;
1780
1781 struct solib_svr4_ops
1782 {
1783   /* Return a description of the layout of `struct link_map'.  */
1784   struct link_map_offsets *(*fetch_link_map_offsets)(void);
1785 };
1786
1787 /* Return a default for the architecture-specific operations.  */
1788
1789 static void *
1790 solib_svr4_init (struct obstack *obstack)
1791 {
1792   struct solib_svr4_ops *ops;
1793
1794   ops = OBSTACK_ZALLOC (obstack, struct solib_svr4_ops);
1795   ops->fetch_link_map_offsets = NULL;
1796   return ops;
1797 }
1798
1799 /* Set the architecture-specific `struct link_map_offsets' fetcher for
1800    GDBARCH to FLMO.  Also, install SVR4 solib_ops into GDBARCH.  */
1801
1802 void
1803 set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch,
1804                                        struct link_map_offsets *(*flmo) (void))
1805 {
1806   struct solib_svr4_ops *ops = gdbarch_data (gdbarch, solib_svr4_data);
1807
1808   ops->fetch_link_map_offsets = flmo;
1809
1810   set_solib_ops (gdbarch, &svr4_so_ops);
1811 }
1812
1813 /* Fetch a link_map_offsets structure using the architecture-specific
1814    `struct link_map_offsets' fetcher.  */
1815
1816 static struct link_map_offsets *
1817 svr4_fetch_link_map_offsets (void)
1818 {
1819   struct solib_svr4_ops *ops = gdbarch_data (target_gdbarch, solib_svr4_data);
1820
1821   gdb_assert (ops->fetch_link_map_offsets);
1822   return ops->fetch_link_map_offsets ();
1823 }
1824
1825 /* Return 1 if a link map offset fetcher has been defined, 0 otherwise.  */
1826
1827 static int
1828 svr4_have_link_map_offsets (void)
1829 {
1830   struct solib_svr4_ops *ops = gdbarch_data (target_gdbarch, solib_svr4_data);
1831   return (ops->fetch_link_map_offsets != NULL);
1832 }
1833 \f
1834
1835 /* Most OS'es that have SVR4-style ELF dynamic libraries define a
1836    `struct r_debug' and a `struct link_map' that are binary compatible
1837    with the origional SVR4 implementation.  */
1838
1839 /* Fetch (and possibly build) an appropriate `struct link_map_offsets'
1840    for an ILP32 SVR4 system.  */
1841   
1842 struct link_map_offsets *
1843 svr4_ilp32_fetch_link_map_offsets (void)
1844 {
1845   static struct link_map_offsets lmo;
1846   static struct link_map_offsets *lmp = NULL;
1847
1848   if (lmp == NULL)
1849     {
1850       lmp = &lmo;
1851
1852       lmo.r_version_offset = 0;
1853       lmo.r_version_size = 4;
1854       lmo.r_map_offset = 4;
1855       lmo.r_brk_offset = 8;
1856       lmo.r_ldsomap_offset = 20;
1857
1858       /* Everything we need is in the first 20 bytes.  */
1859       lmo.link_map_size = 20;
1860       lmo.l_addr_offset = 0;
1861       lmo.l_name_offset = 4;
1862       lmo.l_ld_offset = 8;
1863       lmo.l_next_offset = 12;
1864       lmo.l_prev_offset = 16;
1865     }
1866
1867   return lmp;
1868 }
1869
1870 /* Fetch (and possibly build) an appropriate `struct link_map_offsets'
1871    for an LP64 SVR4 system.  */
1872   
1873 struct link_map_offsets *
1874 svr4_lp64_fetch_link_map_offsets (void)
1875 {
1876   static struct link_map_offsets lmo;
1877   static struct link_map_offsets *lmp = NULL;
1878
1879   if (lmp == NULL)
1880     {
1881       lmp = &lmo;
1882
1883       lmo.r_version_offset = 0;
1884       lmo.r_version_size = 4;
1885       lmo.r_map_offset = 8;
1886       lmo.r_brk_offset = 16;
1887       lmo.r_ldsomap_offset = 40;
1888
1889       /* Everything we need is in the first 40 bytes.  */
1890       lmo.link_map_size = 40;
1891       lmo.l_addr_offset = 0;
1892       lmo.l_name_offset = 8;
1893       lmo.l_ld_offset = 16;
1894       lmo.l_next_offset = 24;
1895       lmo.l_prev_offset = 32;
1896     }
1897
1898   return lmp;
1899 }
1900 \f
1901
1902 struct target_so_ops svr4_so_ops;
1903
1904 /* Lookup global symbol for ELF DSOs linked with -Bsymbolic. Those DSOs have a
1905    different rule for symbol lookup.  The lookup begins here in the DSO, not in
1906    the main executable.  */
1907
1908 static struct symbol *
1909 elf_lookup_lib_symbol (const struct objfile *objfile,
1910                        const char *name,
1911                        const char *linkage_name,
1912                        const domain_enum domain)
1913 {
1914   if (objfile->obfd == NULL
1915      || scan_dyntag (DT_SYMBOLIC, objfile->obfd, NULL) != 1)
1916     return NULL;
1917
1918   return lookup_global_symbol_from_objfile
1919                 (objfile, name, linkage_name, domain);
1920 }
1921
1922 extern initialize_file_ftype _initialize_svr4_solib; /* -Wmissing-prototypes */
1923
1924 void
1925 _initialize_svr4_solib (void)
1926 {
1927   solib_svr4_data = gdbarch_data_register_pre_init (solib_svr4_init);
1928
1929   svr4_so_ops.relocate_section_addresses = svr4_relocate_section_addresses;
1930   svr4_so_ops.free_so = svr4_free_so;
1931   svr4_so_ops.clear_solib = svr4_clear_solib;
1932   svr4_so_ops.solib_create_inferior_hook = svr4_solib_create_inferior_hook;
1933   svr4_so_ops.special_symbol_handling = svr4_special_symbol_handling;
1934   svr4_so_ops.current_sos = svr4_current_sos;
1935   svr4_so_ops.open_symbol_file_object = open_symbol_file_object;
1936   svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
1937   svr4_so_ops.bfd_open = solib_bfd_open;
1938   svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol;
1939   svr4_so_ops.same = svr4_same;
1940
1941   observer_attach_inferior_exit (solib_svr4_inferior_exit);
1942 }