Protoization.
[external/binutils.git] / gdb / irix5-nat.c
1 /* Native support for the SGI Iris running IRIX version 5, for GDB.
2    Copyright 1988, 89, 90, 91, 92, 93, 94, 95, 96, 98, 1999
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., 59 Temple Place - Suite 330,
24    Boston, MA 02111-1307, USA.  */
25
26 #include "defs.h"
27 #include "inferior.h"
28 #include "gdbcore.h"
29 #include "target.h"
30
31 #include "gdb_string.h"
32 #include <sys/time.h>
33 #include <sys/procfs.h>
34 #include <setjmp.h>             /* For JB_XXX.  */
35
36 /* Prototypes for supply_gregset etc. */
37 #include "gregset.h"
38
39 static void fetch_core_registers (char *, unsigned int, int, CORE_ADDR);
40
41 /* Size of elements in jmpbuf */
42
43 #define JB_ELEMENT_SIZE 4
44
45 /*
46  * See the comment in m68k-tdep.c regarding the utility of these functions.
47  *
48  * These definitions are from the MIPS SVR4 ABI, so they may work for
49  * any MIPS SVR4 target.
50  */
51
52 void
53 supply_gregset (gregset_t *gregsetp)
54 {
55   register int regi;
56   register greg_t *regp = &(*gregsetp)[0];
57   int gregoff = sizeof (greg_t) - MIPS_REGSIZE;
58   static char zerobuf[MAX_REGISTER_RAW_SIZE] =
59   {0};
60
61   for (regi = 0; regi <= CTX_RA; regi++)
62     supply_register (regi, (char *) (regp + regi) + gregoff);
63
64   supply_register (PC_REGNUM, (char *) (regp + CTX_EPC) + gregoff);
65   supply_register (HI_REGNUM, (char *) (regp + CTX_MDHI) + gregoff);
66   supply_register (LO_REGNUM, (char *) (regp + CTX_MDLO) + gregoff);
67   supply_register (CAUSE_REGNUM, (char *) (regp + CTX_CAUSE) + gregoff);
68
69   /* Fill inaccessible registers with zero.  */
70   supply_register (BADVADDR_REGNUM, zerobuf);
71 }
72
73 void
74 fill_gregset (gregset_t *gregsetp, int regno)
75 {
76   int regi;
77   register greg_t *regp = &(*gregsetp)[0];
78
79   /* Under Irix6, if GDB is built with N32 ABI and is debugging an O32
80      executable, we have to sign extend the registers to 64 bits before
81      filling in the gregset structure.  */
82
83   for (regi = 0; regi <= CTX_RA; regi++)
84     if ((regno == -1) || (regno == regi))
85       *(regp + regi) =
86         extract_signed_integer (&registers[REGISTER_BYTE (regi)],
87                                 REGISTER_RAW_SIZE (regi));
88
89   if ((regno == -1) || (regno == PC_REGNUM))
90     *(regp + CTX_EPC) =
91       extract_signed_integer (&registers[REGISTER_BYTE (PC_REGNUM)],
92                               REGISTER_RAW_SIZE (PC_REGNUM));
93
94   if ((regno == -1) || (regno == CAUSE_REGNUM))
95     *(regp + CTX_CAUSE) =
96       extract_signed_integer (&registers[REGISTER_BYTE (CAUSE_REGNUM)],
97                               REGISTER_RAW_SIZE (CAUSE_REGNUM));
98
99   if ((regno == -1) || (regno == HI_REGNUM))
100     *(regp + CTX_MDHI) =
101       extract_signed_integer (&registers[REGISTER_BYTE (HI_REGNUM)],
102                               REGISTER_RAW_SIZE (HI_REGNUM));
103
104   if ((regno == -1) || (regno == LO_REGNUM))
105     *(regp + CTX_MDLO) =
106       extract_signed_integer (&registers[REGISTER_BYTE (LO_REGNUM)],
107                               REGISTER_RAW_SIZE (LO_REGNUM));
108 }
109
110 /*
111  * Now we do the same thing for floating-point registers.
112  * We don't bother to condition on FP0_REGNUM since any
113  * reasonable MIPS configuration has an R3010 in it.
114  *
115  * Again, see the comments in m68k-tdep.c.
116  */
117
118 void
119 supply_fpregset (fpregset_t *fpregsetp)
120 {
121   register int regi;
122   static char zerobuf[MAX_REGISTER_RAW_SIZE] =
123   {0};
124
125   /* FIXME, this is wrong for the N32 ABI which has 64 bit FP regs. */
126
127   for (regi = 0; regi < 32; regi++)
128     supply_register (FP0_REGNUM + regi,
129                      (char *) &fpregsetp->fp_r.fp_regs[regi]);
130
131   supply_register (FCRCS_REGNUM, (char *) &fpregsetp->fp_csr);
132
133   /* FIXME: how can we supply FCRIR_REGNUM?  SGI doesn't tell us. */
134   supply_register (FCRIR_REGNUM, zerobuf);
135 }
136
137 void
138 fill_fpregset (fpregset_t *fpregsetp, int regno)
139 {
140   int regi;
141   char *from, *to;
142
143   /* FIXME, this is wrong for the N32 ABI which has 64 bit FP regs. */
144
145   for (regi = FP0_REGNUM; regi < FP0_REGNUM + 32; regi++)
146     {
147       if ((regno == -1) || (regno == regi))
148         {
149           from = (char *) &registers[REGISTER_BYTE (regi)];
150           to = (char *) &(fpregsetp->fp_r.fp_regs[regi - FP0_REGNUM]);
151           memcpy (to, from, REGISTER_RAW_SIZE (regi));
152         }
153     }
154
155   if ((regno == -1) || (regno == FCRCS_REGNUM))
156     fpregsetp->fp_csr = *(unsigned *) &registers[REGISTER_BYTE (FCRCS_REGNUM)];
157 }
158
159
160 /* Figure out where the longjmp will land.
161    We expect the first arg to be a pointer to the jmp_buf structure from which
162    we extract the pc (JB_PC) that we will land at.  The pc is copied into PC.
163    This routine returns true on success. */
164
165 int
166 get_longjmp_target (CORE_ADDR *pc)
167 {
168   char *buf;
169   CORE_ADDR jb_addr;
170
171   buf = alloca (TARGET_PTR_BIT / TARGET_CHAR_BIT);
172   jb_addr = read_register (A0_REGNUM);
173
174   if (target_read_memory (jb_addr + JB_PC * JB_ELEMENT_SIZE, buf,
175                           TARGET_PTR_BIT / TARGET_CHAR_BIT))
176     return 0;
177
178   *pc = extract_address (buf, TARGET_PTR_BIT / TARGET_CHAR_BIT);
179
180   return 1;
181 }
182
183 /* Provide registers to GDB from a core file.
184
185    CORE_REG_SECT points to an array of bytes, which were obtained from
186    a core file which BFD thinks might contain register contents. 
187    CORE_REG_SIZE is its size.
188
189    Normally, WHICH says which register set corelow suspects this is:
190      0 --- the general-purpose register set
191      2 --- the floating-point register set
192    However, for Irix 5, WHICH isn't used.
193
194    REG_ADDR is also unused.  */
195
196 static void
197 fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
198                       int which, CORE_ADDR reg_addr)
199 {
200   if (core_reg_size == REGISTER_BYTES)
201     {
202       memcpy ((char *) registers, core_reg_sect, core_reg_size);
203     }
204   else if (MIPS_REGSIZE == 4 &&
205            core_reg_size == (2 * MIPS_REGSIZE) * NUM_REGS)
206     {
207       /* This is a core file from a N32 executable, 64 bits are saved
208          for all registers.  */
209       char *srcp = core_reg_sect;
210       char *dstp = registers;
211       int regno;
212
213       for (regno = 0; regno < NUM_REGS; regno++)
214         {
215           if (regno >= FP0_REGNUM && regno < (FP0_REGNUM + 32))
216             {
217               /* FIXME, this is wrong, N32 has 64 bit FP regs, but GDB
218                  currently assumes that they are 32 bit.  */
219               *dstp++ = *srcp++;
220               *dstp++ = *srcp++;
221               *dstp++ = *srcp++;
222               *dstp++ = *srcp++;
223               if (REGISTER_RAW_SIZE (regno) == 4)
224                 {
225                   /* copying 4 bytes from eight bytes?
226                      I don't see how this can be right...  */
227                   srcp += 4;
228                 }
229               else
230                 {
231                   /* copy all 8 bytes (sizeof(double)) */
232                   *dstp++ = *srcp++;
233                   *dstp++ = *srcp++;
234                   *dstp++ = *srcp++;
235                   *dstp++ = *srcp++;
236                 }
237             }
238           else
239             {
240               srcp += 4;
241               *dstp++ = *srcp++;
242               *dstp++ = *srcp++;
243               *dstp++ = *srcp++;
244               *dstp++ = *srcp++;
245             }
246         }
247     }
248   else
249     {
250       warning ("wrong size gregset struct in core file");
251       return;
252     }
253
254   registers_fetched ();
255 }
256 \f
257 /* Irix 5 uses what appears to be a unique form of shared library
258    support.  This is a copy of solib.c modified for Irix 5.  */
259 /* FIXME: Most of this code could be merged with osfsolib.c and solib.c
260    by using next_link_map_member and xfer_link_map_member in solib.c.  */
261
262 #include <sys/types.h>
263 #include <signal.h>
264 #include <sys/param.h>
265 #include <fcntl.h>
266
267 /* <obj.h> includes <sym.h> and <symconst.h>, which causes conflicts
268    with our versions of those files included by tm-mips.h.  Prevent
269    <obj.h> from including them with some appropriate defines.  */
270 #define __SYM_H__
271 #define __SYMCONST_H__
272 #include <obj.h>
273 #ifdef HAVE_OBJLIST_H
274 #include <objlist.h>
275 #endif
276
277 #ifdef NEW_OBJ_INFO_MAGIC
278 #define HANDLE_NEW_OBJ_LIST
279 #endif
280
281 #include "symtab.h"
282 #include "bfd.h"
283 #include "symfile.h"
284 #include "objfiles.h"
285 #include "command.h"
286 #include "frame.h"
287 #include "gdb_regex.h"
288 #include "inferior.h"
289 #include "language.h"
290 #include "gdbcmd.h"
291
292 /* The symbol which starts off the list of shared libraries.  */
293 #define DEBUG_BASE "__rld_obj_head"
294
295 /* Irix 6.x introduces a new variant of object lists.
296    To be able to debug O32 executables under Irix 6, we have to handle both
297    variants.  */
298
299 typedef enum
300 {
301   OBJ_LIST_OLD,                 /* Pre Irix 6.x object list.  */
302   OBJ_LIST_32,                  /* 32 Bit Elf32_Obj_Info.  */
303   OBJ_LIST_64                   /* 64 Bit Elf64_Obj_Info, FIXME not yet implemented.  */
304 }
305 obj_list_variant;
306
307 /* Define our own link_map structure.
308    This will help to share code with osfsolib.c and solib.c.  */
309
310 struct link_map
311   {
312     obj_list_variant l_variant; /* which variant of object list */
313     CORE_ADDR l_lladdr;         /* addr in inferior list was read from */
314     CORE_ADDR l_next;           /* address of next object list entry */
315   };
316
317 /* Irix 5 shared objects are pre-linked to particular addresses
318    although the dynamic linker may have to relocate them if the
319    address ranges of the libraries used by the main program clash.
320    The offset is the difference between the address where the object
321    is mapped and the binding address of the shared library.  */
322 #define LM_OFFSET(so) ((so) -> offset)
323 /* Loaded address of shared library.  */
324 #define LM_ADDR(so) ((so) -> lmstart)
325
326 char shadow_contents[BREAKPOINT_MAX];   /* Stash old bkpt addr contents */
327
328 struct so_list
329   {
330     struct so_list *next;       /* next structure in linked list */
331     struct link_map lm;
332     CORE_ADDR offset;           /* prelink to load address offset */
333     char *so_name;              /* shared object lib name */
334     CORE_ADDR lmstart;          /* lower addr bound of mapped object */
335     CORE_ADDR lmend;            /* upper addr bound of mapped object */
336     char symbols_loaded;        /* flag: symbols read in yet? */
337     char from_tty;              /* flag: print msgs? */
338     struct objfile *objfile;    /* objfile for loaded lib */
339     struct section_table *sections;
340     struct section_table *sections_end;
341     struct section_table *textsection;
342     bfd *abfd;
343   };
344
345 static struct so_list *so_list_head;    /* List of known shared objects */
346 static CORE_ADDR debug_base;    /* Base of dynamic linker structures */
347 static CORE_ADDR breakpoint_addr;       /* Address where end bkpt is set */
348
349 /* Local function prototypes */
350
351 static void sharedlibrary_command (char *, int);
352
353 static int enable_break (void);
354
355 static int disable_break (void);
356
357 static void info_sharedlibrary_command (char *, int);
358
359 static int symbol_add_stub (void *);
360
361 static struct so_list *find_solib (struct so_list *);
362
363 static struct link_map *first_link_map_member (void);
364
365 static struct link_map *next_link_map_member (struct so_list *);
366
367 static void xfer_link_map_member (struct so_list *, struct link_map *);
368
369 static CORE_ADDR locate_base (void);
370
371 static int solib_map_sections (void *);
372
373 /*
374
375    LOCAL FUNCTION
376
377    solib_map_sections -- open bfd and build sections for shared lib
378
379    SYNOPSIS
380
381    static int solib_map_sections (struct so_list *so)
382
383    DESCRIPTION
384
385    Given a pointer to one of the shared objects in our list
386    of mapped objects, use the recorded name to open a bfd
387    descriptor for the object, build a section table, and then
388    relocate all the section addresses by the base address at
389    which the shared object was mapped.
390
391    FIXMES
392
393    In most (all?) cases the shared object file name recorded in the
394    dynamic linkage tables will be a fully qualified pathname.  For
395    cases where it isn't, do we really mimic the systems search
396    mechanism correctly in the below code (particularly the tilde
397    expansion stuff?).
398  */
399
400 static int
401 solib_map_sections (void *arg)
402 {
403   struct so_list *so = (struct so_list *) arg;  /* catch_errors bogon */
404   char *filename;
405   char *scratch_pathname;
406   int scratch_chan;
407   struct section_table *p;
408   struct cleanup *old_chain;
409   bfd *abfd;
410
411   filename = tilde_expand (so->so_name);
412   old_chain = make_cleanup (free, filename);
413
414   scratch_chan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0,
415                         &scratch_pathname);
416   if (scratch_chan < 0)
417     {
418       scratch_chan = openp (getenv ("LD_LIBRARY_PATH"), 1, filename,
419                             O_RDONLY, 0, &scratch_pathname);
420     }
421   if (scratch_chan < 0)
422     {
423       perror_with_name (filename);
424     }
425   /* Leave scratch_pathname allocated.  abfd->name will point to it.  */
426
427   abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
428   if (!abfd)
429     {
430       close (scratch_chan);
431       error ("Could not open `%s' as an executable file: %s",
432              scratch_pathname, bfd_errmsg (bfd_get_error ()));
433     }
434   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
435   so->abfd = abfd;
436   abfd->cacheable = true;
437
438   if (!bfd_check_format (abfd, bfd_object))
439     {
440       error ("\"%s\": not in executable format: %s.",
441              scratch_pathname, bfd_errmsg (bfd_get_error ()));
442     }
443   if (build_section_table (abfd, &so->sections, &so->sections_end))
444     {
445       error ("Can't find the file sections in `%s': %s",
446              bfd_get_filename (exec_bfd), bfd_errmsg (bfd_get_error ()));
447     }
448
449   for (p = so->sections; p < so->sections_end; p++)
450     {
451       /* Relocate the section binding addresses as recorded in the shared
452          object's file by the offset to get the address to which the
453          object was actually mapped.  */
454       p->addr += LM_OFFSET (so);
455       p->endaddr += LM_OFFSET (so);
456       so->lmend = (CORE_ADDR) max (p->endaddr, so->lmend);
457       if (STREQ (p->the_bfd_section->name, ".text"))
458         {
459           so->textsection = p;
460         }
461     }
462
463   /* Free the file names, close the file now.  */
464   do_cleanups (old_chain);
465
466   /* must be non-zero */
467   return (1);
468 }
469
470 /*
471
472    LOCAL FUNCTION
473
474    locate_base -- locate the base address of dynamic linker structs
475
476    SYNOPSIS
477
478    CORE_ADDR locate_base (void)
479
480    DESCRIPTION
481
482    For both the SunOS and SVR4 shared library implementations, if the
483    inferior executable has been linked dynamically, there is a single
484    address somewhere in the inferior's data space which is the key to
485    locating all of the dynamic linker's runtime structures.  This
486    address is the value of the symbol defined by the macro DEBUG_BASE.
487    The job of this function is to find and return that address, or to
488    return 0 if there is no such address (the executable is statically
489    linked for example).
490
491    For SunOS, the job is almost trivial, since the dynamic linker and
492    all of it's structures are statically linked to the executable at
493    link time.  Thus the symbol for the address we are looking for has
494    already been added to the minimal symbol table for the executable's
495    objfile at the time the symbol file's symbols were read, and all we
496    have to do is look it up there.  Note that we explicitly do NOT want
497    to find the copies in the shared library.
498
499    The SVR4 version is much more complicated because the dynamic linker
500    and it's structures are located in the shared C library, which gets
501    run as the executable's "interpreter" by the kernel.  We have to go
502    to a lot more work to discover the address of DEBUG_BASE.  Because
503    of this complexity, we cache the value we find and return that value
504    on subsequent invocations.  Note there is no copy in the executable
505    symbol tables.
506
507    Irix 5 is basically like SunOS.
508
509    Note that we can assume nothing about the process state at the time
510    we need to find this address.  We may be stopped on the first instruc-
511    tion of the interpreter (C shared library), the first instruction of
512    the executable itself, or somewhere else entirely (if we attached
513    to the process for example).
514
515  */
516
517 static CORE_ADDR
518 locate_base (void)
519 {
520   struct minimal_symbol *msymbol;
521   CORE_ADDR address = 0;
522
523   msymbol = lookup_minimal_symbol (DEBUG_BASE, NULL, symfile_objfile);
524   if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
525     {
526       address = SYMBOL_VALUE_ADDRESS (msymbol);
527     }
528   return (address);
529 }
530
531 /*
532
533    LOCAL FUNCTION
534
535    first_link_map_member -- locate first member in dynamic linker's map
536
537    SYNOPSIS
538
539    static struct link_map *first_link_map_member (void)
540
541    DESCRIPTION
542
543    Read in a copy of the first member in the inferior's dynamic
544    link map from the inferior's dynamic linker structures, and return
545    a pointer to the link map descriptor.
546  */
547
548 static struct link_map *
549 first_link_map_member (void)
550 {
551   struct obj_list *listp;
552   struct obj_list list_old;
553   struct link_map *lm;
554   static struct link_map first_lm;
555   CORE_ADDR lladdr;
556   CORE_ADDR next_lladdr;
557
558   /* We have not already read in the dynamic linking structures
559      from the inferior, lookup the address of the base structure. */
560   debug_base = locate_base ();
561   if (debug_base == 0)
562     return NULL;
563
564   /* Get address of first list entry.  */
565   read_memory (debug_base, (char *) &listp, sizeof (struct obj_list *));
566
567   if (listp == NULL)
568     return NULL;
569
570   /* Get first list entry.  */
571   /* The MIPS Sign extends addresses. */
572   lladdr = host_pointer_to_address (listp);
573   read_memory (lladdr, (char *) &list_old, sizeof (struct obj_list));
574
575   /* The first entry in the list is the object file we are debugging,
576      so skip it.  */
577   next_lladdr = host_pointer_to_address (list_old.next);
578
579 #ifdef HANDLE_NEW_OBJ_LIST
580   if (list_old.data == NEW_OBJ_INFO_MAGIC)
581     {
582       Elf32_Obj_Info list_32;
583
584       read_memory (lladdr, (char *) &list_32, sizeof (Elf32_Obj_Info));
585       if (list_32.oi_size != sizeof (Elf32_Obj_Info))
586         return NULL;
587       next_lladdr = (CORE_ADDR) list_32.oi_next;
588     }
589 #endif
590
591   if (next_lladdr == 0)
592     return NULL;
593
594   first_lm.l_lladdr = next_lladdr;
595   lm = &first_lm;
596   return lm;
597 }
598
599 /*
600
601    LOCAL FUNCTION
602
603    next_link_map_member -- locate next member in dynamic linker's map
604
605    SYNOPSIS
606
607    static struct link_map *next_link_map_member (so_list_ptr)
608
609    DESCRIPTION
610
611    Read in a copy of the next member in the inferior's dynamic
612    link map from the inferior's dynamic linker structures, and return
613    a pointer to the link map descriptor.
614  */
615
616 static struct link_map *
617 next_link_map_member (struct so_list *so_list_ptr)
618 {
619   struct link_map *lm = &so_list_ptr->lm;
620   CORE_ADDR next_lladdr = lm->l_next;
621   static struct link_map next_lm;
622
623   if (next_lladdr == 0)
624     {
625       /* We have hit the end of the list, so check to see if any were
626          added, but be quiet if we can't read from the target any more. */
627       int status = 0;
628
629       if (lm->l_variant == OBJ_LIST_OLD)
630         {
631           struct obj_list list_old;
632
633           status = target_read_memory (lm->l_lladdr,
634                                        (char *) &list_old,
635                                        sizeof (struct obj_list));
636           next_lladdr = host_pointer_to_address (list_old.next);
637         }
638 #ifdef HANDLE_NEW_OBJ_LIST
639       else if (lm->l_variant == OBJ_LIST_32)
640         {
641           Elf32_Obj_Info list_32;
642           status = target_read_memory (lm->l_lladdr,
643                                        (char *) &list_32,
644                                        sizeof (Elf32_Obj_Info));
645           next_lladdr = (CORE_ADDR) list_32.oi_next;
646         }
647 #endif
648
649       if (status != 0 || next_lladdr == 0)
650         return NULL;
651     }
652
653   next_lm.l_lladdr = next_lladdr;
654   lm = &next_lm;
655   return lm;
656 }
657
658 /*
659
660    LOCAL FUNCTION
661
662    xfer_link_map_member -- set local variables from dynamic linker's map
663
664    SYNOPSIS
665
666    static void xfer_link_map_member (so_list_ptr, lm)
667
668    DESCRIPTION
669
670    Read in a copy of the requested member in the inferior's dynamic
671    link map from the inferior's dynamic linker structures, and fill
672    in the necessary so_list_ptr elements.
673  */
674
675 static void
676 xfer_link_map_member (struct so_list *so_list_ptr, struct link_map *lm)
677 {
678   struct obj_list list_old;
679   CORE_ADDR lladdr = lm->l_lladdr;
680   struct link_map *new_lm = &so_list_ptr->lm;
681   int errcode;
682
683   read_memory (lladdr, (char *) &list_old, sizeof (struct obj_list));
684
685   new_lm->l_variant = OBJ_LIST_OLD;
686   new_lm->l_lladdr = lladdr;
687   new_lm->l_next = host_pointer_to_address (list_old.next);
688
689 #ifdef HANDLE_NEW_OBJ_LIST
690   if (list_old.data == NEW_OBJ_INFO_MAGIC)
691     {
692       Elf32_Obj_Info list_32;
693
694       read_memory (lladdr, (char *) &list_32, sizeof (Elf32_Obj_Info));
695       if (list_32.oi_size != sizeof (Elf32_Obj_Info))
696         return;
697       new_lm->l_variant = OBJ_LIST_32;
698       new_lm->l_next = (CORE_ADDR) list_32.oi_next;
699
700       target_read_string ((CORE_ADDR) list_32.oi_pathname,
701                           &so_list_ptr->so_name,
702                           list_32.oi_pathname_len + 1, &errcode);
703       if (errcode != 0)
704         memory_error (errcode, (CORE_ADDR) list_32.oi_pathname);
705
706       LM_ADDR (so_list_ptr) = (CORE_ADDR) list_32.oi_ehdr;
707       LM_OFFSET (so_list_ptr) =
708         (CORE_ADDR) list_32.oi_ehdr - (CORE_ADDR) list_32.oi_orig_ehdr;
709     }
710   else
711 #endif
712     {
713 #if defined (_MIPS_SIM_NABI32) && _MIPS_SIM == _MIPS_SIM_NABI32
714       /* If we are compiling GDB under N32 ABI, the alignments in
715          the obj struct are different from the O32 ABI and we will get
716          wrong values when accessing the struct.
717          As a workaround we use fixed values which are good for
718          Irix 6.2.  */
719       char buf[432];
720
721       read_memory ((CORE_ADDR) list_old.data, buf, sizeof (buf));
722
723       target_read_string (extract_address (&buf[236], 4),
724                           &so_list_ptr->so_name,
725                           INT_MAX, &errcode);
726       if (errcode != 0)
727         memory_error (errcode, extract_address (&buf[236], 4));
728
729       LM_ADDR (so_list_ptr) = extract_address (&buf[196], 4);
730       LM_OFFSET (so_list_ptr) =
731         extract_address (&buf[196], 4) - extract_address (&buf[248], 4);
732 #else
733       struct obj obj_old;
734
735       read_memory ((CORE_ADDR) list_old.data, (char *) &obj_old,
736                    sizeof (struct obj));
737
738       target_read_string ((CORE_ADDR) obj_old.o_path,
739                           &so_list_ptr->so_name,
740                           INT_MAX, &errcode);
741       if (errcode != 0)
742         memory_error (errcode, (CORE_ADDR) obj_old.o_path);
743
744       LM_ADDR (so_list_ptr) = (CORE_ADDR) obj_old.o_praw;
745       LM_OFFSET (so_list_ptr) =
746         (CORE_ADDR) obj_old.o_praw - obj_old.o_base_address;
747 #endif
748     }
749
750   catch_errors (solib_map_sections, (char *) so_list_ptr,
751                 "Error while mapping shared library sections:\n",
752                 RETURN_MASK_ALL);
753 }
754
755
756 /*
757
758    LOCAL FUNCTION
759
760    find_solib -- step through list of shared objects
761
762    SYNOPSIS
763
764    struct so_list *find_solib (struct so_list *so_list_ptr)
765
766    DESCRIPTION
767
768    This module contains the routine which finds the names of any
769    loaded "images" in the current process. The argument in must be
770    NULL on the first call, and then the returned value must be passed
771    in on subsequent calls. This provides the capability to "step" down
772    the list of loaded objects. On the last object, a NULL value is
773    returned.
774  */
775
776 static struct so_list *
777 find_solib (struct so_list *so_list_ptr)
778 {
779   struct so_list *so_list_next = NULL;
780   struct link_map *lm = NULL;
781   struct so_list *new;
782
783   if (so_list_ptr == NULL)
784     {
785       /* We are setting up for a new scan through the loaded images. */
786       if ((so_list_next = so_list_head) == NULL)
787         {
788           /* Find the first link map list member. */
789           lm = first_link_map_member ();
790         }
791     }
792   else
793     {
794       /* We have been called before, and are in the process of walking
795          the shared library list.  Advance to the next shared object. */
796       lm = next_link_map_member (so_list_ptr);
797       so_list_next = so_list_ptr->next;
798     }
799   if ((so_list_next == NULL) && (lm != NULL))
800     {
801       new = (struct so_list *) xmalloc (sizeof (struct so_list));
802       memset ((char *) new, 0, sizeof (struct so_list));
803       /* Add the new node as the next node in the list, or as the root
804          node if this is the first one. */
805       if (so_list_ptr != NULL)
806         {
807           so_list_ptr->next = new;
808         }
809       else
810         {
811           so_list_head = new;
812         }
813       so_list_next = new;
814       xfer_link_map_member (new, lm);
815     }
816   return (so_list_next);
817 }
818
819 /* A small stub to get us past the arg-passing pinhole of catch_errors.  */
820
821 static int
822 symbol_add_stub (void *arg)
823 {
824   register struct so_list *so = (struct so_list *) arg;         /* catch_errs bogon */
825   CORE_ADDR text_addr = 0;
826   struct section_addr_info section_addrs;
827
828   memset (&section_addrs, 0, sizeof (section_addrs));
829   if (so->textsection)
830     text_addr = so->textsection->addr;
831   else if (so->abfd != NULL)
832     {
833       asection *lowest_sect;
834
835       /* If we didn't find a mapped non zero sized .text section, set up
836          text_addr so that the relocation in symbol_file_add does no harm.  */
837
838       lowest_sect = bfd_get_section_by_name (so->abfd, ".text");
839       if (lowest_sect == NULL)
840         bfd_map_over_sections (so->abfd, find_lowest_section,
841                                (PTR) &lowest_sect);
842       if (lowest_sect)
843         text_addr = bfd_section_vma (so->abfd, lowest_sect) + LM_OFFSET (so);
844     }
845
846
847   section_addrs.other[0].name = ".text";
848   section_addrs.other[0].addr = text_addr;
849   so->objfile = symbol_file_add (so->so_name, so->from_tty,
850                                  &section_addrs, 0, 0);
851   /* must be non-zero */
852   return (1);
853 }
854
855 /*
856
857    GLOBAL FUNCTION
858
859    solib_add -- add a shared library file to the symtab and section list
860
861    SYNOPSIS
862
863    void solib_add (char *arg_string, int from_tty,
864    struct target_ops *target)
865
866    DESCRIPTION
867
868  */
869
870 void
871 solib_add (char *arg_string, int from_tty, struct target_ops *target)
872 {
873   register struct so_list *so = NULL;   /* link map state variable */
874
875   /* Last shared library that we read.  */
876   struct so_list *so_last = NULL;
877
878   char *re_err;
879   int count;
880   int old;
881
882   if ((re_err = re_comp (arg_string ? arg_string : ".")) != NULL)
883     {
884       error ("Invalid regexp: %s", re_err);
885     }
886
887   /* Add the shared library sections to the section table of the
888      specified target, if any.  */
889   if (target)
890     {
891       /* Count how many new section_table entries there are.  */
892       so = NULL;
893       count = 0;
894       while ((so = find_solib (so)) != NULL)
895         {
896           if (so->so_name[0])
897             {
898               count += so->sections_end - so->sections;
899             }
900         }
901
902       if (count)
903         {
904           old = target_resize_to_sections (target, count);
905           
906           /* Add these section table entries to the target's table.  */
907           while ((so = find_solib (so)) != NULL)
908             {
909               if (so->so_name[0])
910                 {
911                   count = so->sections_end - so->sections;
912                   memcpy ((char *) (target->to_sections + old),
913                           so->sections,
914                           (sizeof (struct section_table)) * count);
915                   old += count;
916                 }
917             }
918         }
919     }
920
921   /* Now add the symbol files.  */
922   while ((so = find_solib (so)) != NULL)
923     {
924       if (so->so_name[0] && re_exec (so->so_name))
925         {
926           so->from_tty = from_tty;
927           if (so->symbols_loaded)
928             {
929               if (from_tty)
930                 {
931                   printf_unfiltered ("Symbols already loaded for %s\n", so->so_name);
932                 }
933             }
934           else if (catch_errors
935                    (symbol_add_stub, (char *) so,
936                     "Error while reading shared library symbols:\n",
937                     RETURN_MASK_ALL))
938             {
939               so_last = so;
940               so->symbols_loaded = 1;
941             }
942         }
943     }
944
945   /* Getting new symbols may change our opinion about what is
946      frameless.  */
947   if (so_last)
948     reinit_frame_cache ();
949 }
950
951 /*
952
953    LOCAL FUNCTION
954
955    info_sharedlibrary_command -- code for "info sharedlibrary"
956
957    SYNOPSIS
958
959    static void info_sharedlibrary_command ()
960
961    DESCRIPTION
962
963    Walk through the shared library list and print information
964    about each attached library.
965  */
966
967 static void
968 info_sharedlibrary_command (char *ignore, int from_tty)
969 {
970   register struct so_list *so = NULL;   /* link map state variable */
971   int header_done = 0;
972
973   if (exec_bfd == NULL)
974     {
975       printf_unfiltered ("No executable file.\n");
976       return;
977     }
978   while ((so = find_solib (so)) != NULL)
979     {
980       if (so->so_name[0])
981         {
982           if (!header_done)
983             {
984               printf_unfiltered ("%-12s%-12s%-12s%s\n", "From", "To", "Syms Read",
985                                  "Shared Object Library");
986               header_done++;
987             }
988           printf_unfiltered ("%-12s",
989                       local_hex_string_custom ((unsigned long) LM_ADDR (so),
990                                                "08l"));
991           printf_unfiltered ("%-12s",
992                          local_hex_string_custom ((unsigned long) so->lmend,
993                                                   "08l"));
994           printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
995           printf_unfiltered ("%s\n", so->so_name);
996         }
997     }
998   if (so_list_head == NULL)
999     {
1000       printf_unfiltered ("No shared libraries loaded at this time.\n");
1001     }
1002 }
1003
1004 /*
1005
1006    GLOBAL FUNCTION
1007
1008    solib_address -- check to see if an address is in a shared lib
1009
1010    SYNOPSIS
1011
1012    char *solib_address (CORE_ADDR address)
1013
1014    DESCRIPTION
1015
1016    Provides a hook for other gdb routines to discover whether or
1017    not a particular address is within the mapped address space of
1018    a shared library.  Any address between the base mapping address
1019    and the first address beyond the end of the last mapping, is
1020    considered to be within the shared library address space, for
1021    our purposes.
1022
1023    For example, this routine is called at one point to disable
1024    breakpoints which are in shared libraries that are not currently
1025    mapped in.
1026  */
1027
1028 char *
1029 solib_address (CORE_ADDR address)
1030 {
1031   register struct so_list *so = 0;      /* link map state variable */
1032
1033   while ((so = find_solib (so)) != NULL)
1034     {
1035       if (so->so_name[0])
1036         {
1037           if ((address >= (CORE_ADDR) LM_ADDR (so)) &&
1038               (address < (CORE_ADDR) so->lmend))
1039             return (so->so_name);
1040         }
1041     }
1042   return (0);
1043 }
1044
1045 /* Called by free_all_symtabs */
1046
1047 void
1048 clear_solib (void)
1049 {
1050   struct so_list *next;
1051   char *bfd_filename;
1052
1053   disable_breakpoints_in_shlibs (1);
1054
1055   while (so_list_head)
1056     {
1057       if (so_list_head->sections)
1058         {
1059           free ((PTR) so_list_head->sections);
1060         }
1061       if (so_list_head->abfd)
1062         {
1063           bfd_filename = bfd_get_filename (so_list_head->abfd);
1064           if (!bfd_close (so_list_head->abfd))
1065             warning ("cannot close \"%s\": %s",
1066                      bfd_filename, bfd_errmsg (bfd_get_error ()));
1067         }
1068       else
1069         /* This happens for the executable on SVR4.  */
1070         bfd_filename = NULL;
1071
1072       next = so_list_head->next;
1073       if (bfd_filename)
1074         free ((PTR) bfd_filename);
1075       free (so_list_head->so_name);
1076       free ((PTR) so_list_head);
1077       so_list_head = next;
1078     }
1079   debug_base = 0;
1080 }
1081
1082 /*
1083
1084    LOCAL FUNCTION
1085
1086    disable_break -- remove the "mapping changed" breakpoint
1087
1088    SYNOPSIS
1089
1090    static int disable_break ()
1091
1092    DESCRIPTION
1093
1094    Removes the breakpoint that gets hit when the dynamic linker
1095    completes a mapping change.
1096
1097  */
1098
1099 static int
1100 disable_break (void)
1101 {
1102   int status = 1;
1103
1104
1105   /* Note that breakpoint address and original contents are in our address
1106      space, so we just need to write the original contents back. */
1107
1108   if (memory_remove_breakpoint (breakpoint_addr, shadow_contents) != 0)
1109     {
1110       status = 0;
1111     }
1112
1113   /* For the SVR4 version, we always know the breakpoint address.  For the
1114      SunOS version we don't know it until the above code is executed.
1115      Grumble if we are stopped anywhere besides the breakpoint address. */
1116
1117   if (stop_pc != breakpoint_addr)
1118     {
1119       warning ("stopped at unknown breakpoint while handling shared libraries");
1120     }
1121
1122   return (status);
1123 }
1124
1125 /*
1126
1127    LOCAL FUNCTION
1128
1129    enable_break -- arrange for dynamic linker to hit breakpoint
1130
1131    SYNOPSIS
1132
1133    int enable_break (void)
1134
1135    DESCRIPTION
1136
1137    This functions inserts a breakpoint at the entry point of the
1138    main executable, where all shared libraries are mapped in.
1139  */
1140
1141 static int
1142 enable_break (void)
1143 {
1144   if (symfile_objfile != NULL
1145       && target_insert_breakpoint (symfile_objfile->ei.entry_point,
1146                                    shadow_contents) == 0)
1147     {
1148       breakpoint_addr = symfile_objfile->ei.entry_point;
1149       return 1;
1150     }
1151
1152   return 0;
1153 }
1154
1155 /*
1156
1157    GLOBAL FUNCTION
1158
1159    solib_create_inferior_hook -- shared library startup support
1160
1161    SYNOPSIS
1162
1163    void solib_create_inferior_hook()
1164
1165    DESCRIPTION
1166
1167    When gdb starts up the inferior, it nurses it along (through the
1168    shell) until it is ready to execute it's first instruction.  At this
1169    point, this function gets called via expansion of the macro
1170    SOLIB_CREATE_INFERIOR_HOOK.
1171
1172    For SunOS executables, this first instruction is typically the
1173    one at "_start", or a similar text label, regardless of whether
1174    the executable is statically or dynamically linked.  The runtime
1175    startup code takes care of dynamically linking in any shared
1176    libraries, once gdb allows the inferior to continue.
1177
1178    For SVR4 executables, this first instruction is either the first
1179    instruction in the dynamic linker (for dynamically linked
1180    executables) or the instruction at "start" for statically linked
1181    executables.  For dynamically linked executables, the system
1182    first exec's /lib/libc.so.N, which contains the dynamic linker,
1183    and starts it running.  The dynamic linker maps in any needed
1184    shared libraries, maps in the actual user executable, and then
1185    jumps to "start" in the user executable.
1186
1187    For both SunOS shared libraries, and SVR4 shared libraries, we
1188    can arrange to cooperate with the dynamic linker to discover the
1189    names of shared libraries that are dynamically linked, and the
1190    base addresses to which they are linked.
1191
1192    This function is responsible for discovering those names and
1193    addresses, and saving sufficient information about them to allow
1194    their symbols to be read at a later time.
1195
1196    FIXME
1197
1198    Between enable_break() and disable_break(), this code does not
1199    properly handle hitting breakpoints which the user might have
1200    set in the startup code or in the dynamic linker itself.  Proper
1201    handling will probably have to wait until the implementation is
1202    changed to use the "breakpoint handler function" method.
1203
1204    Also, what if child has exit()ed?  Must exit loop somehow.
1205  */
1206
1207 void
1208 solib_create_inferior_hook (void)
1209 {
1210   if (!enable_break ())
1211     {
1212       warning ("shared library handler failed to enable breakpoint");
1213       return;
1214     }
1215
1216   /* Now run the target.  It will eventually hit the breakpoint, at
1217      which point all of the libraries will have been mapped in and we
1218      can go groveling around in the dynamic linker structures to find
1219      out what we need to know about them. */
1220
1221   clear_proceed_status ();
1222   stop_soon_quietly = 1;
1223   stop_signal = TARGET_SIGNAL_0;
1224   do
1225     {
1226       target_resume (-1, 0, stop_signal);
1227       wait_for_inferior ();
1228     }
1229   while (stop_signal != TARGET_SIGNAL_TRAP);
1230
1231   /* We are now either at the "mapping complete" breakpoint (or somewhere
1232      else, a condition we aren't prepared to deal with anyway), so adjust
1233      the PC as necessary after a breakpoint, disable the breakpoint, and
1234      add any shared libraries that were mapped in. */
1235
1236   if (DECR_PC_AFTER_BREAK)
1237     {
1238       stop_pc -= DECR_PC_AFTER_BREAK;
1239       write_register (PC_REGNUM, stop_pc);
1240     }
1241
1242   if (!disable_break ())
1243     {
1244       warning ("shared library handler failed to disable breakpoint");
1245     }
1246
1247   /*  solib_add will call reinit_frame_cache.
1248      But we are stopped in the startup code and we might not have symbols
1249      for the startup code, so heuristic_proc_start could be called
1250      and will put out an annoying warning.
1251      Delaying the resetting of stop_soon_quietly until after symbol loading
1252      suppresses the warning.  */
1253   if (auto_solib_add)
1254     solib_add ((char *) 0, 0, (struct target_ops *) 0);
1255   stop_soon_quietly = 0;
1256 }
1257
1258 /*
1259
1260    LOCAL FUNCTION
1261
1262    sharedlibrary_command -- handle command to explicitly add library
1263
1264    SYNOPSIS
1265
1266    static void sharedlibrary_command (char *args, int from_tty)
1267
1268    DESCRIPTION
1269
1270  */
1271
1272 static void
1273 sharedlibrary_command (char *args, int from_tty)
1274 {
1275   dont_repeat ();
1276   solib_add (args, from_tty, (struct target_ops *) 0);
1277 }
1278
1279 void
1280 _initialize_solib (void)
1281 {
1282   add_com ("sharedlibrary", class_files, sharedlibrary_command,
1283            "Load shared object library symbols for files matching REGEXP.");
1284   add_info ("sharedlibrary", info_sharedlibrary_command,
1285             "Status of loaded shared object libraries.");
1286
1287   add_show_from_set
1288     (add_set_cmd ("auto-solib-add", class_support, var_zinteger,
1289                   (char *) &auto_solib_add,
1290                   "Set autoloading of shared library symbols.\n\
1291 If nonzero, symbols from all shared object libraries will be loaded\n\
1292 automatically when the inferior begins execution or when the dynamic linker\n\
1293 informs gdb that a new library has been loaded.  Otherwise, symbols\n\
1294 must be loaded manually, using `sharedlibrary'.",
1295                   &setlist),
1296      &showlist);
1297 }
1298 \f
1299
1300 /* Register that we are able to handle irix5 core file formats.
1301    This really is bfd_target_unknown_flavour */
1302
1303 static struct core_fns irix5_core_fns =
1304 {
1305   bfd_target_unknown_flavour,           /* core_flavour */
1306   default_check_format,                 /* check_format */
1307   default_core_sniffer,                 /* core_sniffer */
1308   fetch_core_registers,                 /* core_read_registers */
1309   NULL                                  /* next */
1310 };
1311
1312 void
1313 _initialize_core_irix5 (void)
1314 {
1315   add_core_fns (&irix5_core_fns);
1316 }