* alpha-nat.c, irix4-nat.c, irix5-nat.c, mipsv4-nat.c,
[external/binutils.git] / gdb / irix5-nat.c
1 /* Native support for the SGI Iris running IRIX version 5, for GDB.
2    Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995
3    Free Software Foundation, Inc.
4    Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
5    and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
6    Implemented for Irix 4.x by Garrett A. Wollman.
7    Modified for Irix 5.x by Ian Lance Taylor.
8
9 This file is part of GDB.
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
24
25 #include "defs.h"
26 #include "inferior.h"
27 #include "gdbcore.h"
28 #include "target.h"
29
30 #include <string.h>
31 #include <sys/time.h>
32 #include <sys/procfs.h>
33 #include <setjmp.h>             /* For JB_XXX.  */
34
35 /* Size of elements in jmpbuf */
36
37 #define JB_ELEMENT_SIZE 4
38
39 /*
40  * See the comment in m68k-tdep.c regarding the utility of these functions.
41  *
42  * These definitions are from the MIPS SVR4 ABI, so they may work for
43  * any MIPS SVR4 target.
44  */
45
46 void 
47 supply_gregset (gregsetp)
48      gregset_t *gregsetp;
49 {
50   register int regi;
51   register greg_t *regp = &(*gregsetp)[0];
52   static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
53
54   for(regi = 0; regi <= CTX_RA; regi++)
55     supply_register (regi, (char *)(regp + regi));
56
57   supply_register (PC_REGNUM, (char *)(regp + CTX_EPC));
58   supply_register (HI_REGNUM, (char *)(regp + CTX_MDHI));
59   supply_register (LO_REGNUM, (char *)(regp + CTX_MDLO));
60   supply_register (CAUSE_REGNUM, (char *)(regp + CTX_CAUSE));
61
62   /* Fill inaccessible registers with zero.  */
63   supply_register (BADVADDR_REGNUM, zerobuf);
64 }
65
66 void
67 fill_gregset (gregsetp, regno)
68      gregset_t *gregsetp;
69      int regno;
70 {
71   int regi;
72   register greg_t *regp = &(*gregsetp)[0];
73
74   for (regi = 0; regi <= CTX_RA; regi++)
75     if ((regno == -1) || (regno == regi))
76       *(regp + regi) = *(greg_t *) &registers[REGISTER_BYTE (regi)];
77
78   if ((regno == -1) || (regno == PC_REGNUM))
79     *(regp + CTX_EPC) = *(greg_t *) &registers[REGISTER_BYTE (PC_REGNUM)];
80
81   if ((regno == -1) || (regno == CAUSE_REGNUM))
82     *(regp + CTX_CAUSE) = *(greg_t *) &registers[REGISTER_BYTE (CAUSE_REGNUM)];
83
84   if ((regno == -1) || (regno == HI_REGNUM))
85     *(regp + CTX_MDHI) = *(greg_t *) &registers[REGISTER_BYTE (HI_REGNUM)];
86
87   if ((regno == -1) || (regno == LO_REGNUM))
88     *(regp + CTX_MDLO) = *(greg_t *) &registers[REGISTER_BYTE (LO_REGNUM)];
89 }
90
91 /*
92  * Now we do the same thing for floating-point registers.
93  * We don't bother to condition on FP0_REGNUM since any
94  * reasonable MIPS configuration has an R3010 in it.
95  *
96  * Again, see the comments in m68k-tdep.c.
97  */
98
99 void
100 supply_fpregset (fpregsetp)
101      fpregset_t *fpregsetp;
102 {
103   register int regi;
104   static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
105
106   for (regi = 0; regi < 32; regi++)
107     supply_register (FP0_REGNUM + regi,
108                      (char *)&fpregsetp->fp_r.fp_regs[regi]);
109
110   supply_register (FCRCS_REGNUM, (char *)&fpregsetp->fp_csr);
111
112   /* FIXME: how can we supply FCRIR_REGNUM?  SGI doesn't tell us. */
113   supply_register (FCRIR_REGNUM, zerobuf);
114 }
115
116 void
117 fill_fpregset (fpregsetp, regno)
118      fpregset_t *fpregsetp;
119      int regno;
120 {
121   int regi;
122   char *from, *to;
123
124   for (regi = FP0_REGNUM; regi < FP0_REGNUM + 32; regi++)
125     {
126       if ((regno == -1) || (regno == regi))
127         {
128           from = (char *) &registers[REGISTER_BYTE (regi)];
129           to = (char *) &(fpregsetp->fp_r.fp_regs[regi - FP0_REGNUM]);
130           memcpy(to, from, REGISTER_RAW_SIZE (regi));
131         }
132     }
133
134   if ((regno == -1) || (regno == FCRCS_REGNUM))
135     fpregsetp->fp_csr = *(unsigned *) &registers[REGISTER_BYTE(FCRCS_REGNUM)];
136 }
137
138
139 /* Figure out where the longjmp will land.
140    We expect the first arg to be a pointer to the jmp_buf structure from which
141    we extract the pc (JB_PC) that we will land at.  The pc is copied into PC.
142    This routine returns true on success. */
143
144 int
145 get_longjmp_target (pc)
146      CORE_ADDR *pc;
147 {
148   char buf[TARGET_PTR_BIT / TARGET_CHAR_BIT];
149   CORE_ADDR jb_addr;
150
151   jb_addr = read_register (A0_REGNUM);
152
153   if (target_read_memory (jb_addr + JB_PC * JB_ELEMENT_SIZE, buf,
154                           TARGET_PTR_BIT / TARGET_CHAR_BIT))
155     return 0;
156
157   *pc = extract_address (buf, TARGET_PTR_BIT / TARGET_CHAR_BIT);
158
159   return 1;
160 }
161
162 void
163 fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
164      char *core_reg_sect;
165      unsigned core_reg_size;
166      int which;                 /* Unused */
167      unsigned int reg_addr;     /* Unused */
168 {
169   if (core_reg_size != REGISTER_BYTES)
170     {
171       warning ("wrong size gregset struct in core file");
172       return;
173     }
174
175   memcpy ((char *)registers, core_reg_sect, core_reg_size);
176 }
177 \f
178 /* Irix 5 uses what appears to be a unique form of shared library
179    support.  This is a copy of solib.c modified for Irix 5.  */
180
181 #include <sys/types.h>
182 #include <signal.h>
183 #include <sys/param.h>
184 #include <fcntl.h>
185
186 /* <obj.h> includes <sym.h> and <symconst.h>, which causes conflicts
187    with our versions of those files included by tm-mips.h.  Prevent
188    <obj.h> from including them with some appropriate defines.  */
189 #define __SYM_H__
190 #define __SYMCONST_H__
191 #include <obj.h>
192
193 #include "symtab.h"
194 #include "bfd.h"
195 #include "symfile.h"
196 #include "objfiles.h"
197 #include "command.h"
198 #include "frame.h"
199 #include "regex.h"
200 #include "inferior.h"
201 #include "language.h"
202
203 /* The symbol which starts off the list of shared libraries.  */
204 #define DEBUG_BASE "__rld_obj_head"
205
206 /* How to get the loaded address of a shared library.  */
207 #define LM_ADDR(so) ((so)->lm.o_praw)
208
209 char shadow_contents[BREAKPOINT_MAX];   /* Stash old bkpt addr contents */
210
211 struct so_list {
212   struct so_list *next;                 /* next structure in linked list */
213   struct obj_list ll;
214   struct obj lm;                        /* copy of link map from inferior */
215   struct obj_list *lladdr;              /* addr in inferior lm was read from */
216   CORE_ADDR lmend;                      /* upper addr bound of mapped object */
217   char symbols_loaded;                  /* flag: symbols read in yet? */
218   char from_tty;                        /* flag: print msgs? */
219   struct objfile *objfile;              /* objfile for loaded lib */
220   struct section_table *sections;
221   struct section_table *sections_end;
222   struct section_table *textsection;
223   bfd *abfd;
224 };
225
226 static struct so_list *so_list_head;    /* List of known shared objects */
227 static CORE_ADDR debug_base;            /* Base of dynamic linker structures */
228 static CORE_ADDR breakpoint_addr;       /* Address where end bkpt is set */
229
230 /* Local function prototypes */
231
232 static void
233 sharedlibrary_command PARAMS ((char *, int));
234
235 static int
236 enable_break PARAMS ((void));
237
238 static int
239 disable_break PARAMS ((void));
240
241 static void
242 info_sharedlibrary_command PARAMS ((char *, int));
243
244 static int
245 symbol_add_stub PARAMS ((char *));
246
247 static struct so_list *
248 find_solib PARAMS ((struct so_list *));
249
250 static struct obj_list *
251 first_link_map_member PARAMS ((void));
252
253 static CORE_ADDR
254 locate_base PARAMS ((void));
255
256 static void
257 solib_map_sections PARAMS ((struct so_list *));
258
259 /*
260
261 LOCAL FUNCTION
262
263         solib_map_sections -- open bfd and build sections for shared lib
264
265 SYNOPSIS
266
267         static void solib_map_sections (struct so_list *so)
268
269 DESCRIPTION
270
271         Given a pointer to one of the shared objects in our list
272         of mapped objects, use the recorded name to open a bfd
273         descriptor for the object, build a section table, and then
274         relocate all the section addresses by the base address at
275         which the shared object was mapped.
276
277 FIXMES
278
279         In most (all?) cases the shared object file name recorded in the
280         dynamic linkage tables will be a fully qualified pathname.  For
281         cases where it isn't, do we really mimic the systems search
282         mechanism correctly in the below code (particularly the tilde
283         expansion stuff?).
284  */
285
286 static void
287 solib_map_sections (so)
288      struct so_list *so;
289 {
290   char *filename;
291   char *scratch_pathname;
292   int scratch_chan;
293   struct section_table *p;
294   struct cleanup *old_chain;
295   bfd *abfd;
296   CORE_ADDR offset;
297   
298   filename = tilde_expand (so -> lm.o_path);
299   old_chain = make_cleanup (free, filename);
300   
301   scratch_chan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0,
302                         &scratch_pathname);
303   if (scratch_chan < 0)
304     {
305       scratch_chan = openp (getenv ("LD_LIBRARY_PATH"), 1, filename,
306                             O_RDONLY, 0, &scratch_pathname);
307     }
308   if (scratch_chan < 0)
309     {
310       perror_with_name (filename);
311     }
312   /* Leave scratch_pathname allocated.  abfd->name will point to it.  */
313
314   abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
315   if (!abfd)
316     {
317       close (scratch_chan);
318       error ("Could not open `%s' as an executable file: %s",
319              scratch_pathname, bfd_errmsg (bfd_get_error ()));
320     }
321   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
322   so -> abfd = abfd;
323   abfd -> cacheable = true;
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 (exec_bfd), bfd_errmsg (bfd_get_error ()));
334     }
335
336   /* Irix 5 shared objects are pre-linked to particular addresses
337      although the dynamic linker may have to relocate them if the
338      address ranges of the libraries used by the main program clash.
339      The offset is the difference between the address where the object
340      is mapped and the binding address of the shared library.  */
341   offset = (CORE_ADDR) LM_ADDR (so) - so -> lm.o_base_address;
342
343   for (p = so -> sections; p < so -> sections_end; p++)
344     {
345       /* Relocate the section binding addresses as recorded in the shared
346          object's file by the offset to get the address to which the
347          object was actually mapped.  */
348       p -> addr += offset;
349       p -> endaddr += offset;
350       so -> lmend = (CORE_ADDR) max (p -> endaddr, so -> lmend);
351       if (STREQ (p -> the_bfd_section -> name, ".text"))
352         {
353           so -> textsection = p;
354         }
355     }
356
357   /* Free the file names, close the file now.  */
358   do_cleanups (old_chain);
359 }
360
361 /*
362
363 LOCAL FUNCTION
364
365         locate_base -- locate the base address of dynamic linker structs
366
367 SYNOPSIS
368
369         CORE_ADDR locate_base (void)
370
371 DESCRIPTION
372
373         For both the SunOS and SVR4 shared library implementations, if the
374         inferior executable has been linked dynamically, there is a single
375         address somewhere in the inferior's data space which is the key to
376         locating all of the dynamic linker's runtime structures.  This
377         address is the value of the symbol defined by the macro DEBUG_BASE.
378         The job of this function is to find and return that address, or to
379         return 0 if there is no such address (the executable is statically
380         linked for example).
381
382         For SunOS, the job is almost trivial, since the dynamic linker and
383         all of it's structures are statically linked to the executable at
384         link time.  Thus the symbol for the address we are looking for has
385         already been added to the minimal symbol table for the executable's
386         objfile at the time the symbol file's symbols were read, and all we
387         have to do is look it up there.  Note that we explicitly do NOT want
388         to find the copies in the shared library.
389
390         The SVR4 version is much more complicated because the dynamic linker
391         and it's structures are located in the shared C library, which gets
392         run as the executable's "interpreter" by the kernel.  We have to go
393         to a lot more work to discover the address of DEBUG_BASE.  Because
394         of this complexity, we cache the value we find and return that value
395         on subsequent invocations.  Note there is no copy in the executable
396         symbol tables.
397
398         Irix 5 is basically like SunOS.
399
400         Note that we can assume nothing about the process state at the time
401         we need to find this address.  We may be stopped on the first instruc-
402         tion of the interpreter (C shared library), the first instruction of
403         the executable itself, or somewhere else entirely (if we attached
404         to the process for example).
405
406  */
407
408 static CORE_ADDR
409 locate_base ()
410 {
411   struct minimal_symbol *msymbol;
412   CORE_ADDR address = 0;
413
414   msymbol = lookup_minimal_symbol (DEBUG_BASE, NULL, symfile_objfile);
415   if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
416     {
417       address = SYMBOL_VALUE_ADDRESS (msymbol);
418     }
419   return (address);
420 }
421
422 /*
423
424 LOCAL FUNCTION
425
426         first_link_map_member -- locate first member in dynamic linker's map
427
428 SYNOPSIS
429
430         static struct link_map *first_link_map_member (void)
431
432 DESCRIPTION
433
434         Read in a copy of the first member in the inferior's dynamic
435         link map from the inferior's dynamic linker structures, and return
436         a pointer to the copy in our address space.
437 */
438
439 static struct obj_list *
440 first_link_map_member ()
441 {
442   struct obj_list *lm;
443   struct obj_list s;
444
445   read_memory (debug_base, (char *) &lm, sizeof (struct obj_list *));
446
447   if (lm == NULL)
448     return NULL;
449
450   /* The first entry in the list is the object file we are debugging,
451      so skip it.  */
452   read_memory ((CORE_ADDR) lm, (char *) &s, sizeof (struct obj_list));
453
454   return s.next;
455 }
456
457 /*
458
459 LOCAL FUNCTION
460
461         find_solib -- step through list of shared objects
462
463 SYNOPSIS
464
465         struct so_list *find_solib (struct so_list *so_list_ptr)
466
467 DESCRIPTION
468
469         This module contains the routine which finds the names of any
470         loaded "images" in the current process. The argument in must be
471         NULL on the first call, and then the returned value must be passed
472         in on subsequent calls. This provides the capability to "step" down
473         the list of loaded objects. On the last object, a NULL value is
474         returned.
475  */
476
477 static struct so_list *
478 find_solib (so_list_ptr)
479      struct so_list *so_list_ptr;       /* Last lm or NULL for first one */
480 {
481   struct so_list *so_list_next = NULL;
482   struct obj_list *lm = NULL;
483   struct so_list *new;
484   
485   if (so_list_ptr == NULL)
486     {
487       /* We are setting up for a new scan through the loaded images. */
488       if ((so_list_next = so_list_head) == NULL)
489         {
490           /* We have not already read in the dynamic linking structures
491              from the inferior, lookup the address of the base structure. */
492           debug_base = locate_base ();
493           if (debug_base != 0)
494             {
495               /* Read the base structure in and find the address of the first
496                  link map list member. */
497               lm = first_link_map_member ();
498             }
499         }
500     }
501   else
502     {
503       /* We have been called before, and are in the process of walking
504          the shared library list.  Advance to the next shared object. */
505       if ((lm = so_list_ptr->ll.next) == NULL)
506         {
507           /* We have hit the end of the list, so check to see if any were
508              added, but be quiet if we can't read from the target any more. */
509           int status = target_read_memory ((CORE_ADDR) so_list_ptr -> lladdr,
510                                            (char *) &(so_list_ptr -> ll),
511                                            sizeof (struct obj_list));
512           if (status == 0)
513             {
514               lm = so_list_ptr->ll.next;
515             }
516           else
517             {
518               lm = NULL;
519             }
520         }
521       so_list_next = so_list_ptr -> next;
522     }
523   if ((so_list_next == NULL) && (lm != NULL))
524     {
525       int errcode;
526       char *buffer;
527
528       /* Get next link map structure from inferior image and build a local
529          abbreviated load_map structure */
530       new = (struct so_list *) xmalloc (sizeof (struct so_list));
531       memset ((char *) new, 0, sizeof (struct so_list));
532       new -> lladdr = lm;
533       /* Add the new node as the next node in the list, or as the root
534          node if this is the first one. */
535       if (so_list_ptr != NULL)
536         {
537           so_list_ptr -> next = new;
538         }
539       else
540         {
541           so_list_head = new;
542         }      
543       so_list_next = new;
544       read_memory ((CORE_ADDR) lm, (char *) &(new -> ll),
545                    sizeof (struct obj_list));
546       read_memory ((CORE_ADDR) new->ll.data, (char *) &(new -> lm),
547                    sizeof (struct obj));
548       target_read_string ((CORE_ADDR)new->lm.o_path, &buffer,
549                           INT_MAX, &errcode);
550       if (errcode != 0)
551         memory_error (errcode, (CORE_ADDR)new->lm.o_path);
552       new->lm.o_path = buffer;
553       solib_map_sections (new);
554     }
555   return (so_list_next);
556 }
557
558 /* A small stub to get us past the arg-passing pinhole of catch_errors.  */
559
560 static int
561 symbol_add_stub (arg)
562      char *arg;
563 {
564   register struct so_list *so = (struct so_list *) arg; /* catch_errs bogon */
565   
566   so -> objfile = symbol_file_add (so -> lm.o_path, so -> from_tty,
567                                    (unsigned int) so -> textsection -> addr,
568                                    0, 0, 0);
569   return (1);
570 }
571
572 /*
573
574 GLOBAL FUNCTION
575
576         solib_add -- add a shared library file to the symtab and section list
577
578 SYNOPSIS
579
580         void solib_add (char *arg_string, int from_tty,
581                         struct target_ops *target)
582
583 DESCRIPTION
584
585 */
586
587 void
588 solib_add (arg_string, from_tty, target)
589      char *arg_string;
590      int from_tty;
591      struct target_ops *target;
592 {       
593   register struct so_list *so = NULL;           /* link map state variable */
594
595   /* Last shared library that we read.  */
596   struct so_list *so_last = NULL;
597
598   char *re_err;
599   int count;
600   int old;
601   
602   if ((re_err = re_comp (arg_string ? arg_string : ".")) != NULL)
603     {
604       error ("Invalid regexp: %s", re_err);
605     }
606   
607   /* Add the shared library sections to the section table of the
608      specified target, if any.  */
609   if (target)
610     {
611       /* Count how many new section_table entries there are.  */
612       so = NULL;
613       count = 0;
614       while ((so = find_solib (so)) != NULL)
615         {
616           if (so -> lm.o_path[0])
617             {
618               count += so -> sections_end - so -> sections;
619             }
620         }
621       
622       if (count)
623         {
624           /* Reallocate the target's section table including the new size.  */
625           if (target -> to_sections)
626             {
627               old = target -> to_sections_end - target -> to_sections;
628               target -> to_sections = (struct section_table *)
629                 xrealloc ((char *)target -> to_sections,
630                          (sizeof (struct section_table)) * (count + old));
631             }
632           else
633             {
634               old = 0;
635               target -> to_sections = (struct section_table *)
636                 xmalloc ((sizeof (struct section_table)) * count);
637             }
638           target -> to_sections_end = target -> to_sections + (count + old);
639           
640           /* Add these section table entries to the target's table.  */
641           while ((so = find_solib (so)) != NULL)
642             {
643               if (so -> lm.o_path[0])
644                 {
645                   count = so -> sections_end - so -> sections;
646                   memcpy ((char *) (target -> to_sections + old),
647                           so -> sections, 
648                           (sizeof (struct section_table)) * count);
649                   old += count;
650                 }
651             }
652         }
653     }
654   
655   /* Now add the symbol files.  */
656   while ((so = find_solib (so)) != NULL)
657     {
658       if (so -> lm.o_path[0] && re_exec (so -> lm.o_path))
659         {
660           so -> from_tty = from_tty;
661           if (so -> symbols_loaded)
662             {
663               if (from_tty)
664                 {
665                   printf_unfiltered ("Symbols already loaded for %s\n", so -> lm.o_path);
666                 }
667             }
668           else if (catch_errors
669                    (symbol_add_stub, (char *) so,
670                     "Error while reading shared library symbols:\n",
671                     RETURN_MASK_ALL))
672             {
673               so_last = so;
674               so -> symbols_loaded = 1;
675             }
676         }
677     }
678
679   /* Getting new symbols may change our opinion about what is
680      frameless.  */
681   if (so_last)
682     reinit_frame_cache ();
683 }
684
685 /*
686
687 LOCAL FUNCTION
688
689         info_sharedlibrary_command -- code for "info sharedlibrary"
690
691 SYNOPSIS
692
693         static void info_sharedlibrary_command ()
694
695 DESCRIPTION
696
697         Walk through the shared library list and print information
698         about each attached library.
699 */
700
701 static void
702 info_sharedlibrary_command (ignore, from_tty)
703      char *ignore;
704      int from_tty;
705 {
706   register struct so_list *so = NULL;   /* link map state variable */
707   int header_done = 0;
708   
709   if (exec_bfd == NULL)
710     {
711       printf_unfiltered ("No exec file.\n");
712       return;
713     }
714   while ((so = find_solib (so)) != NULL)
715     {
716       if (so -> lm.o_path[0])
717         {
718           if (!header_done)
719             {
720               printf_unfiltered("%-12s%-12s%-12s%s\n", "From", "To", "Syms Read",
721                      "Shared Object Library");
722               header_done++;
723             }
724           printf_unfiltered ("%-12s",
725                   local_hex_string_custom ((unsigned long) LM_ADDR (so),
726                                            "08l"));
727           printf_unfiltered ("%-12s",
728                   local_hex_string_custom ((unsigned long) so -> lmend,
729                                            "08l"));
730           printf_unfiltered ("%-12s", so -> symbols_loaded ? "Yes" : "No");
731           printf_unfiltered ("%s\n",  so -> lm.o_path);
732         }
733     }
734   if (so_list_head == NULL)
735     {
736       printf_unfiltered ("No shared libraries loaded at this time.\n"); 
737     }
738 }
739
740 /*
741
742 GLOBAL FUNCTION
743
744         solib_address -- check to see if an address is in a shared lib
745
746 SYNOPSIS
747
748         int solib_address (CORE_ADDR address)
749
750 DESCRIPTION
751
752         Provides a hook for other gdb routines to discover whether or
753         not a particular address is within the mapped address space of
754         a shared library.  Any address between the base mapping address
755         and the first address beyond the end of the last mapping, is
756         considered to be within the shared library address space, for
757         our purposes.
758
759         For example, this routine is called at one point to disable
760         breakpoints which are in shared libraries that are not currently
761         mapped in.
762  */
763
764 int
765 solib_address (address)
766      CORE_ADDR address;
767 {
768   register struct so_list *so = 0;      /* link map state variable */
769   
770   while ((so = find_solib (so)) != NULL)
771     {
772       if (so -> lm.o_path[0])
773         {
774           if ((address >= (CORE_ADDR) LM_ADDR (so)) &&
775               (address < (CORE_ADDR) so -> lmend))
776             {
777               return (1);
778             }
779         }
780     }
781   return (0);
782 }
783
784 /* Called by free_all_symtabs */
785
786 void 
787 clear_solib()
788 {
789   struct so_list *next;
790   char *bfd_filename;
791   
792   while (so_list_head)
793     {
794       if (so_list_head -> sections)
795         {
796           free ((PTR)so_list_head -> sections);
797         }
798       if (so_list_head -> abfd)
799         {
800           bfd_filename = bfd_get_filename (so_list_head -> abfd);
801           if (!bfd_close (so_list_head -> abfd))
802             warning ("cannot close \"%s\": %s",
803                      bfd_filename, bfd_errmsg (bfd_get_error ()));
804         }
805       else
806         /* This happens for the executable on SVR4.  */
807         bfd_filename = NULL;
808
809       next = so_list_head -> next;
810       if (bfd_filename)
811         free ((PTR)bfd_filename);
812       free (so_list_head->lm.o_path);
813       free ((PTR)so_list_head);
814       so_list_head = next;
815     }
816   debug_base = 0;
817 }
818
819 /*
820
821 LOCAL FUNCTION
822
823         disable_break -- remove the "mapping changed" breakpoint
824
825 SYNOPSIS
826
827         static int disable_break ()
828
829 DESCRIPTION
830
831         Removes the breakpoint that gets hit when the dynamic linker
832         completes a mapping change.
833
834 */
835
836 static int
837 disable_break ()
838 {
839   int status = 1;
840
841
842   /* Note that breakpoint address and original contents are in our address
843      space, so we just need to write the original contents back. */
844
845   if (memory_remove_breakpoint (breakpoint_addr, shadow_contents) != 0)
846     {
847       status = 0;
848     }
849
850   /* For the SVR4 version, we always know the breakpoint address.  For the
851      SunOS version we don't know it until the above code is executed.
852      Grumble if we are stopped anywhere besides the breakpoint address. */
853
854   if (stop_pc != breakpoint_addr)
855     {
856       warning ("stopped at unknown breakpoint while handling shared libraries");
857     }
858
859   return (status);
860 }
861
862 /*
863
864 LOCAL FUNCTION
865
866         enable_break -- arrange for dynamic linker to hit breakpoint
867
868 SYNOPSIS
869
870         int enable_break (void)
871
872 DESCRIPTION
873
874         This functions inserts a breakpoint at the entry point of the
875         main executable, where all shared libraries are mapped in.
876 */
877
878 static int
879 enable_break ()
880 {
881   if (symfile_objfile != NULL
882       && target_insert_breakpoint (symfile_objfile->ei.entry_point,
883                                    shadow_contents) == 0)
884     {
885       breakpoint_addr = symfile_objfile->ei.entry_point;
886       return 1;
887     }
888
889   return 0;
890 }
891   
892 /*
893   
894 GLOBAL FUNCTION
895   
896         solib_create_inferior_hook -- shared library startup support
897   
898 SYNOPSIS
899   
900         void solib_create_inferior_hook()
901   
902 DESCRIPTION
903   
904         When gdb starts up the inferior, it nurses it along (through the
905         shell) until it is ready to execute it's first instruction.  At this
906         point, this function gets called via expansion of the macro
907         SOLIB_CREATE_INFERIOR_HOOK.
908
909         For SunOS executables, this first instruction is typically the
910         one at "_start", or a similar text label, regardless of whether
911         the executable is statically or dynamically linked.  The runtime
912         startup code takes care of dynamically linking in any shared
913         libraries, once gdb allows the inferior to continue.
914
915         For SVR4 executables, this first instruction is either the first
916         instruction in the dynamic linker (for dynamically linked
917         executables) or the instruction at "start" for statically linked
918         executables.  For dynamically linked executables, the system
919         first exec's /lib/libc.so.N, which contains the dynamic linker,
920         and starts it running.  The dynamic linker maps in any needed
921         shared libraries, maps in the actual user executable, and then
922         jumps to "start" in the user executable.
923
924         For both SunOS shared libraries, and SVR4 shared libraries, we
925         can arrange to cooperate with the dynamic linker to discover the
926         names of shared libraries that are dynamically linked, and the
927         base addresses to which they are linked.
928
929         This function is responsible for discovering those names and
930         addresses, and saving sufficient information about them to allow
931         their symbols to be read at a later time.
932
933 FIXME
934
935         Between enable_break() and disable_break(), this code does not
936         properly handle hitting breakpoints which the user might have
937         set in the startup code or in the dynamic linker itself.  Proper
938         handling will probably have to wait until the implementation is
939         changed to use the "breakpoint handler function" method.
940
941         Also, what if child has exit()ed?  Must exit loop somehow.
942   */
943
944 void 
945 solib_create_inferior_hook()
946 {
947   if (!enable_break ())
948     {
949       warning ("shared library handler failed to enable breakpoint");
950       return;
951     }
952
953   /* Now run the target.  It will eventually hit the breakpoint, at
954      which point all of the libraries will have been mapped in and we
955      can go groveling around in the dynamic linker structures to find
956      out what we need to know about them. */
957
958   clear_proceed_status ();
959   stop_soon_quietly = 1;
960   stop_signal = 0;
961   do
962     {
963       target_resume (-1, 0, stop_signal);
964       wait_for_inferior ();
965     }
966   while (stop_signal != SIGTRAP);
967   
968   /* We are now either at the "mapping complete" breakpoint (or somewhere
969      else, a condition we aren't prepared to deal with anyway), so adjust
970      the PC as necessary after a breakpoint, disable the breakpoint, and
971      add any shared libraries that were mapped in. */
972
973   if (DECR_PC_AFTER_BREAK)
974     {
975       stop_pc -= DECR_PC_AFTER_BREAK;
976       write_register (PC_REGNUM, stop_pc);
977     }
978
979   if (!disable_break ())
980     {
981       warning ("shared library handler failed to disable breakpoint");
982     }
983
984   /*  solib_add will call reinit_frame_cache.
985       But we are stopped in the startup code and we might not have symbols
986       for the startup code, so heuristic_proc_start could be called
987       and will put out an annoying warning.
988       Delaying the resetting of stop_soon_quietly until after symbol loading
989       suppresses the warning.  */
990   solib_add ((char *) 0, 0, (struct target_ops *) 0);
991   stop_soon_quietly = 0;
992 }
993
994 /*
995
996 LOCAL FUNCTION
997
998         sharedlibrary_command -- handle command to explicitly add library
999
1000 SYNOPSIS
1001
1002         static void sharedlibrary_command (char *args, int from_tty)
1003
1004 DESCRIPTION
1005
1006 */
1007
1008 static void
1009 sharedlibrary_command (args, from_tty)
1010 char *args;
1011 int from_tty;
1012 {
1013   dont_repeat ();
1014   solib_add (args, from_tty, (struct target_ops *) 0);
1015 }
1016
1017 void
1018 _initialize_solib()
1019 {
1020   
1021   add_com ("sharedlibrary", class_files, sharedlibrary_command,
1022            "Load shared object library symbols for files matching REGEXP.");
1023   add_info ("sharedlibrary", info_sharedlibrary_command, 
1024             "Status of loaded shared object libraries.");
1025 }