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