1 /* Native support for the SGI Iris running IRIX version 5, for GDB.
2 Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
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.
9 This file is part of GDB.
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.
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.
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, Boston, MA 02111-1307, USA. */
30 #include "gdb_string.h"
32 #include <sys/procfs.h>
33 #include <setjmp.h> /* For JB_XXX. */
36 fetch_core_registers PARAMS ((char *, unsigned int, int, CORE_ADDR));
38 /* Size of elements in jmpbuf */
40 #define JB_ELEMENT_SIZE 4
43 * See the comment in m68k-tdep.c regarding the utility of these functions.
45 * These definitions are from the MIPS SVR4 ABI, so they may work for
46 * any MIPS SVR4 target.
50 supply_gregset (gregsetp)
54 register greg_t *regp = &(*gregsetp)[0];
55 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
57 for(regi = 0; regi <= CTX_RA; regi++)
58 supply_register (regi, (char *)(regp + regi));
60 supply_register (PC_REGNUM, (char *)(regp + CTX_EPC));
61 supply_register (HI_REGNUM, (char *)(regp + CTX_MDHI));
62 supply_register (LO_REGNUM, (char *)(regp + CTX_MDLO));
63 supply_register (CAUSE_REGNUM, (char *)(regp + CTX_CAUSE));
65 /* Fill inaccessible registers with zero. */
66 supply_register (BADVADDR_REGNUM, zerobuf);
70 fill_gregset (gregsetp, regno)
75 register greg_t *regp = &(*gregsetp)[0];
77 for (regi = 0; regi <= CTX_RA; regi++)
78 if ((regno == -1) || (regno == regi))
79 *(regp + regi) = *(greg_t *) ®isters[REGISTER_BYTE (regi)];
81 if ((regno == -1) || (regno == PC_REGNUM))
82 *(regp + CTX_EPC) = *(greg_t *) ®isters[REGISTER_BYTE (PC_REGNUM)];
84 if ((regno == -1) || (regno == CAUSE_REGNUM))
85 *(regp + CTX_CAUSE) = *(greg_t *) ®isters[REGISTER_BYTE (CAUSE_REGNUM)];
87 if ((regno == -1) || (regno == HI_REGNUM))
88 *(regp + CTX_MDHI) = *(greg_t *) ®isters[REGISTER_BYTE (HI_REGNUM)];
90 if ((regno == -1) || (regno == LO_REGNUM))
91 *(regp + CTX_MDLO) = *(greg_t *) ®isters[REGISTER_BYTE (LO_REGNUM)];
95 * Now we do the same thing for floating-point registers.
96 * We don't bother to condition on FP0_REGNUM since any
97 * reasonable MIPS configuration has an R3010 in it.
99 * Again, see the comments in m68k-tdep.c.
103 supply_fpregset (fpregsetp)
104 fpregset_t *fpregsetp;
107 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
109 for (regi = 0; regi < 32; regi++)
110 supply_register (FP0_REGNUM + regi,
111 (char *)&fpregsetp->fp_r.fp_regs[regi]);
113 supply_register (FCRCS_REGNUM, (char *)&fpregsetp->fp_csr);
115 /* FIXME: how can we supply FCRIR_REGNUM? SGI doesn't tell us. */
116 supply_register (FCRIR_REGNUM, zerobuf);
120 fill_fpregset (fpregsetp, regno)
121 fpregset_t *fpregsetp;
127 for (regi = FP0_REGNUM; regi < FP0_REGNUM + 32; regi++)
129 if ((regno == -1) || (regno == regi))
131 from = (char *) ®isters[REGISTER_BYTE (regi)];
132 to = (char *) &(fpregsetp->fp_r.fp_regs[regi - FP0_REGNUM]);
133 memcpy(to, from, REGISTER_RAW_SIZE (regi));
137 if ((regno == -1) || (regno == FCRCS_REGNUM))
138 fpregsetp->fp_csr = *(unsigned *) ®isters[REGISTER_BYTE(FCRCS_REGNUM)];
142 /* Figure out where the longjmp will land.
143 We expect the first arg to be a pointer to the jmp_buf structure from which
144 we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
145 This routine returns true on success. */
148 get_longjmp_target (pc)
151 char buf[TARGET_PTR_BIT / TARGET_CHAR_BIT];
154 jb_addr = read_register (A0_REGNUM);
156 if (target_read_memory (jb_addr + JB_PC * JB_ELEMENT_SIZE, buf,
157 TARGET_PTR_BIT / TARGET_CHAR_BIT))
160 *pc = extract_address (buf, TARGET_PTR_BIT / TARGET_CHAR_BIT);
166 fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
168 unsigned core_reg_size;
169 int which; /* Unused */
170 CORE_ADDR reg_addr; /* Unused */
172 if (core_reg_size == REGISTER_BYTES)
174 memcpy ((char *)registers, core_reg_sect, core_reg_size);
176 else if (core_reg_size == (2 * REGISTER_BYTES) && MIPS_REGSIZE == 4)
178 /* This is a core file from a N32 executable, 64 bits are saved
179 for all registers. */
180 char *srcp = core_reg_sect;
181 char *dstp = registers;
184 for (regno = 0; regno < NUM_REGS; regno++)
186 if (regno >= FP0_REGNUM && regno < (FP0_REGNUM + 32))
188 /* FIXME, this is wrong, N32 has 64 bit FP regs, but GDB
189 currently assumes that they are 32 bit. */
208 warning ("wrong size gregset struct in core file");
212 registers_fetched ();
215 /* Irix 5 uses what appears to be a unique form of shared library
216 support. This is a copy of solib.c modified for Irix 5. */
217 /* FIXME: Most of this code could be merged with osfsolib.c and solib.c
218 by using next_link_map_member and xfer_link_map_member in solib.c. */
220 #include <sys/types.h>
222 #include <sys/param.h>
225 /* <obj.h> includes <sym.h> and <symconst.h>, which causes conflicts
226 with our versions of those files included by tm-mips.h. Prevent
227 <obj.h> from including them with some appropriate defines. */
229 #define __SYMCONST_H__
231 #ifdef HAVE_OBJLIST_H
235 #ifdef NEW_OBJ_INFO_MAGIC
236 #define HANDLE_NEW_OBJ_LIST
242 #include "objfiles.h"
245 #include "gnu-regex.h"
246 #include "inferior.h"
247 #include "language.h"
250 /* The symbol which starts off the list of shared libraries. */
251 #define DEBUG_BASE "__rld_obj_head"
253 /* Irix 6.x introduces a new variant of object lists.
254 To be able to debug O32 executables under Irix 6, we have to handle both
259 OBJ_LIST_OLD, /* Pre Irix 6.x object list. */
260 OBJ_LIST_32, /* 32 Bit Elf32_Obj_Info. */
261 OBJ_LIST_64 /* 64 Bit Elf64_Obj_Info, FIXME not yet implemented. */
264 /* Define our own link_map structure.
265 This will help to share code with osfsolib.c and solib.c. */
268 obj_list_variant l_variant; /* which variant of object list */
269 CORE_ADDR l_lladdr; /* addr in inferior list was read from */
270 CORE_ADDR l_next; /* address of next object list entry */
273 /* Irix 5 shared objects are pre-linked to particular addresses
274 although the dynamic linker may have to relocate them if the
275 address ranges of the libraries used by the main program clash.
276 The offset is the difference between the address where the object
277 is mapped and the binding address of the shared library. */
278 #define LM_OFFSET(so) ((so) -> offset)
279 /* Loaded address of shared library. */
280 #define LM_ADDR(so) ((so) -> lmstart)
282 char shadow_contents[BREAKPOINT_MAX]; /* Stash old bkpt addr contents */
285 struct so_list *next; /* next structure in linked list */
287 CORE_ADDR offset; /* prelink to load address offset */
288 char *so_name; /* shared object lib name */
289 CORE_ADDR lmstart; /* lower addr bound of mapped object */
290 CORE_ADDR lmend; /* upper addr bound of mapped object */
291 char symbols_loaded; /* flag: symbols read in yet? */
292 char from_tty; /* flag: print msgs? */
293 struct objfile *objfile; /* objfile for loaded lib */
294 struct section_table *sections;
295 struct section_table *sections_end;
296 struct section_table *textsection;
300 static struct so_list *so_list_head; /* List of known shared objects */
301 static CORE_ADDR debug_base; /* Base of dynamic linker structures */
302 static CORE_ADDR breakpoint_addr; /* Address where end bkpt is set */
304 /* Local function prototypes */
307 sharedlibrary_command PARAMS ((char *, int));
310 enable_break PARAMS ((void));
313 disable_break PARAMS ((void));
316 info_sharedlibrary_command PARAMS ((char *, int));
319 symbol_add_stub PARAMS ((char *));
321 static struct so_list *
322 find_solib PARAMS ((struct so_list *));
324 static struct link_map *
325 first_link_map_member PARAMS ((void));
327 static struct link_map *
328 next_link_map_member PARAMS ((struct so_list *));
331 xfer_link_map_member PARAMS ((struct so_list *, struct link_map *));
334 locate_base PARAMS ((void));
337 solib_map_sections PARAMS ((struct so_list *));
343 solib_map_sections -- open bfd and build sections for shared lib
347 static void solib_map_sections (struct so_list *so)
351 Given a pointer to one of the shared objects in our list
352 of mapped objects, use the recorded name to open a bfd
353 descriptor for the object, build a section table, and then
354 relocate all the section addresses by the base address at
355 which the shared object was mapped.
359 In most (all?) cases the shared object file name recorded in the
360 dynamic linkage tables will be a fully qualified pathname. For
361 cases where it isn't, do we really mimic the systems search
362 mechanism correctly in the below code (particularly the tilde
367 solib_map_sections (so)
371 char *scratch_pathname;
373 struct section_table *p;
374 struct cleanup *old_chain;
377 filename = tilde_expand (so -> so_name);
378 old_chain = make_cleanup (free, filename);
380 scratch_chan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0,
382 if (scratch_chan < 0)
384 scratch_chan = openp (getenv ("LD_LIBRARY_PATH"), 1, filename,
385 O_RDONLY, 0, &scratch_pathname);
387 if (scratch_chan < 0)
389 perror_with_name (filename);
391 /* Leave scratch_pathname allocated. abfd->name will point to it. */
393 abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
396 close (scratch_chan);
397 error ("Could not open `%s' as an executable file: %s",
398 scratch_pathname, bfd_errmsg (bfd_get_error ()));
400 /* Leave bfd open, core_xfer_memory and "info files" need it. */
402 abfd -> cacheable = true;
404 if (!bfd_check_format (abfd, bfd_object))
406 error ("\"%s\": not in executable format: %s.",
407 scratch_pathname, bfd_errmsg (bfd_get_error ()));
409 if (build_section_table (abfd, &so -> sections, &so -> sections_end))
411 error ("Can't find the file sections in `%s': %s",
412 bfd_get_filename (exec_bfd), bfd_errmsg (bfd_get_error ()));
415 for (p = so -> sections; p < so -> sections_end; p++)
417 /* Relocate the section binding addresses as recorded in the shared
418 object's file by the offset to get the address to which the
419 object was actually mapped. */
420 p -> addr += LM_OFFSET (so);
421 p -> endaddr += LM_OFFSET (so);
422 so -> lmend = (CORE_ADDR) max (p -> endaddr, so -> lmend);
423 if (STREQ (p -> the_bfd_section -> name, ".text"))
425 so -> textsection = p;
429 /* Free the file names, close the file now. */
430 do_cleanups (old_chain);
437 locate_base -- locate the base address of dynamic linker structs
441 CORE_ADDR locate_base (void)
445 For both the SunOS and SVR4 shared library implementations, if the
446 inferior executable has been linked dynamically, there is a single
447 address somewhere in the inferior's data space which is the key to
448 locating all of the dynamic linker's runtime structures. This
449 address is the value of the symbol defined by the macro DEBUG_BASE.
450 The job of this function is to find and return that address, or to
451 return 0 if there is no such address (the executable is statically
454 For SunOS, the job is almost trivial, since the dynamic linker and
455 all of it's structures are statically linked to the executable at
456 link time. Thus the symbol for the address we are looking for has
457 already been added to the minimal symbol table for the executable's
458 objfile at the time the symbol file's symbols were read, and all we
459 have to do is look it up there. Note that we explicitly do NOT want
460 to find the copies in the shared library.
462 The SVR4 version is much more complicated because the dynamic linker
463 and it's structures are located in the shared C library, which gets
464 run as the executable's "interpreter" by the kernel. We have to go
465 to a lot more work to discover the address of DEBUG_BASE. Because
466 of this complexity, we cache the value we find and return that value
467 on subsequent invocations. Note there is no copy in the executable
470 Irix 5 is basically like SunOS.
472 Note that we can assume nothing about the process state at the time
473 we need to find this address. We may be stopped on the first instruc-
474 tion of the interpreter (C shared library), the first instruction of
475 the executable itself, or somewhere else entirely (if we attached
476 to the process for example).
483 struct minimal_symbol *msymbol;
484 CORE_ADDR address = 0;
486 msymbol = lookup_minimal_symbol (DEBUG_BASE, NULL, symfile_objfile);
487 if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
489 address = SYMBOL_VALUE_ADDRESS (msymbol);
498 first_link_map_member -- locate first member in dynamic linker's map
502 static struct link_map *first_link_map_member (void)
506 Read in a copy of the first member in the inferior's dynamic
507 link map from the inferior's dynamic linker structures, and return
508 a pointer to the link map descriptor.
511 static struct link_map *
512 first_link_map_member ()
514 struct obj_list *listp;
515 struct obj_list list_old;
517 static struct link_map first_lm;
519 CORE_ADDR next_lladdr;
521 /* We have not already read in the dynamic linking structures
522 from the inferior, lookup the address of the base structure. */
523 debug_base = locate_base ();
527 /* Get address of first list entry. */
528 read_memory (debug_base, (char *) &listp, sizeof (struct obj_list *));
533 /* Get first list entry. */
534 lladdr = (CORE_ADDR) listp;
535 read_memory (lladdr, (char *) &list_old, sizeof (struct obj_list));
537 /* The first entry in the list is the object file we are debugging,
539 next_lladdr = (CORE_ADDR) list_old.next;
541 #ifdef HANDLE_NEW_OBJ_LIST
542 if (list_old.data == NEW_OBJ_INFO_MAGIC)
544 Elf32_Obj_Info list_32;
546 read_memory (lladdr, (char *) &list_32, sizeof (Elf32_Obj_Info));
547 if (list_32.oi_size != sizeof (Elf32_Obj_Info))
549 next_lladdr = (CORE_ADDR) list_32.oi_next;
553 if (next_lladdr == 0)
556 first_lm.l_lladdr = next_lladdr;
565 next_link_map_member -- locate next member in dynamic linker's map
569 static struct link_map *next_link_map_member (so_list_ptr)
573 Read in a copy of the next member in the inferior's dynamic
574 link map from the inferior's dynamic linker structures, and return
575 a pointer to the link map descriptor.
578 static struct link_map *
579 next_link_map_member (so_list_ptr)
580 struct so_list *so_list_ptr;
582 struct link_map *lm = &so_list_ptr -> lm;
583 CORE_ADDR next_lladdr = lm -> l_next;
584 static struct link_map next_lm;
586 if (next_lladdr == 0)
588 /* We have hit the end of the list, so check to see if any were
589 added, but be quiet if we can't read from the target any more. */
592 if (lm -> l_variant == OBJ_LIST_OLD)
594 struct obj_list list_old;
596 status = target_read_memory (lm -> l_lladdr,
598 sizeof (struct obj_list));
599 next_lladdr = (CORE_ADDR) list_old.next;
601 #ifdef HANDLE_NEW_OBJ_LIST
602 else if (lm -> l_variant == OBJ_LIST_32)
604 Elf32_Obj_Info list_32;
605 status = target_read_memory (lm -> l_lladdr,
607 sizeof (Elf32_Obj_Info));
608 next_lladdr = (CORE_ADDR) list_32.oi_next;
612 if (status != 0 || next_lladdr == 0)
616 next_lm.l_lladdr = next_lladdr;
625 xfer_link_map_member -- set local variables from dynamic linker's map
629 static void xfer_link_map_member (so_list_ptr, lm)
633 Read in a copy of the requested member in the inferior's dynamic
634 link map from the inferior's dynamic linker structures, and fill
635 in the necessary so_list_ptr elements.
639 xfer_link_map_member (so_list_ptr, lm)
640 struct so_list *so_list_ptr;
643 struct obj_list list_old;
644 CORE_ADDR lladdr = lm -> l_lladdr;
645 struct link_map *new_lm = &so_list_ptr -> lm;
648 read_memory (lladdr, (char *) &list_old, sizeof (struct obj_list));
650 new_lm -> l_variant = OBJ_LIST_OLD;
651 new_lm -> l_lladdr = lladdr;
652 new_lm -> l_next = (CORE_ADDR) list_old.next;
654 #ifdef HANDLE_NEW_OBJ_LIST
655 if (list_old.data == NEW_OBJ_INFO_MAGIC)
657 Elf32_Obj_Info list_32;
659 read_memory (lladdr, (char *) &list_32, sizeof (Elf32_Obj_Info));
660 if (list_32.oi_size != sizeof (Elf32_Obj_Info))
662 new_lm -> l_variant = OBJ_LIST_32;
663 new_lm -> l_next = (CORE_ADDR) list_32.oi_next;
665 target_read_string ((CORE_ADDR) list_32.oi_pathname,
666 &so_list_ptr -> so_name,
667 list_32.oi_pathname_len + 1, &errcode);
669 memory_error (errcode, (CORE_ADDR) list_32.oi_pathname);
671 LM_ADDR (so_list_ptr) = (CORE_ADDR) list_32.oi_ehdr;
672 LM_OFFSET (so_list_ptr)
673 = (CORE_ADDR) list_32.oi_ehdr - (CORE_ADDR) list_32.oi_orig_ehdr;
680 read_memory ((CORE_ADDR) list_old.data, (char *) &obj_old,
681 sizeof (struct obj));
683 target_read_string ((CORE_ADDR) obj_old.o_path,
684 &so_list_ptr -> so_name,
687 memory_error (errcode, (CORE_ADDR) obj_old.o_path);
689 LM_ADDR (so_list_ptr) = (CORE_ADDR) obj_old.o_praw;
690 LM_OFFSET (so_list_ptr)
691 = (CORE_ADDR) obj_old.o_praw - obj_old.o_base_address;
694 solib_map_sections (so_list_ptr);
702 find_solib -- step through list of shared objects
706 struct so_list *find_solib (struct so_list *so_list_ptr)
710 This module contains the routine which finds the names of any
711 loaded "images" in the current process. The argument in must be
712 NULL on the first call, and then the returned value must be passed
713 in on subsequent calls. This provides the capability to "step" down
714 the list of loaded objects. On the last object, a NULL value is
718 static struct so_list *
719 find_solib (so_list_ptr)
720 struct so_list *so_list_ptr; /* Last lm or NULL for first one */
722 struct so_list *so_list_next = NULL;
723 struct link_map *lm = NULL;
726 if (so_list_ptr == NULL)
728 /* We are setting up for a new scan through the loaded images. */
729 if ((so_list_next = so_list_head) == NULL)
731 /* Find the first link map list member. */
732 lm = first_link_map_member ();
737 /* We have been called before, and are in the process of walking
738 the shared library list. Advance to the next shared object. */
739 lm = next_link_map_member (so_list_ptr);
740 so_list_next = so_list_ptr -> next;
742 if ((so_list_next == NULL) && (lm != NULL))
744 new = (struct so_list *) xmalloc (sizeof (struct so_list));
745 memset ((char *) new, 0, sizeof (struct so_list));
746 /* Add the new node as the next node in the list, or as the root
747 node if this is the first one. */
748 if (so_list_ptr != NULL)
750 so_list_ptr -> next = new;
757 xfer_link_map_member (new, lm);
759 return (so_list_next);
762 /* A small stub to get us past the arg-passing pinhole of catch_errors. */
765 symbol_add_stub (arg)
768 register struct so_list *so = (struct so_list *) arg; /* catch_errs bogon */
769 CORE_ADDR text_addr = 0;
771 if (so -> textsection)
772 text_addr = so -> textsection -> addr;
775 asection *lowest_sect;
777 /* If we didn't find a mapped non zero sized .text section, set up
778 text_addr so that the relocation in symbol_file_add does no harm. */
780 lowest_sect = bfd_get_section_by_name (so -> abfd, ".text");
781 if (lowest_sect == NULL)
782 bfd_map_over_sections (so -> abfd, find_lowest_section,
785 text_addr = bfd_section_vma (so -> abfd, lowest_sect) + LM_OFFSET (so);
788 so -> objfile = symbol_file_add (so -> so_name, so -> from_tty,
798 solib_add -- add a shared library file to the symtab and section list
802 void solib_add (char *arg_string, int from_tty,
803 struct target_ops *target)
810 solib_add (arg_string, from_tty, target)
813 struct target_ops *target;
815 register struct so_list *so = NULL; /* link map state variable */
817 /* Last shared library that we read. */
818 struct so_list *so_last = NULL;
824 if ((re_err = re_comp (arg_string ? arg_string : ".")) != NULL)
826 error ("Invalid regexp: %s", re_err);
829 /* Add the shared library sections to the section table of the
830 specified target, if any. */
833 /* Count how many new section_table entries there are. */
836 while ((so = find_solib (so)) != NULL)
838 if (so -> so_name[0])
840 count += so -> sections_end - so -> sections;
848 /* We must update the to_sections field in the core_ops structure
849 here, otherwise we dereference a potential dangling pointer
850 for each call to target_read/write_memory within this routine. */
851 update_coreops = core_ops.to_sections == target->to_sections;
853 /* Reallocate the target's section table including the new size. */
854 if (target -> to_sections)
856 old = target -> to_sections_end - target -> to_sections;
857 target -> to_sections = (struct section_table *)
858 xrealloc ((char *)target -> to_sections,
859 (sizeof (struct section_table)) * (count + old));
864 target -> to_sections = (struct section_table *)
865 xmalloc ((sizeof (struct section_table)) * count);
867 target -> to_sections_end = target -> to_sections + (count + old);
869 /* Update the to_sections field in the core_ops structure
873 core_ops.to_sections = target->to_sections;
874 core_ops.to_sections_end = target->to_sections_end;
877 /* Add these section table entries to the target's table. */
878 while ((so = find_solib (so)) != NULL)
880 if (so -> so_name[0])
882 count = so -> sections_end - so -> sections;
883 memcpy ((char *) (target -> to_sections + old),
885 (sizeof (struct section_table)) * count);
892 /* Now add the symbol files. */
893 while ((so = find_solib (so)) != NULL)
895 if (so -> so_name[0] && re_exec (so -> so_name))
897 so -> from_tty = from_tty;
898 if (so -> symbols_loaded)
902 printf_unfiltered ("Symbols already loaded for %s\n", so -> so_name);
905 else if (catch_errors
906 (symbol_add_stub, (char *) so,
907 "Error while reading shared library symbols:\n",
911 so -> symbols_loaded = 1;
916 /* Getting new symbols may change our opinion about what is
919 reinit_frame_cache ();
926 info_sharedlibrary_command -- code for "info sharedlibrary"
930 static void info_sharedlibrary_command ()
934 Walk through the shared library list and print information
935 about each attached library.
939 info_sharedlibrary_command (ignore, from_tty)
943 register struct so_list *so = NULL; /* link map state variable */
946 if (exec_bfd == NULL)
948 printf_unfiltered ("No exec file.\n");
951 while ((so = find_solib (so)) != NULL)
953 if (so -> so_name[0])
957 printf_unfiltered("%-12s%-12s%-12s%s\n", "From", "To", "Syms Read",
958 "Shared Object Library");
961 printf_unfiltered ("%-12s",
962 local_hex_string_custom ((unsigned long) LM_ADDR (so),
964 printf_unfiltered ("%-12s",
965 local_hex_string_custom ((unsigned long) so -> lmend,
967 printf_unfiltered ("%-12s", so -> symbols_loaded ? "Yes" : "No");
968 printf_unfiltered ("%s\n", so -> so_name);
971 if (so_list_head == NULL)
973 printf_unfiltered ("No shared libraries loaded at this time.\n");
981 solib_address -- check to see if an address is in a shared lib
985 char *solib_address (CORE_ADDR address)
989 Provides a hook for other gdb routines to discover whether or
990 not a particular address is within the mapped address space of
991 a shared library. Any address between the base mapping address
992 and the first address beyond the end of the last mapping, is
993 considered to be within the shared library address space, for
996 For example, this routine is called at one point to disable
997 breakpoints which are in shared libraries that are not currently
1002 solib_address (address)
1005 register struct so_list *so = 0; /* link map state variable */
1007 while ((so = find_solib (so)) != NULL)
1009 if (so -> so_name[0])
1011 if ((address >= (CORE_ADDR) LM_ADDR (so)) &&
1012 (address < (CORE_ADDR) so -> lmend))
1013 return (so->so_name);
1019 /* Called by free_all_symtabs */
1024 struct so_list *next;
1027 while (so_list_head)
1029 if (so_list_head -> sections)
1031 free ((PTR)so_list_head -> sections);
1033 if (so_list_head -> abfd)
1035 bfd_filename = bfd_get_filename (so_list_head -> abfd);
1036 if (!bfd_close (so_list_head -> abfd))
1037 warning ("cannot close \"%s\": %s",
1038 bfd_filename, bfd_errmsg (bfd_get_error ()));
1041 /* This happens for the executable on SVR4. */
1042 bfd_filename = NULL;
1044 next = so_list_head -> next;
1046 free ((PTR)bfd_filename);
1047 free (so_list_head->so_name);
1048 free ((PTR)so_list_head);
1049 so_list_head = next;
1058 disable_break -- remove the "mapping changed" breakpoint
1062 static int disable_break ()
1066 Removes the breakpoint that gets hit when the dynamic linker
1067 completes a mapping change.
1077 /* Note that breakpoint address and original contents are in our address
1078 space, so we just need to write the original contents back. */
1080 if (memory_remove_breakpoint (breakpoint_addr, shadow_contents) != 0)
1085 /* For the SVR4 version, we always know the breakpoint address. For the
1086 SunOS version we don't know it until the above code is executed.
1087 Grumble if we are stopped anywhere besides the breakpoint address. */
1089 if (stop_pc != breakpoint_addr)
1091 warning ("stopped at unknown breakpoint while handling shared libraries");
1101 enable_break -- arrange for dynamic linker to hit breakpoint
1105 int enable_break (void)
1109 This functions inserts a breakpoint at the entry point of the
1110 main executable, where all shared libraries are mapped in.
1116 if (symfile_objfile != NULL
1117 && target_insert_breakpoint (symfile_objfile->ei.entry_point,
1118 shadow_contents) == 0)
1120 breakpoint_addr = symfile_objfile->ei.entry_point;
1131 solib_create_inferior_hook -- shared library startup support
1135 void solib_create_inferior_hook()
1139 When gdb starts up the inferior, it nurses it along (through the
1140 shell) until it is ready to execute it's first instruction. At this
1141 point, this function gets called via expansion of the macro
1142 SOLIB_CREATE_INFERIOR_HOOK.
1144 For SunOS executables, this first instruction is typically the
1145 one at "_start", or a similar text label, regardless of whether
1146 the executable is statically or dynamically linked. The runtime
1147 startup code takes care of dynamically linking in any shared
1148 libraries, once gdb allows the inferior to continue.
1150 For SVR4 executables, this first instruction is either the first
1151 instruction in the dynamic linker (for dynamically linked
1152 executables) or the instruction at "start" for statically linked
1153 executables. For dynamically linked executables, the system
1154 first exec's /lib/libc.so.N, which contains the dynamic linker,
1155 and starts it running. The dynamic linker maps in any needed
1156 shared libraries, maps in the actual user executable, and then
1157 jumps to "start" in the user executable.
1159 For both SunOS shared libraries, and SVR4 shared libraries, we
1160 can arrange to cooperate with the dynamic linker to discover the
1161 names of shared libraries that are dynamically linked, and the
1162 base addresses to which they are linked.
1164 This function is responsible for discovering those names and
1165 addresses, and saving sufficient information about them to allow
1166 their symbols to be read at a later time.
1170 Between enable_break() and disable_break(), this code does not
1171 properly handle hitting breakpoints which the user might have
1172 set in the startup code or in the dynamic linker itself. Proper
1173 handling will probably have to wait until the implementation is
1174 changed to use the "breakpoint handler function" method.
1176 Also, what if child has exit()ed? Must exit loop somehow.
1180 solib_create_inferior_hook()
1182 if (!enable_break ())
1184 warning ("shared library handler failed to enable breakpoint");
1188 /* Now run the target. It will eventually hit the breakpoint, at
1189 which point all of the libraries will have been mapped in and we
1190 can go groveling around in the dynamic linker structures to find
1191 out what we need to know about them. */
1193 clear_proceed_status ();
1194 stop_soon_quietly = 1;
1195 stop_signal = TARGET_SIGNAL_0;
1198 target_resume (-1, 0, stop_signal);
1199 wait_for_inferior ();
1201 while (stop_signal != TARGET_SIGNAL_TRAP);
1203 /* We are now either at the "mapping complete" breakpoint (or somewhere
1204 else, a condition we aren't prepared to deal with anyway), so adjust
1205 the PC as necessary after a breakpoint, disable the breakpoint, and
1206 add any shared libraries that were mapped in. */
1208 if (DECR_PC_AFTER_BREAK)
1210 stop_pc -= DECR_PC_AFTER_BREAK;
1211 write_register (PC_REGNUM, stop_pc);
1214 if (!disable_break ())
1216 warning ("shared library handler failed to disable breakpoint");
1219 /* solib_add will call reinit_frame_cache.
1220 But we are stopped in the startup code and we might not have symbols
1221 for the startup code, so heuristic_proc_start could be called
1222 and will put out an annoying warning.
1223 Delaying the resetting of stop_soon_quietly until after symbol loading
1224 suppresses the warning. */
1226 solib_add ((char *) 0, 0, (struct target_ops *) 0);
1227 stop_soon_quietly = 0;
1234 sharedlibrary_command -- handle command to explicitly add library
1238 static void sharedlibrary_command (char *args, int from_tty)
1245 sharedlibrary_command (args, from_tty)
1250 solib_add (args, from_tty, (struct target_ops *) 0);
1256 add_com ("sharedlibrary", class_files, sharedlibrary_command,
1257 "Load shared object library symbols for files matching REGEXP.");
1258 add_info ("sharedlibrary", info_sharedlibrary_command,
1259 "Status of loaded shared object libraries.");
1262 (add_set_cmd ("auto-solib-add", class_support, var_zinteger,
1263 (char *) &auto_solib_add,
1264 "Set autoloading of shared library symbols.\n\
1265 If nonzero, symbols from all shared object libraries will be loaded\n\
1266 automatically when the inferior begins execution or when the dynamic linker\n\
1267 informs gdb that a new library has been loaded. Otherwise, symbols\n\
1268 must be loaded manually, using `sharedlibrary'.",
1274 /* Register that we are able to handle irix5 core file formats.
1275 This really is bfd_target_unknown_flavour */
1277 static struct core_fns irix5_core_fns =
1279 bfd_target_unknown_flavour,
1280 fetch_core_registers,
1285 _initialize_core_irix5 ()
1287 add_core_fns (&irix5_core_fns);