import gdb-1999-10-11 snapshot
[external/binutils.git] / gdb / solib.c
1 /* Handle SunOS and SVR4 shared libraries for GDB, the GNU Debugger.
2    Copyright 1990, 91, 92, 93, 94, 95, 96, 98, 1999
3    Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22
23 #include "defs.h"
24
25 /* This file is only compilable if link.h is available. */
26
27 #ifdef HAVE_LINK_H
28
29 #include <sys/types.h>
30 #include <signal.h>
31 #include "gdb_string.h"
32 #include <sys/param.h>
33 #include <fcntl.h>
34
35 #ifndef SVR4_SHARED_LIBS
36  /* SunOS shared libs need the nlist structure.  */
37 #include <a.out.h>
38 #else
39 #include "elf/external.h"
40 #endif
41
42 #include <link.h>
43
44 #include "symtab.h"
45 #include "bfd.h"
46 #include "symfile.h"
47 #include "objfiles.h"
48 #include "gdbcore.h"
49 #include "command.h"
50 #include "target.h"
51 #include "frame.h"
52 #include "gnu-regex.h"
53 #include "inferior.h"
54 #include "environ.h"
55 #include "language.h"
56 #include "gdbcmd.h"
57
58 #define MAX_PATH_SIZE 512       /* FIXME: Should be dynamic */
59
60 /* On SVR4 systems, a list of symbols in the dynamic linker where
61    GDB can try to place a breakpoint to monitor shared library
62    events.
63
64    If none of these symbols are found, or other errors occur, then
65    SVR4 systems will fall back to using a symbol as the "startup
66    mapping complete" breakpoint address.  */
67
68 #ifdef SVR4_SHARED_LIBS
69 static char *solib_break_names[] =
70 {
71   "r_debug_state",
72   "_r_debug_state",
73   "_dl_debug_state",
74   "rtld_db_dlactivity",
75   NULL
76 };
77 #endif
78
79 #define BKPT_AT_SYMBOL 1
80
81 #if defined (BKPT_AT_SYMBOL) && defined (SVR4_SHARED_LIBS)
82 static char *bkpt_names[] =
83 {
84 #ifdef SOLIB_BKPT_NAME
85   SOLIB_BKPT_NAME,              /* Prefer configured name if it exists. */
86 #endif
87   "_start",
88   "main",
89   NULL
90 };
91 #endif
92
93 /* Symbols which are used to locate the base of the link map structures. */
94
95 #ifndef SVR4_SHARED_LIBS
96 static char *debug_base_symbols[] =
97 {
98   "_DYNAMIC",
99   "_DYNAMIC__MGC",
100   NULL
101 };
102 #endif
103
104 static char *main_name_list[] =
105 {
106   "main_$main",
107   NULL
108 };
109
110 /* local data declarations */
111
112 #ifndef SVR4_SHARED_LIBS
113
114 #define LM_ADDR(so) ((so) -> lm.lm_addr)
115 #define LM_NEXT(so) ((so) -> lm.lm_next)
116 #define LM_NAME(so) ((so) -> lm.lm_name)
117 /* Test for first link map entry; first entry is a shared library. */
118 #define IGNORE_FIRST_LINK_MAP_ENTRY(x) (0)
119 static struct link_dynamic dynamic_copy;
120 static struct link_dynamic_2 ld_2_copy;
121 static struct ld_debug debug_copy;
122 static CORE_ADDR debug_addr;
123 static CORE_ADDR flag_addr;
124
125 #else /* SVR4_SHARED_LIBS */
126
127 #define LM_ADDR(so) ((so) -> lm.l_addr)
128 #define LM_NEXT(so) ((so) -> lm.l_next)
129 #define LM_NAME(so) ((so) -> lm.l_name)
130 /* Test for first link map entry; first entry is the exec-file. */
131 #define IGNORE_FIRST_LINK_MAP_ENTRY(x) ((x).l_prev == NULL)
132 static struct r_debug debug_copy;
133 char shadow_contents[BREAKPOINT_MAX];   /* Stash old bkpt addr contents */
134
135 #endif /* !SVR4_SHARED_LIBS */
136
137 struct so_list
138   {
139     struct so_list *next;       /* next structure in linked list */
140     struct link_map lm;         /* copy of link map from inferior */
141     struct link_map *lmaddr;    /* addr in inferior lm was read from */
142     CORE_ADDR lmend;            /* upper addr bound of mapped object */
143     char so_name[MAX_PATH_SIZE];        /* shared object lib name (FIXME) */
144     char symbols_loaded;        /* flag: symbols read in yet? */
145     char from_tty;              /* flag: print msgs? */
146     struct objfile *objfile;    /* objfile for loaded lib */
147     struct section_table *sections;
148     struct section_table *sections_end;
149     struct section_table *textsection;
150     bfd *abfd;
151   };
152
153 static struct so_list *so_list_head;    /* List of known shared objects */
154 static CORE_ADDR debug_base;    /* Base of dynamic linker structures */
155 static CORE_ADDR breakpoint_addr;       /* Address where end bkpt is set */
156
157 static int solib_cleanup_queued = 0;    /* make_run_cleanup called */
158
159 extern int
160 fdmatch PARAMS ((int, int));    /* In libiberty */
161
162 /* Local function prototypes */
163
164 static void
165 do_clear_solib PARAMS ((PTR));
166
167 static int
168 match_main PARAMS ((char *));
169
170 static void
171 special_symbol_handling PARAMS ((struct so_list *));
172
173 static void
174 sharedlibrary_command PARAMS ((char *, int));
175
176 static int
177 enable_break PARAMS ((void));
178
179 static void
180 info_sharedlibrary_command PARAMS ((char *, int));
181
182 static int symbol_add_stub PARAMS ((PTR));
183
184 static struct so_list *
185   find_solib PARAMS ((struct so_list *));
186
187 static struct link_map *
188   first_link_map_member PARAMS ((void));
189
190 static CORE_ADDR
191   locate_base PARAMS ((void));
192
193 static int solib_map_sections PARAMS ((PTR));
194
195 #ifdef SVR4_SHARED_LIBS
196
197 static CORE_ADDR
198   elf_locate_base PARAMS ((void));
199
200 #else
201
202 static int
203 disable_break PARAMS ((void));
204
205 static void
206 allocate_rt_common_objfile PARAMS ((void));
207
208 static void
209 solib_add_common_symbols PARAMS ((struct rtc_symb *));
210
211 #endif
212
213 void _initialize_solib PARAMS ((void));
214
215 /* If non-zero, this is a prefix that will be added to the front of the name
216    shared libraries with an absolute filename for loading.  */
217 static char *solib_absolute_prefix = NULL;
218
219 /* If non-empty, this is a search path for loading non-absolute shared library
220    symbol files.  This takes precedence over the environment variables PATH
221    and LD_LIBRARY_PATH.  */
222 static char *solib_search_path = NULL;
223
224 /*
225
226    LOCAL FUNCTION
227
228    solib_map_sections -- open bfd and build sections for shared lib
229
230    SYNOPSIS
231
232    static int solib_map_sections (struct so_list *so)
233
234    DESCRIPTION
235
236    Given a pointer to one of the shared objects in our list
237    of mapped objects, use the recorded name to open a bfd
238    descriptor for the object, build a section table, and then
239    relocate all the section addresses by the base address at
240    which the shared object was mapped.
241
242    FIXMES
243
244    In most (all?) cases the shared object file name recorded in the
245    dynamic linkage tables will be a fully qualified pathname.  For
246    cases where it isn't, do we really mimic the systems search
247    mechanism correctly in the below code (particularly the tilde
248    expansion stuff?).
249  */
250
251 static int
252 solib_map_sections (arg)
253      PTR arg;
254 {
255   struct so_list *so = (struct so_list *) arg;  /* catch_errors bogon */
256   char *filename;
257   char *scratch_pathname;
258   int scratch_chan;
259   struct section_table *p;
260   struct cleanup *old_chain;
261   bfd *abfd;
262
263   filename = tilde_expand (so->so_name);
264
265   if (solib_absolute_prefix && ROOTED_P (filename))
266     /* Prefix shared libraries with absolute filenames with
267        SOLIB_ABSOLUTE_PREFIX.  */
268     {
269       char *pfxed_fn;
270       int pfx_len;
271
272       pfx_len = strlen (solib_absolute_prefix);
273
274       /* Remove trailing slashes.  */
275       while (pfx_len > 0 && SLASH_P (solib_absolute_prefix[pfx_len - 1]))
276         pfx_len--;
277
278       pfxed_fn = xmalloc (pfx_len + strlen (filename) + 1);
279       strcpy (pfxed_fn, solib_absolute_prefix);
280       strcat (pfxed_fn, filename);
281       free (filename);
282
283       filename = pfxed_fn;
284     }
285
286   old_chain = make_cleanup (free, filename);
287
288   scratch_chan = -1;
289
290   if (solib_search_path)
291     scratch_chan = openp (solib_search_path,
292                           1, filename, O_RDONLY, 0, &scratch_pathname);
293   if (scratch_chan < 0)
294     scratch_chan = openp (get_in_environ (inferior_environ, "PATH"),
295                           1, filename, O_RDONLY, 0, &scratch_pathname);
296   if (scratch_chan < 0)
297     {
298       scratch_chan = openp (get_in_environ
299                             (inferior_environ, "LD_LIBRARY_PATH"),
300                             1, filename, O_RDONLY, 0, &scratch_pathname);
301     }
302   if (scratch_chan < 0)
303     {
304       perror_with_name (filename);
305     }
306   /* Leave scratch_pathname allocated.  abfd->name will point to it.  */
307
308   abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
309   if (!abfd)
310     {
311       close (scratch_chan);
312       error ("Could not open `%s' as an executable file: %s",
313              scratch_pathname, bfd_errmsg (bfd_get_error ()));
314     }
315   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
316   so->abfd = abfd;
317   abfd->cacheable = true;
318
319   /* copy full path name into so_name, so that later symbol_file_add can find
320      it */
321   if (strlen (scratch_pathname) >= MAX_PATH_SIZE)
322     error ("Full path name length of shared library exceeds MAX_PATH_SIZE in so_list structure.");
323   strcpy (so->so_name, scratch_pathname);
324
325   if (!bfd_check_format (abfd, bfd_object))
326     {
327       error ("\"%s\": not in executable format: %s.",
328              scratch_pathname, bfd_errmsg (bfd_get_error ()));
329     }
330   if (build_section_table (abfd, &so->sections, &so->sections_end))
331     {
332       error ("Can't find the file sections in `%s': %s",
333              bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
334     }
335
336   for (p = so->sections; p < so->sections_end; p++)
337     {
338       /* Relocate the section binding addresses as recorded in the shared
339          object's file by the base address to which the object was actually
340          mapped. */
341       p->addr += (CORE_ADDR) LM_ADDR (so);
342       p->endaddr += (CORE_ADDR) LM_ADDR (so);
343       so->lmend = (CORE_ADDR) max (p->endaddr, so->lmend);
344       if (STREQ (p->the_bfd_section->name, ".text"))
345         {
346           so->textsection = p;
347         }
348     }
349
350   /* Free the file names, close the file now.  */
351   do_cleanups (old_chain);
352
353   return (1);
354 }
355
356 #ifndef SVR4_SHARED_LIBS
357
358 /* Allocate the runtime common object file.  */
359
360 static void
361 allocate_rt_common_objfile ()
362 {
363   struct objfile *objfile;
364   struct objfile *last_one;
365
366   objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
367   memset (objfile, 0, sizeof (struct objfile));
368   objfile->md = NULL;
369   obstack_specify_allocation (&objfile->psymbol_cache.cache, 0, 0,
370                               xmalloc, free);
371   obstack_specify_allocation (&objfile->psymbol_obstack, 0, 0, xmalloc,
372                               free);
373   obstack_specify_allocation (&objfile->symbol_obstack, 0, 0, xmalloc,
374                               free);
375   obstack_specify_allocation (&objfile->type_obstack, 0, 0, xmalloc,
376                               free);
377   objfile->name = mstrsave (objfile->md, "rt_common");
378
379   /* Add this file onto the tail of the linked list of other such files. */
380
381   objfile->next = NULL;
382   if (object_files == NULL)
383     object_files = objfile;
384   else
385     {
386       for (last_one = object_files;
387            last_one->next;
388            last_one = last_one->next);
389       last_one->next = objfile;
390     }
391
392   rt_common_objfile = objfile;
393 }
394
395 /* Read all dynamically loaded common symbol definitions from the inferior
396    and put them into the minimal symbol table for the runtime common
397    objfile.  */
398
399 static void
400 solib_add_common_symbols (rtc_symp)
401      struct rtc_symb *rtc_symp;
402 {
403   struct rtc_symb inferior_rtc_symb;
404   struct nlist inferior_rtc_nlist;
405   int len;
406   char *name;
407
408   /* Remove any runtime common symbols from previous runs.  */
409
410   if (rt_common_objfile != NULL && rt_common_objfile->minimal_symbol_count)
411     {
412       obstack_free (&rt_common_objfile->symbol_obstack, 0);
413       obstack_specify_allocation (&rt_common_objfile->symbol_obstack, 0, 0,
414                                   xmalloc, free);
415       rt_common_objfile->minimal_symbol_count = 0;
416       rt_common_objfile->msymbols = NULL;
417     }
418
419   init_minimal_symbol_collection ();
420   make_cleanup ((make_cleanup_func) discard_minimal_symbols, 0);
421
422   while (rtc_symp)
423     {
424       read_memory ((CORE_ADDR) rtc_symp,
425                    (char *) &inferior_rtc_symb,
426                    sizeof (inferior_rtc_symb));
427       read_memory ((CORE_ADDR) inferior_rtc_symb.rtc_sp,
428                    (char *) &inferior_rtc_nlist,
429                    sizeof (inferior_rtc_nlist));
430       if (inferior_rtc_nlist.n_type == N_COMM)
431         {
432           /* FIXME: The length of the symbol name is not available, but in the
433              current implementation the common symbol is allocated immediately
434              behind the name of the symbol. */
435           len = inferior_rtc_nlist.n_value - inferior_rtc_nlist.n_un.n_strx;
436
437           name = xmalloc (len);
438           read_memory ((CORE_ADDR) inferior_rtc_nlist.n_un.n_name, name, len);
439
440           /* Allocate the runtime common objfile if necessary. */
441           if (rt_common_objfile == NULL)
442             allocate_rt_common_objfile ();
443
444           prim_record_minimal_symbol (name, inferior_rtc_nlist.n_value,
445                                       mst_bss, rt_common_objfile);
446           free (name);
447         }
448       rtc_symp = inferior_rtc_symb.rtc_next;
449     }
450
451   /* Install any minimal symbols that have been collected as the current
452      minimal symbols for the runtime common objfile.  */
453
454   install_minimal_symbols (rt_common_objfile);
455 }
456
457 #endif /* SVR4_SHARED_LIBS */
458
459
460 #ifdef SVR4_SHARED_LIBS
461
462 static CORE_ADDR
463   bfd_lookup_symbol PARAMS ((bfd *, char *));
464
465 /*
466
467    LOCAL FUNCTION
468
469    bfd_lookup_symbol -- lookup the value for a specific symbol
470
471    SYNOPSIS
472
473    CORE_ADDR bfd_lookup_symbol (bfd *abfd, char *symname)
474
475    DESCRIPTION
476
477    An expensive way to lookup the value of a single symbol for
478    bfd's that are only temporary anyway.  This is used by the
479    shared library support to find the address of the debugger
480    interface structures in the shared library.
481
482    Note that 0 is specifically allowed as an error return (no
483    such symbol).
484  */
485
486 static CORE_ADDR
487 bfd_lookup_symbol (abfd, symname)
488      bfd *abfd;
489      char *symname;
490 {
491   unsigned int storage_needed;
492   asymbol *sym;
493   asymbol **symbol_table;
494   unsigned int number_of_symbols;
495   unsigned int i;
496   struct cleanup *back_to;
497   CORE_ADDR symaddr = 0;
498
499   storage_needed = bfd_get_symtab_upper_bound (abfd);
500
501   if (storage_needed > 0)
502     {
503       symbol_table = (asymbol **) xmalloc (storage_needed);
504       back_to = make_cleanup (free, (PTR) symbol_table);
505       number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table);
506
507       for (i = 0; i < number_of_symbols; i++)
508         {
509           sym = *symbol_table++;
510           if (STREQ (sym->name, symname))
511             {
512               /* Bfd symbols are section relative. */
513               symaddr = sym->value + sym->section->vma;
514               break;
515             }
516         }
517       do_cleanups (back_to);
518     }
519   return (symaddr);
520 }
521
522 #ifdef HANDLE_SVR4_EXEC_EMULATORS
523
524 /*
525    Solaris BCP (the part of Solaris which allows it to run SunOS4
526    a.out files) throws in another wrinkle. Solaris does not fill
527    in the usual a.out link map structures when running BCP programs,
528    the only way to get at them is via groping around in the dynamic
529    linker.
530    The dynamic linker and it's structures are located in the shared
531    C library, which gets run as the executable's "interpreter" by
532    the kernel.
533
534    Note that we can assume nothing about the process state at the time
535    we need to find these structures.  We may be stopped on the first
536    instruction of the interpreter (C shared library), the first
537    instruction of the executable itself, or somewhere else entirely
538    (if we attached to the process for example).
539  */
540
541 static char *debug_base_symbols[] =
542 {
543   "r_debug",                    /* Solaris 2.3 */
544   "_r_debug",                   /* Solaris 2.1, 2.2 */
545   NULL
546 };
547
548 static int
549 look_for_base PARAMS ((int, CORE_ADDR));
550
551 /*
552
553    LOCAL FUNCTION
554
555    look_for_base -- examine file for each mapped address segment
556
557    SYNOPSYS
558
559    static int look_for_base (int fd, CORE_ADDR baseaddr)
560
561    DESCRIPTION
562
563    This function is passed to proc_iterate_over_mappings, which
564    causes it to get called once for each mapped address space, with
565    an open file descriptor for the file mapped to that space, and the
566    base address of that mapped space.
567
568    Our job is to find the debug base symbol in the file that this
569    fd is open on, if it exists, and if so, initialize the dynamic
570    linker structure base address debug_base.
571
572    Note that this is a computationally expensive proposition, since
573    we basically have to open a bfd on every call, so we specifically
574    avoid opening the exec file.
575  */
576
577 static int
578 look_for_base (fd, baseaddr)
579      int fd;
580      CORE_ADDR baseaddr;
581 {
582   bfd *interp_bfd;
583   CORE_ADDR address = 0;
584   char **symbolp;
585
586   /* If the fd is -1, then there is no file that corresponds to this
587      mapped memory segment, so skip it.  Also, if the fd corresponds
588      to the exec file, skip it as well. */
589
590   if (fd == -1
591       || (exec_bfd != NULL
592           && fdmatch (fileno ((FILE *) (exec_bfd->iostream)), fd)))
593     {
594       return (0);
595     }
596
597   /* Try to open whatever random file this fd corresponds to.  Note that
598      we have no way currently to find the filename.  Don't gripe about
599      any problems we might have, just fail. */
600
601   if ((interp_bfd = bfd_fdopenr ("unnamed", gnutarget, fd)) == NULL)
602     {
603       return (0);
604     }
605   if (!bfd_check_format (interp_bfd, bfd_object))
606     {
607       /* FIXME-leak: on failure, might not free all memory associated with
608          interp_bfd.  */
609       bfd_close (interp_bfd);
610       return (0);
611     }
612
613   /* Now try to find our debug base symbol in this file, which we at
614      least know to be a valid ELF executable or shared library. */
615
616   for (symbolp = debug_base_symbols; *symbolp != NULL; symbolp++)
617     {
618       address = bfd_lookup_symbol (interp_bfd, *symbolp);
619       if (address != 0)
620         {
621           break;
622         }
623     }
624   if (address == 0)
625     {
626       /* FIXME-leak: on failure, might not free all memory associated with
627          interp_bfd.  */
628       bfd_close (interp_bfd);
629       return (0);
630     }
631
632   /* Eureka!  We found the symbol.  But now we may need to relocate it
633      by the base address.  If the symbol's value is less than the base
634      address of the shared library, then it hasn't yet been relocated
635      by the dynamic linker, and we have to do it ourself.  FIXME: Note
636      that we make the assumption that the first segment that corresponds
637      to the shared library has the base address to which the library
638      was relocated. */
639
640   if (address < baseaddr)
641     {
642       address += baseaddr;
643     }
644   debug_base = address;
645   /* FIXME-leak: on failure, might not free all memory associated with
646      interp_bfd.  */
647   bfd_close (interp_bfd);
648   return (1);
649 }
650 #endif /* HANDLE_SVR4_EXEC_EMULATORS */
651
652 /*
653
654    LOCAL FUNCTION
655
656    elf_locate_base -- locate the base address of dynamic linker structs
657    for SVR4 elf targets.
658
659    SYNOPSIS
660
661    CORE_ADDR elf_locate_base (void)
662
663    DESCRIPTION
664
665    For SVR4 elf targets the address of the dynamic linker's runtime
666    structure is contained within the dynamic info section in the
667    executable file.  The dynamic section is also mapped into the
668    inferior address space.  Because the runtime loader fills in the
669    real address before starting the inferior, we have to read in the
670    dynamic info section from the inferior address space.
671    If there are any errors while trying to find the address, we
672    silently return 0, otherwise the found address is returned.
673
674  */
675
676 static CORE_ADDR
677 elf_locate_base ()
678 {
679   sec_ptr dyninfo_sect;
680   int dyninfo_sect_size;
681   CORE_ADDR dyninfo_addr;
682   char *buf;
683   char *bufend;
684
685   /* Find the start address of the .dynamic section.  */
686   dyninfo_sect = bfd_get_section_by_name (exec_bfd, ".dynamic");
687   if (dyninfo_sect == NULL)
688     return 0;
689   dyninfo_addr = bfd_section_vma (exec_bfd, dyninfo_sect);
690
691   /* Read in .dynamic section, silently ignore errors.  */
692   dyninfo_sect_size = bfd_section_size (exec_bfd, dyninfo_sect);
693   buf = alloca (dyninfo_sect_size);
694   if (target_read_memory (dyninfo_addr, buf, dyninfo_sect_size))
695     return 0;
696
697   /* Find the DT_DEBUG entry in the the .dynamic section.
698      For mips elf we look for DT_MIPS_RLD_MAP, mips elf apparently has
699      no DT_DEBUG entries.  */
700 #ifndef TARGET_ELF64
701   for (bufend = buf + dyninfo_sect_size;
702        buf < bufend;
703        buf += sizeof (Elf32_External_Dyn))
704     {
705       Elf32_External_Dyn *x_dynp = (Elf32_External_Dyn *) buf;
706       long dyn_tag;
707       CORE_ADDR dyn_ptr;
708
709       dyn_tag = bfd_h_get_32 (exec_bfd, (bfd_byte *) x_dynp->d_tag);
710       if (dyn_tag == DT_NULL)
711         break;
712       else if (dyn_tag == DT_DEBUG)
713         {
714           dyn_ptr = bfd_h_get_32 (exec_bfd, (bfd_byte *) x_dynp->d_un.d_ptr);
715           return dyn_ptr;
716         }
717 #ifdef DT_MIPS_RLD_MAP
718       else if (dyn_tag == DT_MIPS_RLD_MAP)
719         {
720           char pbuf[TARGET_PTR_BIT / HOST_CHAR_BIT];
721
722           /* DT_MIPS_RLD_MAP contains a pointer to the address
723              of the dynamic link structure.  */
724           dyn_ptr = bfd_h_get_32 (exec_bfd, (bfd_byte *) x_dynp->d_un.d_ptr);
725           if (target_read_memory (dyn_ptr, pbuf, sizeof (pbuf)))
726             return 0;
727           return extract_unsigned_integer (pbuf, sizeof (pbuf));
728         }
729 #endif
730     }
731 #else /* ELF64 */
732   for (bufend = buf + dyninfo_sect_size;
733        buf < bufend;
734        buf += sizeof (Elf64_External_Dyn))
735     {
736       Elf64_External_Dyn *x_dynp = (Elf64_External_Dyn *) buf;
737       long dyn_tag;
738       CORE_ADDR dyn_ptr;
739
740       dyn_tag = bfd_h_get_64 (exec_bfd, (bfd_byte *) x_dynp->d_tag);
741       if (dyn_tag == DT_NULL)
742         break;
743       else if (dyn_tag == DT_DEBUG)
744         {
745           dyn_ptr = bfd_h_get_64 (exec_bfd, (bfd_byte *) x_dynp->d_un.d_ptr);
746           return dyn_ptr;
747         }
748     }
749 #endif
750
751   /* DT_DEBUG entry not found.  */
752   return 0;
753 }
754
755 #endif /* SVR4_SHARED_LIBS */
756
757 /*
758
759    LOCAL FUNCTION
760
761    locate_base -- locate the base address of dynamic linker structs
762
763    SYNOPSIS
764
765    CORE_ADDR locate_base (void)
766
767    DESCRIPTION
768
769    For both the SunOS and SVR4 shared library implementations, if the
770    inferior executable has been linked dynamically, there is a single
771    address somewhere in the inferior's data space which is the key to
772    locating all of the dynamic linker's runtime structures.  This
773    address is the value of the debug base symbol.  The job of this
774    function is to find and return that address, or to return 0 if there
775    is no such address (the executable is statically linked for example).
776
777    For SunOS, the job is almost trivial, since the dynamic linker and
778    all of it's structures are statically linked to the executable at
779    link time.  Thus the symbol for the address we are looking for has
780    already been added to the minimal symbol table for the executable's
781    objfile at the time the symbol file's symbols were read, and all we
782    have to do is look it up there.  Note that we explicitly do NOT want
783    to find the copies in the shared library.
784
785    The SVR4 version is a bit more complicated because the address
786    is contained somewhere in the dynamic info section.  We have to go
787    to a lot more work to discover the address of the debug base symbol.
788    Because of this complexity, we cache the value we find and return that
789    value on subsequent invocations.  Note there is no copy in the
790    executable symbol tables.
791
792  */
793
794 static CORE_ADDR
795 locate_base ()
796 {
797
798 #ifndef SVR4_SHARED_LIBS
799
800   struct minimal_symbol *msymbol;
801   CORE_ADDR address = 0;
802   char **symbolp;
803
804   /* For SunOS, we want to limit the search for the debug base symbol to the
805      executable being debugged, since there is a duplicate named symbol in the
806      shared library.  We don't want the shared library versions. */
807
808   for (symbolp = debug_base_symbols; *symbolp != NULL; symbolp++)
809     {
810       msymbol = lookup_minimal_symbol (*symbolp, NULL, symfile_objfile);
811       if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
812         {
813           address = SYMBOL_VALUE_ADDRESS (msymbol);
814           return (address);
815         }
816     }
817   return (0);
818
819 #else /* SVR4_SHARED_LIBS */
820
821   /* Check to see if we have a currently valid address, and if so, avoid
822      doing all this work again and just return the cached address.  If
823      we have no cached address, try to locate it in the dynamic info
824      section for ELF executables.  */
825
826   if (debug_base == 0)
827     {
828       if (exec_bfd != NULL
829           && bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour)
830         debug_base = elf_locate_base ();
831 #ifdef HANDLE_SVR4_EXEC_EMULATORS
832       /* Try it the hard way for emulated executables.  */
833       else if (inferior_pid != 0 && target_has_execution)
834         proc_iterate_over_mappings (look_for_base);
835 #endif
836     }
837   return (debug_base);
838
839 #endif /* !SVR4_SHARED_LIBS */
840
841 }
842
843 /*
844
845    LOCAL FUNCTION
846
847    first_link_map_member -- locate first member in dynamic linker's map
848
849    SYNOPSIS
850
851    static struct link_map *first_link_map_member (void)
852
853    DESCRIPTION
854
855    Read in a copy of the first member in the inferior's dynamic
856    link map from the inferior's dynamic linker structures, and return
857    a pointer to the copy in our address space.
858  */
859
860 static struct link_map *
861 first_link_map_member ()
862 {
863   struct link_map *lm = NULL;
864
865 #ifndef SVR4_SHARED_LIBS
866
867   read_memory (debug_base, (char *) &dynamic_copy, sizeof (dynamic_copy));
868   if (dynamic_copy.ld_version >= 2)
869     {
870       /* It is a version that we can deal with, so read in the secondary
871          structure and find the address of the link map list from it. */
872       read_memory ((CORE_ADDR) dynamic_copy.ld_un.ld_2, (char *) &ld_2_copy,
873                    sizeof (struct link_dynamic_2));
874       lm = ld_2_copy.ld_loaded;
875     }
876
877 #else /* SVR4_SHARED_LIBS */
878
879   read_memory (debug_base, (char *) &debug_copy, sizeof (struct r_debug));
880   /* FIXME:  Perhaps we should validate the info somehow, perhaps by
881      checking r_version for a known version number, or r_state for
882      RT_CONSISTENT. */
883   lm = debug_copy.r_map;
884
885 #endif /* !SVR4_SHARED_LIBS */
886
887   return (lm);
888 }
889
890 #ifdef SVR4_SHARED_LIBS
891 /*
892
893   LOCAL FUNCTION
894
895   open_exec_file_object
896
897   SYNOPSIS
898
899   void open_symbol_file_object (int from_tty)
900
901   DESCRIPTION
902
903   If no open symbol file, attempt to locate and open the main symbol
904   file.  On SVR4 systems, this is the first link map entry.  If its
905   name is here, we can open it.  Useful when attaching to a process
906   without first loading its symbol file.
907
908  */
909
910 int
911 open_symbol_file_object (arg)
912      PTR arg;
913 {
914   int from_tty = (int) arg;     /* sneak past catch_errors */
915   struct link_map *lm, lmcopy;
916   char *filename;
917   int errcode;
918
919   if (symfile_objfile)
920     if (!query ("Attempt to reload symbols from process? "))
921       return 0;
922
923   if ((debug_base = locate_base ()) == 0)
924     return 0;   /* failed somehow... */
925
926   /* First link map member should be the executable.  */
927   if ((lm = first_link_map_member ()) == NULL)
928     return 0;   /* failed somehow... */
929
930   /* Read from target memory to GDB.  */
931   read_memory ((CORE_ADDR) lm, (void *) &lmcopy, sizeof (lmcopy));
932
933   if (lmcopy.l_name == 0)
934     return 0;   /* no filename.  */
935
936   /* Now fetch the filename from target memory.  */
937   target_read_string ((CORE_ADDR) lmcopy.l_name, &filename, 
938                       MAX_PATH_SIZE - 1, &errcode);
939   if (errcode)
940     {
941       warning ("failed to read exec filename from attached file: %s",
942                safe_strerror (errcode));
943       return 0;
944     }
945
946   make_cleanup ((make_cleanup_func) free, (void *) filename);
947   /* Have a pathname: read the symbol file.  */
948   symbol_file_command (filename, from_tty);
949
950   return 1;
951 }
952 #endif /* SVR4_SHARED_LIBS */
953
954 /*
955
956    LOCAL FUNCTION
957
958    find_solib -- step through list of shared objects
959
960    SYNOPSIS
961
962    struct so_list *find_solib (struct so_list *so_list_ptr)
963
964    DESCRIPTION
965
966    This module contains the routine which finds the names of any
967    loaded "images" in the current process. The argument in must be
968    NULL on the first call, and then the returned value must be passed
969    in on subsequent calls. This provides the capability to "step" down
970    the list of loaded objects. On the last object, a NULL value is
971    returned.
972
973    The arg and return value are "struct link_map" pointers, as defined
974    in <link.h>.
975  */
976
977 static struct so_list *
978 find_solib (so_list_ptr)
979      struct so_list *so_list_ptr;       /* Last lm or NULL for first one */
980 {
981   struct so_list *so_list_next = NULL;
982   struct link_map *lm = NULL;
983   struct so_list *new;
984
985   if (so_list_ptr == NULL)
986     {
987       /* We are setting up for a new scan through the loaded images. */
988       if ((so_list_next = so_list_head) == NULL)
989         {
990           /* We have not already read in the dynamic linking structures
991              from the inferior, lookup the address of the base structure. */
992           debug_base = locate_base ();
993           if (debug_base != 0)
994             {
995               /* Read the base structure in and find the address of the first
996                  link map list member. */
997               lm = first_link_map_member ();
998             }
999         }
1000     }
1001   else
1002     {
1003       /* We have been called before, and are in the process of walking
1004          the shared library list.  Advance to the next shared object. */
1005       if ((lm = LM_NEXT (so_list_ptr)) == NULL)
1006         {
1007           /* We have hit the end of the list, so check to see if any were
1008              added, but be quiet if we can't read from the target any more. */
1009           int status = target_read_memory ((CORE_ADDR) so_list_ptr->lmaddr,
1010                                            (char *) &(so_list_ptr->lm),
1011                                            sizeof (struct link_map));
1012           if (status == 0)
1013             {
1014               lm = LM_NEXT (so_list_ptr);
1015             }
1016           else
1017             {
1018               lm = NULL;
1019             }
1020         }
1021       so_list_next = so_list_ptr->next;
1022     }
1023   if ((so_list_next == NULL) && (lm != NULL))
1024     {
1025       /* Get next link map structure from inferior image and build a local
1026          abbreviated load_map structure */
1027       new = (struct so_list *) xmalloc (sizeof (struct so_list));
1028       memset ((char *) new, 0, sizeof (struct so_list));
1029       new->lmaddr = lm;
1030       /* Add the new node as the next node in the list, or as the root
1031          node if this is the first one. */
1032       if (so_list_ptr != NULL)
1033         {
1034           so_list_ptr->next = new;
1035         }
1036       else
1037         {
1038           so_list_head = new;
1039
1040           if (!solib_cleanup_queued)
1041             {
1042               make_run_cleanup (do_clear_solib, NULL);
1043               solib_cleanup_queued = 1;
1044             }
1045
1046         }
1047       so_list_next = new;
1048       read_memory ((CORE_ADDR) lm, (char *) &(new->lm),
1049                    sizeof (struct link_map));
1050       /* For SVR4 versions, the first entry in the link map is for the
1051          inferior executable, so we must ignore it.  For some versions of
1052          SVR4, it has no name.  For others (Solaris 2.3 for example), it
1053          does have a name, so we can no longer use a missing name to
1054          decide when to ignore it. */
1055       if (!IGNORE_FIRST_LINK_MAP_ENTRY (new->lm))
1056         {
1057           int errcode;
1058           char *buffer;
1059           target_read_string ((CORE_ADDR) LM_NAME (new), &buffer,
1060                               MAX_PATH_SIZE - 1, &errcode);
1061           if (errcode != 0)
1062             {
1063               warning ("find_solib: Can't read pathname for load map: %s\n",
1064                        safe_strerror (errcode));
1065               return (so_list_next);
1066             }
1067           strncpy (new->so_name, buffer, MAX_PATH_SIZE - 1);
1068           new->so_name[MAX_PATH_SIZE - 1] = '\0';
1069           free (buffer);
1070           catch_errors (solib_map_sections, new,
1071                         "Error while mapping shared library sections:\n",
1072                         RETURN_MASK_ALL);
1073         }
1074     }
1075   return (so_list_next);
1076 }
1077
1078 /* A small stub to get us past the arg-passing pinhole of catch_errors.  */
1079
1080 static int
1081 symbol_add_stub (arg)
1082      PTR arg;
1083 {
1084   register struct so_list *so = (struct so_list *) arg;         /* catch_errs bogon */
1085   CORE_ADDR text_addr = 0;
1086   struct section_addr_info section_addrs;
1087
1088   memset (&section_addrs, 0, sizeof (section_addrs));
1089   if (so->textsection)
1090     text_addr = so->textsection->addr;
1091   else if (so->abfd != NULL)
1092     {
1093       asection *lowest_sect;
1094
1095       /* If we didn't find a mapped non zero sized .text section, set up
1096          text_addr so that the relocation in symbol_file_add does no harm.  */
1097
1098       lowest_sect = bfd_get_section_by_name (so->abfd, ".text");
1099       if (lowest_sect == NULL)
1100         bfd_map_over_sections (so->abfd, find_lowest_section,
1101                                (PTR) &lowest_sect);
1102       if (lowest_sect)
1103         text_addr = bfd_section_vma (so->abfd, lowest_sect)
1104           + (CORE_ADDR) LM_ADDR (so);
1105     }
1106
1107   ALL_OBJFILES (so->objfile)
1108   {
1109     if (strcmp (so->objfile->name, so->so_name) == 0)
1110       return 1;
1111   }
1112   section_addrs.text_addr = text_addr;
1113   so->objfile =
1114     symbol_file_add (so->so_name, so->from_tty,
1115                      &section_addrs, 0, OBJF_SHARED);
1116   return (1);
1117 }
1118
1119 /* This function will check the so name to see if matches the main list.
1120    In some system the main object is in the list, which we want to exclude */
1121
1122 static int
1123 match_main (soname)
1124      char *soname;
1125 {
1126   char **mainp;
1127
1128   for (mainp = main_name_list; *mainp != NULL; mainp++)
1129     {
1130       if (strcmp (soname, *mainp) == 0)
1131         return (1);
1132     }
1133
1134   return (0);
1135 }
1136
1137 /*
1138
1139    GLOBAL FUNCTION
1140
1141    solib_add -- add a shared library file to the symtab and section list
1142
1143    SYNOPSIS
1144
1145    void solib_add (char *arg_string, int from_tty,
1146    struct target_ops *target)
1147
1148    DESCRIPTION
1149
1150  */
1151
1152 void
1153 solib_add (arg_string, from_tty, target)
1154      char *arg_string;
1155      int from_tty;
1156      struct target_ops *target;
1157 {
1158   register struct so_list *so = NULL;   /* link map state variable */
1159
1160   /* Last shared library that we read.  */
1161   struct so_list *so_last = NULL;
1162
1163   char *re_err;
1164   int count;
1165   int old;
1166
1167 #ifdef SVR4_SHARED_LIBS
1168   /* If we are attaching to a running process for which we 
1169      have not opened a symbol file, we may be able to get its 
1170      symbols now!  */
1171   if (attach_flag &&
1172       symfile_objfile == NULL)
1173     catch_errors (open_symbol_file_object, (PTR) from_tty, 
1174                   "Error reading attached process's symbol file.\n",
1175                   RETURN_MASK_ALL);
1176
1177 #endif SVR4_SHARED_LIBS
1178
1179   if ((re_err = re_comp (arg_string? arg_string : ".")) != NULL)
1180     {
1181       error ("Invalid regexp: %s", re_err);
1182     }
1183
1184   /* Add the shared library sections to the section table of the
1185      specified target, if any.  */
1186   if (target)
1187     {
1188       /* Count how many new section_table entries there are.  */
1189       so = NULL;
1190       count = 0;
1191       while ((so = find_solib (so)) != NULL)
1192         {
1193           if (so->so_name[0] && !match_main (so->so_name))
1194             {
1195               count += so->sections_end - so->sections;
1196             }
1197         }
1198
1199       if (count)
1200         {
1201           
1202           /* Add these section table entries to the target's table.  */
1203           old = target_resize_to_sections (target, count);
1204           while ((so = find_solib (so)) != NULL)
1205             {
1206               if (so->so_name[0])
1207                 {
1208                   count = so->sections_end - so->sections;
1209                   memcpy ((char *) (target->to_sections + old),
1210                           so->sections,
1211                           (sizeof (struct section_table)) * count);
1212                   old += count;
1213                 }
1214             }
1215         }
1216     }
1217
1218   /* Now add the symbol files.  */
1219   while ((so = find_solib (so)) != NULL)
1220     {
1221       if (so->so_name[0] && re_exec (so->so_name) &&
1222           !match_main (so->so_name))
1223         {
1224           so->from_tty = from_tty;
1225           if (so->symbols_loaded)
1226             {
1227               if (from_tty)
1228                 {
1229                   printf_unfiltered ("Symbols already loaded for %s\n", so->so_name);
1230                 }
1231             }
1232           else if (catch_errors
1233                    (symbol_add_stub, so,
1234                     "Error while reading shared library symbols:\n",
1235                     RETURN_MASK_ALL))
1236             {
1237               so_last = so;
1238               so->symbols_loaded = 1;
1239             }
1240         }
1241     }
1242
1243   /* Getting new symbols may change our opinion about what is
1244      frameless.  */
1245   if (so_last)
1246     reinit_frame_cache ();
1247
1248   if (so_last)
1249     special_symbol_handling (so_last);
1250 }
1251
1252 /*
1253
1254    LOCAL FUNCTION
1255
1256    info_sharedlibrary_command -- code for "info sharedlibrary"
1257
1258    SYNOPSIS
1259
1260    static void info_sharedlibrary_command ()
1261
1262    DESCRIPTION
1263
1264    Walk through the shared library list and print information
1265    about each attached library.
1266  */
1267
1268 static void
1269 info_sharedlibrary_command (ignore, from_tty)
1270      char *ignore;
1271      int from_tty;
1272 {
1273   register struct so_list *so = NULL;   /* link map state variable */
1274   int header_done = 0;
1275   int addr_width;
1276   char *addr_fmt;
1277
1278   if (exec_bfd == NULL)
1279     {
1280       printf_unfiltered ("No exec file.\n");
1281       return;
1282     }
1283
1284 #ifndef TARGET_ELF64
1285   addr_width = 8 + 4;
1286   addr_fmt = "08l";
1287 #else
1288   addr_width = 16 + 4;
1289   addr_fmt = "016l";
1290 #endif
1291
1292   while ((so = find_solib (so)) != NULL)
1293     {
1294       if (so->so_name[0])
1295         {
1296           if (!header_done)
1297             {
1298               printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
1299                                  addr_width, "To", "Syms Read",
1300                                  "Shared Object Library");
1301               header_done++;
1302             }
1303
1304           printf_unfiltered ("%-*s", addr_width,
1305                       local_hex_string_custom ((unsigned long) LM_ADDR (so),
1306                                                addr_fmt));
1307           printf_unfiltered ("%-*s", addr_width,
1308                          local_hex_string_custom ((unsigned long) so->lmend,
1309                                                   addr_fmt));
1310           printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
1311           printf_unfiltered ("%s\n", so->so_name);
1312         }
1313     }
1314   if (so_list_head == NULL)
1315     {
1316       printf_unfiltered ("No shared libraries loaded at this time.\n");
1317     }
1318 }
1319
1320 /*
1321
1322    GLOBAL FUNCTION
1323
1324    solib_address -- check to see if an address is in a shared lib
1325
1326    SYNOPSIS
1327
1328    char * solib_address (CORE_ADDR address)
1329
1330    DESCRIPTION
1331
1332    Provides a hook for other gdb routines to discover whether or
1333    not a particular address is within the mapped address space of
1334    a shared library.  Any address between the base mapping address
1335    and the first address beyond the end of the last mapping, is
1336    considered to be within the shared library address space, for
1337    our purposes.
1338
1339    For example, this routine is called at one point to disable
1340    breakpoints which are in shared libraries that are not currently
1341    mapped in.
1342  */
1343
1344 char *
1345 solib_address (address)
1346      CORE_ADDR address;
1347 {
1348   register struct so_list *so = 0;      /* link map state variable */
1349
1350   while ((so = find_solib (so)) != NULL)
1351     {
1352       if (so->so_name[0])
1353         {
1354           if ((address >= (CORE_ADDR) LM_ADDR (so)) &&
1355               (address < (CORE_ADDR) so->lmend))
1356             return (so->so_name);
1357         }
1358     }
1359   return (0);
1360 }
1361
1362 /* Called by free_all_symtabs */
1363
1364 void
1365 clear_solib ()
1366 {
1367   struct so_list *next;
1368   char *bfd_filename;
1369
1370   /* This function is expected to handle ELF shared libraries.  It is
1371      also used on Solaris, which can run either ELF or a.out binaries
1372      (for compatibility with SunOS 4), both of which can use shared
1373      libraries.  So we don't know whether we have an ELF executable or
1374      an a.out executable until the user chooses an executable file.
1375
1376      ELF shared libraries don't get mapped into the address space
1377      until after the program starts, so we'd better not try to insert
1378      breakpoints in them immediately.  We have to wait until the
1379      dynamic linker has loaded them; we'll hit a bp_shlib_event
1380      breakpoint (look for calls to create_solib_event_breakpoint) when
1381      it's ready.
1382
1383      SunOS shared libraries seem to be different --- they're present
1384      as soon as the process begins execution, so there's no need to
1385      put off inserting breakpoints.  There's also nowhere to put a
1386      bp_shlib_event breakpoint, so if we put it off, we'll never get
1387      around to it.
1388
1389      So: disable breakpoints only if we're using ELF shared libs.  */
1390   if (exec_bfd != NULL
1391       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
1392     disable_breakpoints_in_shlibs (1);
1393
1394   while (so_list_head)
1395     {
1396       if (so_list_head->sections)
1397         {
1398           free ((PTR) so_list_head->sections);
1399         }
1400       if (so_list_head->abfd)
1401         {
1402           bfd_filename = bfd_get_filename (so_list_head->abfd);
1403           if (!bfd_close (so_list_head->abfd))
1404             warning ("cannot close \"%s\": %s",
1405                      bfd_filename, bfd_errmsg (bfd_get_error ()));
1406         }
1407       else
1408         /* This happens for the executable on SVR4.  */
1409         bfd_filename = NULL;
1410
1411       next = so_list_head->next;
1412       if (bfd_filename)
1413         free ((PTR) bfd_filename);
1414       free ((PTR) so_list_head);
1415       so_list_head = next;
1416     }
1417   debug_base = 0;
1418 }
1419
1420 static void
1421 do_clear_solib (dummy)
1422      PTR dummy;
1423 {
1424   solib_cleanup_queued = 0;
1425   clear_solib ();
1426 }
1427
1428 #ifdef SVR4_SHARED_LIBS
1429
1430 /* Return 1 if PC lies in the dynamic symbol resolution code of the
1431    SVR4 run time loader.  */
1432
1433 static CORE_ADDR interp_text_sect_low;
1434 static CORE_ADDR interp_text_sect_high;
1435 static CORE_ADDR interp_plt_sect_low;
1436 static CORE_ADDR interp_plt_sect_high;
1437
1438 int
1439 in_svr4_dynsym_resolve_code (pc)
1440      CORE_ADDR pc;
1441 {
1442   return ((pc >= interp_text_sect_low && pc < interp_text_sect_high)
1443           || (pc >= interp_plt_sect_low && pc < interp_plt_sect_high)
1444           || in_plt_section (pc, NULL));
1445 }
1446 #endif
1447
1448 /*
1449
1450    LOCAL FUNCTION
1451
1452    disable_break -- remove the "mapping changed" breakpoint
1453
1454    SYNOPSIS
1455
1456    static int disable_break ()
1457
1458    DESCRIPTION
1459
1460    Removes the breakpoint that gets hit when the dynamic linker
1461    completes a mapping change.
1462
1463  */
1464
1465 #ifndef SVR4_SHARED_LIBS
1466
1467 static int
1468 disable_break ()
1469 {
1470   int status = 1;
1471
1472 #ifndef SVR4_SHARED_LIBS
1473
1474   int in_debugger = 0;
1475
1476   /* Read the debugger structure from the inferior to retrieve the
1477      address of the breakpoint and the original contents of the
1478      breakpoint address.  Remove the breakpoint by writing the original
1479      contents back. */
1480
1481   read_memory (debug_addr, (char *) &debug_copy, sizeof (debug_copy));
1482
1483   /* Set `in_debugger' to zero now. */
1484
1485   write_memory (flag_addr, (char *) &in_debugger, sizeof (in_debugger));
1486
1487   breakpoint_addr = (CORE_ADDR) debug_copy.ldd_bp_addr;
1488   write_memory (breakpoint_addr, (char *) &debug_copy.ldd_bp_inst,
1489                 sizeof (debug_copy.ldd_bp_inst));
1490
1491 #else /* SVR4_SHARED_LIBS */
1492
1493   /* Note that breakpoint address and original contents are in our address
1494      space, so we just need to write the original contents back. */
1495
1496   if (memory_remove_breakpoint (breakpoint_addr, shadow_contents) != 0)
1497     {
1498       status = 0;
1499     }
1500
1501 #endif /* !SVR4_SHARED_LIBS */
1502
1503   /* For the SVR4 version, we always know the breakpoint address.  For the
1504      SunOS version we don't know it until the above code is executed.
1505      Grumble if we are stopped anywhere besides the breakpoint address. */
1506
1507   if (stop_pc != breakpoint_addr)
1508     {
1509       warning ("stopped at unknown breakpoint while handling shared libraries");
1510     }
1511
1512   return (status);
1513 }
1514
1515 #endif /* #ifdef SVR4_SHARED_LIBS */
1516
1517 /*
1518
1519    LOCAL FUNCTION
1520
1521    enable_break -- arrange for dynamic linker to hit breakpoint
1522
1523    SYNOPSIS
1524
1525    int enable_break (void)
1526
1527    DESCRIPTION
1528
1529    Both the SunOS and the SVR4 dynamic linkers have, as part of their
1530    debugger interface, support for arranging for the inferior to hit
1531    a breakpoint after mapping in the shared libraries.  This function
1532    enables that breakpoint.
1533
1534    For SunOS, there is a special flag location (in_debugger) which we
1535    set to 1.  When the dynamic linker sees this flag set, it will set
1536    a breakpoint at a location known only to itself, after saving the
1537    original contents of that place and the breakpoint address itself,
1538    in it's own internal structures.  When we resume the inferior, it
1539    will eventually take a SIGTRAP when it runs into the breakpoint.
1540    We handle this (in a different place) by restoring the contents of
1541    the breakpointed location (which is only known after it stops),
1542    chasing around to locate the shared libraries that have been
1543    loaded, then resuming.
1544
1545    For SVR4, the debugger interface structure contains a member (r_brk)
1546    which is statically initialized at the time the shared library is
1547    built, to the offset of a function (_r_debug_state) which is guaran-
1548    teed to be called once before mapping in a library, and again when
1549    the mapping is complete.  At the time we are examining this member,
1550    it contains only the unrelocated offset of the function, so we have
1551    to do our own relocation.  Later, when the dynamic linker actually
1552    runs, it relocates r_brk to be the actual address of _r_debug_state().
1553
1554    The debugger interface structure also contains an enumeration which
1555    is set to either RT_ADD or RT_DELETE prior to changing the mapping,
1556    depending upon whether or not the library is being mapped or unmapped,
1557    and then set to RT_CONSISTENT after the library is mapped/unmapped.
1558  */
1559
1560 static int
1561 enable_break ()
1562 {
1563   int success = 0;
1564
1565 #ifndef SVR4_SHARED_LIBS
1566
1567   int j;
1568   int in_debugger;
1569
1570   /* Get link_dynamic structure */
1571
1572   j = target_read_memory (debug_base, (char *) &dynamic_copy,
1573                           sizeof (dynamic_copy));
1574   if (j)
1575     {
1576       /* unreadable */
1577       return (0);
1578     }
1579
1580   /* Calc address of debugger interface structure */
1581
1582   debug_addr = (CORE_ADDR) dynamic_copy.ldd;
1583
1584   /* Calc address of `in_debugger' member of debugger interface structure */
1585
1586   flag_addr = debug_addr + (CORE_ADDR) ((char *) &debug_copy.ldd_in_debugger -
1587                                         (char *) &debug_copy);
1588
1589   /* Write a value of 1 to this member.  */
1590
1591   in_debugger = 1;
1592   write_memory (flag_addr, (char *) &in_debugger, sizeof (in_debugger));
1593   success = 1;
1594
1595 #else /* SVR4_SHARED_LIBS */
1596
1597 #ifdef BKPT_AT_SYMBOL
1598
1599   struct minimal_symbol *msymbol;
1600   char **bkpt_namep;
1601   asection *interp_sect;
1602
1603   /* First, remove all the solib event breakpoints.  Their addresses
1604      may have changed since the last time we ran the program.  */
1605   remove_solib_event_breakpoints ();
1606
1607 #ifdef SVR4_SHARED_LIBS
1608   interp_text_sect_low = interp_text_sect_high = 0;
1609   interp_plt_sect_low = interp_plt_sect_high = 0;
1610
1611   /* Find the .interp section; if not found, warn the user and drop
1612      into the old breakpoint at symbol code.  */
1613   interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
1614   if (interp_sect)
1615     {
1616       unsigned int interp_sect_size;
1617       char *buf;
1618       CORE_ADDR load_addr;
1619       bfd *tmp_bfd;
1620       CORE_ADDR sym_addr = 0;
1621
1622       /* Read the contents of the .interp section into a local buffer;
1623          the contents specify the dynamic linker this program uses.  */
1624       interp_sect_size = bfd_section_size (exec_bfd, interp_sect);
1625       buf = alloca (interp_sect_size);
1626       bfd_get_section_contents (exec_bfd, interp_sect,
1627                                 buf, 0, interp_sect_size);
1628
1629       /* Now we need to figure out where the dynamic linker was
1630          loaded so that we can load its symbols and place a breakpoint
1631          in the dynamic linker itself.
1632
1633          This address is stored on the stack.  However, I've been unable
1634          to find any magic formula to find it for Solaris (appears to
1635          be trivial on GNU/Linux).  Therefore, we have to try an alternate
1636          mechanism to find the dynamic linker's base address.  */
1637       tmp_bfd = bfd_openr (buf, gnutarget);
1638       if (tmp_bfd == NULL)
1639         goto bkpt_at_symbol;
1640
1641       /* Make sure the dynamic linker's really a useful object.  */
1642       if (!bfd_check_format (tmp_bfd, bfd_object))
1643         {
1644           warning ("Unable to grok dynamic linker %s as an object file", buf);
1645           bfd_close (tmp_bfd);
1646           goto bkpt_at_symbol;
1647         }
1648
1649       /* We find the dynamic linker's base address by examining the
1650          current pc (which point at the entry point for the dynamic
1651          linker) and subtracting the offset of the entry point.  */
1652       load_addr = read_pc () - tmp_bfd->start_address;
1653
1654       /* Record the relocated start and end address of the dynamic linker
1655          text and plt section for in_svr4_dynsym_resolve_code.  */
1656       interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
1657       if (interp_sect)
1658         {
1659           interp_text_sect_low =
1660             bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1661           interp_text_sect_high =
1662             interp_text_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1663         }
1664       interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt");
1665       if (interp_sect)
1666         {
1667           interp_plt_sect_low =
1668             bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1669           interp_plt_sect_high =
1670             interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1671         }
1672
1673       /* Now try to set a breakpoint in the dynamic linker.  */
1674       for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
1675         {
1676           sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep);
1677           if (sym_addr != 0)
1678             break;
1679         }
1680
1681       /* We're done with the temporary bfd.  */
1682       bfd_close (tmp_bfd);
1683
1684       if (sym_addr != 0)
1685         {
1686           create_solib_event_breakpoint (load_addr + sym_addr);
1687           return 1;
1688         }
1689
1690       /* For whatever reason we couldn't set a breakpoint in the dynamic
1691          linker.  Warn and drop into the old code.  */
1692     bkpt_at_symbol:
1693       warning ("Unable to find dynamic linker breakpoint function.\nGDB will be unable to debug shared library initializers\nand track explicitly loaded dynamic code.");
1694     }
1695 #endif
1696
1697   /* Scan through the list of symbols, trying to look up the symbol and
1698      set a breakpoint there.  Terminate loop when we/if we succeed. */
1699
1700   breakpoint_addr = 0;
1701   for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
1702     {
1703       msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
1704       if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
1705         {
1706           create_solib_event_breakpoint (SYMBOL_VALUE_ADDRESS (msymbol));
1707           return 1;
1708         }
1709     }
1710
1711   /* Nothing good happened.  */
1712   success = 0;
1713
1714 #endif /* BKPT_AT_SYMBOL */
1715
1716 #endif /* !SVR4_SHARED_LIBS */
1717
1718   return (success);
1719 }
1720
1721 /*
1722
1723    GLOBAL FUNCTION
1724
1725    solib_create_inferior_hook -- shared library startup support
1726
1727    SYNOPSIS
1728
1729    void solib_create_inferior_hook()
1730
1731    DESCRIPTION
1732
1733    When gdb starts up the inferior, it nurses it along (through the
1734    shell) until it is ready to execute it's first instruction.  At this
1735    point, this function gets called via expansion of the macro
1736    SOLIB_CREATE_INFERIOR_HOOK.
1737
1738    For SunOS executables, this first instruction is typically the
1739    one at "_start", or a similar text label, regardless of whether
1740    the executable is statically or dynamically linked.  The runtime
1741    startup code takes care of dynamically linking in any shared
1742    libraries, once gdb allows the inferior to continue.
1743
1744    For SVR4 executables, this first instruction is either the first
1745    instruction in the dynamic linker (for dynamically linked
1746    executables) or the instruction at "start" for statically linked
1747    executables.  For dynamically linked executables, the system
1748    first exec's /lib/libc.so.N, which contains the dynamic linker,
1749    and starts it running.  The dynamic linker maps in any needed
1750    shared libraries, maps in the actual user executable, and then
1751    jumps to "start" in the user executable.
1752
1753    For both SunOS shared libraries, and SVR4 shared libraries, we
1754    can arrange to cooperate with the dynamic linker to discover the
1755    names of shared libraries that are dynamically linked, and the
1756    base addresses to which they are linked.
1757
1758    This function is responsible for discovering those names and
1759    addresses, and saving sufficient information about them to allow
1760    their symbols to be read at a later time.
1761
1762    FIXME
1763
1764    Between enable_break() and disable_break(), this code does not
1765    properly handle hitting breakpoints which the user might have
1766    set in the startup code or in the dynamic linker itself.  Proper
1767    handling will probably have to wait until the implementation is
1768    changed to use the "breakpoint handler function" method.
1769
1770    Also, what if child has exit()ed?  Must exit loop somehow.
1771  */
1772
1773 void
1774 solib_create_inferior_hook ()
1775 {
1776   /* If we are using the BKPT_AT_SYMBOL code, then we don't need the base
1777      yet.  In fact, in the case of a SunOS4 executable being run on
1778      Solaris, we can't get it yet.  find_solib will get it when it needs
1779      it.  */
1780 #if !(defined (SVR4_SHARED_LIBS) && defined (BKPT_AT_SYMBOL))
1781   if ((debug_base = locate_base ()) == 0)
1782     {
1783       /* Can't find the symbol or the executable is statically linked. */
1784       return;
1785     }
1786 #endif
1787
1788   if (!enable_break ())
1789     {
1790       warning ("shared library handler failed to enable breakpoint");
1791       return;
1792     }
1793
1794 #if !defined(SVR4_SHARED_LIBS) || defined(_SCO_DS)
1795   /* SCO and SunOS need the loop below, other systems should be using the
1796      special shared library breakpoints and the shared library breakpoint
1797      service routine.
1798
1799      Now run the target.  It will eventually hit the breakpoint, at
1800      which point all of the libraries will have been mapped in and we
1801      can go groveling around in the dynamic linker structures to find
1802      out what we need to know about them. */
1803
1804   clear_proceed_status ();
1805   stop_soon_quietly = 1;
1806   stop_signal = TARGET_SIGNAL_0;
1807   do
1808     {
1809       target_resume (-1, 0, stop_signal);
1810       wait_for_inferior ();
1811     }
1812   while (stop_signal != TARGET_SIGNAL_TRAP);
1813   stop_soon_quietly = 0;
1814
1815 #if !defined(_SCO_DS)
1816   /* We are now either at the "mapping complete" breakpoint (or somewhere
1817      else, a condition we aren't prepared to deal with anyway), so adjust
1818      the PC as necessary after a breakpoint, disable the breakpoint, and
1819      add any shared libraries that were mapped in. */
1820
1821   if (DECR_PC_AFTER_BREAK)
1822     {
1823       stop_pc -= DECR_PC_AFTER_BREAK;
1824       write_register (PC_REGNUM, stop_pc);
1825     }
1826
1827   if (!disable_break ())
1828     {
1829       warning ("shared library handler failed to disable breakpoint");
1830     }
1831
1832   if (auto_solib_add)
1833     solib_add ((char *) 0, 0, (struct target_ops *) 0);
1834 #endif /* ! _SCO_DS */
1835 #endif
1836 }
1837
1838 /*
1839
1840    LOCAL FUNCTION
1841
1842    special_symbol_handling -- additional shared library symbol handling
1843
1844    SYNOPSIS
1845
1846    void special_symbol_handling (struct so_list *so)
1847
1848    DESCRIPTION
1849
1850    Once the symbols from a shared object have been loaded in the usual
1851    way, we are called to do any system specific symbol handling that 
1852    is needed.
1853
1854    For SunOS4, this consists of grunging around in the dynamic
1855    linkers structures to find symbol definitions for "common" symbols
1856    and adding them to the minimal symbol table for the runtime common
1857    objfile.
1858
1859  */
1860
1861 static void
1862 special_symbol_handling (so)
1863      struct so_list *so;
1864 {
1865 #ifndef SVR4_SHARED_LIBS
1866   int j;
1867
1868   if (debug_addr == 0)
1869     {
1870       /* Get link_dynamic structure */
1871
1872       j = target_read_memory (debug_base, (char *) &dynamic_copy,
1873                               sizeof (dynamic_copy));
1874       if (j)
1875         {
1876           /* unreadable */
1877           return;
1878         }
1879
1880       /* Calc address of debugger interface structure */
1881       /* FIXME, this needs work for cross-debugging of core files
1882          (byteorder, size, alignment, etc).  */
1883
1884       debug_addr = (CORE_ADDR) dynamic_copy.ldd;
1885     }
1886
1887   /* Read the debugger structure from the inferior, just to make sure
1888      we have a current copy. */
1889
1890   j = target_read_memory (debug_addr, (char *) &debug_copy,
1891                           sizeof (debug_copy));
1892   if (j)
1893     return;                     /* unreadable */
1894
1895   /* Get common symbol definitions for the loaded object. */
1896
1897   if (debug_copy.ldd_cp)
1898     {
1899       solib_add_common_symbols (debug_copy.ldd_cp);
1900     }
1901
1902 #endif /* !SVR4_SHARED_LIBS */
1903 }
1904
1905
1906 /*
1907
1908    LOCAL FUNCTION
1909
1910    sharedlibrary_command -- handle command to explicitly add library
1911
1912    SYNOPSIS
1913
1914    static void sharedlibrary_command (char *args, int from_tty)
1915
1916    DESCRIPTION
1917
1918  */
1919
1920 static void
1921 sharedlibrary_command (args, from_tty)
1922      char *args;
1923      int from_tty;
1924 {
1925   dont_repeat ();
1926   solib_add (args, from_tty, (struct target_ops *) 0);
1927 }
1928
1929 #endif /* HAVE_LINK_H */
1930
1931 void
1932 _initialize_solib ()
1933 {
1934 #ifdef HAVE_LINK_H
1935
1936   add_com ("sharedlibrary", class_files, sharedlibrary_command,
1937            "Load shared object library symbols for files matching REGEXP.");
1938   add_info ("sharedlibrary", info_sharedlibrary_command,
1939             "Status of loaded shared object libraries.");
1940
1941   add_show_from_set
1942     (add_set_cmd ("auto-solib-add", class_support, var_zinteger,
1943                   (char *) &auto_solib_add,
1944                   "Set autoloading of shared library symbols.\n\
1945 If nonzero, symbols from all shared object libraries will be loaded\n\
1946 automatically when the inferior begins execution or when the dynamic linker\n\
1947 informs gdb that a new library has been loaded.  Otherwise, symbols\n\
1948 must be loaded manually, using `sharedlibrary'.",
1949                   &setlist),
1950      &showlist);
1951
1952   add_show_from_set
1953     (add_set_cmd ("solib-absolute-prefix", class_support, var_filename,
1954                   (char *) &solib_absolute_prefix,
1955                   "Set prefix for loading absolute shared library symbol files.\n\
1956 For other (relative) files, you can add values using `set solib-search-path'.",
1957                   &setlist),
1958      &showlist);
1959   add_show_from_set
1960     (add_set_cmd ("solib-search-path", class_support, var_string,
1961                   (char *) &solib_search_path,
1962                   "Set the search path for loading non-absolute shared library symbol files.\n\
1963 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.",
1964                   &setlist),
1965      &showlist);
1966
1967 #endif /* HAVE_LINK_H */
1968 }