* doc/gdbint.texinfo: Update GET_LONGJMP_TARGET, L_SET doc.
* irix4-nat.c, mips-nat.c (JB_ELEMENT_SIZE, get_longjmp_target):
Move from mips-tdep.c and tm-{irix3,mips}.h.
* mips-nat.c: Remove a bunch of code that was ifdef'd out of
native MIPS ports.
* nm-irix3.h, nm-mips.h (GET_LONGJMP_TARGET): Move from tm-irix3.h
and tm-mips.h.
* ultra3-nat.c (register_addr): Move from ultra3-xdep.c.
(fetch_core_registers): Fix bfd_seek arguments.
+Fri Oct 16 03:34:01 1992 John Gilmore (gnu@cygnus.com)
+
+ Avoid longjmp()-catching compilation errors in cross-ports.
+
+ * doc/gdbint.texinfo: Update GET_LONGJMP_TARGET, L_SET doc.
+ * irix4-nat.c, mips-nat.c (JB_ELEMENT_SIZE, get_longjmp_target):
+ Move from mips-tdep.c and tm-{irix3,mips}.h.
+ * mips-nat.c: Remove a bunch of code that was ifdef'd out of
+ native MIPS ports.
+ * nm-irix3.h, nm-mips.h (GET_LONGJMP_TARGET): Move from tm-irix3.h
+ and tm-mips.h.
+
+ * ultra3-nat.c (register_addr): Move from ultra3-xdep.c.
+ (fetch_core_registers): Fix bfd_seek arguments.
+
Fri Oct 16 03:02:28 1992 John Gilmore (gnu@cygnus.com)
Make core files work again (add back the `core' target).
-/* Target-dependent code for the MIPS architecture, for GDB, the GNU Debugger.
+/* Native support for the SGI Iris running IRIX version 4, for GDB.
Copyright 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
+ Implemented for Irix 4.x by Garrett A. Wollman.
This file is part of GDB.
#include "defs.h"
-/*
- * Implemented for Irix 4.x by Garrett A. Wollman
- */
-
#include <sys/time.h>
#include <sys/procfs.h>
+#include <setjmp.h> /* For JB_XXX. */
+
+/* Size of elements in jmpbuf */
+
+#define JB_ELEMENT_SIZE 4
typedef unsigned int greg_t; /* why isn't this defined? */
if ((regno == -1) || (regno == FCRCS_REGNUM))
fpregsetp->fp_csr = *(unsigned *) ®isters[REGISTER_BYTE(FCRCS_REGNUM)];
}
+
+
+/* Figure out where the longjmp will land.
+ We expect the first arg to be a pointer to the jmp_buf structure from which
+ we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
+ This routine returns true on success. */
+
+int
+get_longjmp_target(pc)
+ CORE_ADDR *pc;
+{
+ CORE_ADDR jb_addr;
+
+ jb_addr = read_register(A0_REGNUM);
+
+ if (target_read_memory(jb_addr + JB_PC * JB_ELEMENT_SIZE, pc,
+ sizeof(CORE_ADDR)))
+ return 0;
+
+ SWAP_TARGET_AND_HOST(pc, sizeof(CORE_ADDR));
+
+ return 1;
+}
-/* Low level MIPS interface to ptrace, for GDB when running under Unix.
+/* Low level DECstation interface to ptrace, for GDB when running native.
Copyright 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
#include "defs.h"
#include "inferior.h"
#include "gdbcore.h"
+#include <sys/ptrace.h>
+#include <setjmp.h> /* For JB_XXX. */
-/* For now we stub this out; sgi core format is super-hairy (and completely
- different in the new release).
- For most mips systems, this function is defined in coredep.c. */
-
-#if defined(sgi)
-void
-fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
- char *core_reg_sect;
- unsigned core_reg_size;
- int which;
- unsigned int reg_addr;
-{
- return;
-}
-#endif
-
-/* Access to the inferior is only good for native systems, not cross.
- I am not sure why this is stubbed out on SGI... --gnu@cygnus.com */
-
-#if defined(sgi) || !defined(GDB_TARGET_IS_MIPS)
-
-/* ARGSUSED */
-void
-fetch_inferior_registers (regno)
- int regno;
-{
- return;
-}
-
-/* ARGSUSED */
-void
-store_inferior_registers (regno)
- int regno;
-{
- return;
-}
-
-
-#else
-
-/* DECstation native... */
+/* Size of elements in jmpbuf */
-#include <sys/ptrace.h>
+#define JB_ELEMENT_SIZE 4
/* Map gdb internal register number to ptrace ``address''.
These ``addresses'' are defined in DECstation <sys/ptrace.h> */
}
}
-#endif /* sgi */
+/* Figure out where the longjmp will land.
+ We expect the first arg to be a pointer to the jmp_buf structure from which
+ we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
+ This routine returns true on success. */
+
+int
+get_longjmp_target(pc)
+ CORE_ADDR *pc;
+{
+ CORE_ADDR jb_addr;
+
+ jb_addr = read_register(A0_REGNUM);
+ if (target_read_memory(jb_addr + JB_PC * JB_ELEMENT_SIZE, pc,
+ sizeof(CORE_ADDR)))
+ return 0;
+
+ SWAP_TARGET_AND_HOST(pc, sizeof(CORE_ADDR));
+
+ return 1;
+}
#include <signal.h>
#include <sys/ioctl.h>
-#ifdef sgi
-/* Must do it this way only for SGIs, as other mips platforms get their
- JB_ symbols from machine/pcb.h (included via sys/user.h). */
-#include <setjmp.h>
-#endif
-
#include "gdbcore.h"
#include "symfile.h"
#include "objfiles.h"
return pc;
}
-
-/* Figure out where the longjmp will land.
- We expect the first arg to be a pointer to the jmp_buf structure from which
- we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
- This routine returns true on success. */
-
-int
-get_longjmp_target(pc)
- CORE_ADDR *pc;
-{
- CORE_ADDR jb_addr;
-
- jb_addr = read_register(A0_REGNUM);
-
- if (target_read_memory(jb_addr + JB_PC * JB_ELEMENT_SIZE, pc,
- sizeof(CORE_ADDR)))
- return 0;
-
- SWAP_TARGET_AND_HOST(pc, sizeof(CORE_ADDR));
-
- return 1;
-}
-/* Definitions for irix3 native support.
-
-Copyright (C) 1991, 1992 Free Software Foundation, Inc.
+/* Definitions for SGI irix3 native support.
+ Copyright 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-/* Don't need special routines for the SGI -- we can use infptrace.c */
+/* Don't need special routines for Irix v3 -- we can use infptrace.c */
#undef FETCH_INFERIOR_REGISTERS
#define U_REGS_OFFSET 0
+
+/* Figure out where the longjmp will land. We expect that we have just entered
+ longjmp and haven't yet setup the stack frame, so the args are still in the
+ argument regs. a0 (CALL_ARG0) points at the jmp_buf structure from which we
+ extract the pc (JB_PC) that we will land at. The pc is copied into ADDR.
+ This routine returns true on success */
+
+#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
/* Override copies of {fetch,store}_inferior_registers in infptrace.c. */
#define FETCH_INFERIOR_REGISTERS
+
+/* Figure out where the longjmp will land. We expect that we have just entered
+ longjmp and haven't yet setup the stack frame, so the args are still in the
+ argument regs. a0 (CALL_ARG0) points at the jmp_buf structure from which we
+ extract the pc (JB_PC) that we will land at. The pc is copied into ADDR.
+ This routine returns true on success */
+
+#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
struct frame_saved_regs *saved_regs;
#define INIT_EXTRA_FRAME_INFO(fromleaf, fci) init_extra_frame_info(fci)
-
-/* Size of elements in jmpbuf */
-
-#define JB_ELEMENT_SIZE 4
-
-/* Figure out where the longjmp will land. We expect that we have just entered
- longjmp and haven't yet setup the stack frame, so the args are still in the
- argument regs. a0 (CALL_ARG0) points at the jmp_buf structure from which we
- extract the pc (JB_PC) that we will land at. The pc is copied into ADDR.
- This routine returns true on success */
-
-/* Note that caller must #include <setjmp.h> in order to get def of JB_* */
-#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
#define FRAME_SPECIFICATION_DYADIC
#define STAB_REG_TO_REGNUM(num) ((num) < 32 ? (num) : (num)+FP0_REGNUM-32)
-
-/* Size of elements in jmpbuf */
-
-#define JB_ELEMENT_SIZE 4
-
-/* Figure out where the longjmp will land. We expect that we have just entered
- longjmp and haven't yet setup the stack frame, so the args are still in the
- argument regs. a0 (CALL_ARG0) points at the jmp_buf structure from which we
- extract the pc (JB_PC) that we will land at. The pc is copied into ADDR.
- This routine returns true on success */
-
-/* Note that caller must #include <setjmp.h> in order to get def of JB_* */
-#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
-/* Host-dependent code for GDB, for NYU Ultra3 running Sym1 OS.
+/* Native-dependent code for GDB, for NYU Ultra3 running Sym1 OS.
Copyright (C) 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
Contributed by David Wood (wood@nyu.edu) at New York University.
#include <sys/file.h>
#include <sys/stat.h>
+/* Assumes support for AMD's Binary Compatibility Standard
+ for ptrace(). If you define ULTRA3, the ultra3 extensions to
+ ptrace() are used allowing the reading of more than one register
+ at a time.
+
+ This file assumes KERNEL_DEBUGGING is turned off. This means
+ that if the user/gdb tries to read gr64-gr95 or any of the
+ protected special registers we silently return -1 (see the
+ CANNOT_STORE/FETCH_REGISTER macros). */
+#define ULTRA3
+
+#if !defined (offsetof)
+# define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
+#endif
+
+extern int errno;
+struct ptrace_user pt_struct;
+
/* Get all available registers from the inferior. Registers that are
* defined in REGISTER_NAMES, but not available to the user/gdb are
* supplied as -1. This may include gr64-gr95 and the protected special
for (regno = 0 ; regno < NUM_REGS; regno++) {
if (!CANNOT_FETCH_REGISTER(regno)) {
- val = bfd_seek (core_bfd, register_addr (regno, 0), 0);
+ val = bfd_seek (core_bfd, (file_ptr) register_addr (regno, 0), L_SET);
if (val < 0 || (val = bfd_read (buf, sizeof buf, 1, core_bfd)) < 0) {
char * buffer = (char *) alloca (strlen (reg_names[regno]) + 35);
strcpy (buffer, "Reading core register ");
}
+/*
+ * Takes a register number as defined in tm.h via REGISTER_NAMES, and maps
+ * it to an offset in a struct ptrace_user defined by AMD's BCS.
+ * That is, it defines the mapping between gdb register numbers and items in
+ * a struct ptrace_user.
+ * A register protection scheme is set up here. If a register not
+ * available to the user is specified in 'regno', then an address that
+ * will cause ptrace() to fail is returned.
+ */
+unsigned int
+register_addr (regno,blockend)
+ unsigned int regno;
+ char *blockend;
+{
+ if ((regno >= LR0_REGNUM) && (regno < LR0_REGNUM + 128)) {
+ return(offsetof(struct ptrace_user,pt_lr[regno-LR0_REGNUM]));
+ } else if ((regno >= GR96_REGNUM) && (regno < GR96_REGNUM + 32)) {
+ return(offsetof(struct ptrace_user,pt_gr[regno-GR96_REGNUM]));
+ } else {
+ switch (regno) {
+ case GR1_REGNUM: return(offsetof(struct ptrace_user,pt_gr1));
+ case CPS_REGNUM: return(offsetof(struct ptrace_user,pt_psr));
+ case NPC_REGNUM: return(offsetof(struct ptrace_user,pt_pc0));
+ case PC_REGNUM: return(offsetof(struct ptrace_user,pt_pc1));
+ case PC2_REGNUM: return(offsetof(struct ptrace_user,pt_pc2));
+ case IPC_REGNUM: return(offsetof(struct ptrace_user,pt_ipc));
+ case IPA_REGNUM: return(offsetof(struct ptrace_user,pt_ipa));
+ case IPB_REGNUM: return(offsetof(struct ptrace_user,pt_ipb));
+ case Q_REGNUM: return(offsetof(struct ptrace_user,pt_q));
+ case BP_REGNUM: return(offsetof(struct ptrace_user,pt_bp));
+ case FC_REGNUM: return(offsetof(struct ptrace_user,pt_fc));
+ default:
+ fprintf_filtered(stderr,"register_addr():Bad register %s (%d)\n",
+ reg_names[regno],regno);
+ return(0xffffffff); /* Should make ptrace() fail */
+ }
+ }
+}
+
+
#include <sys/file.h>
#include <sys/stat.h>
-/* Assumes support for AMD's Binary Compatibility Standard
- for ptrace(). If you define ULTRA3, the ultra3 extensions to
- ptrace() are used allowing the reading of more than one register
- at a time.
-
- This file assumes KERNEL_DEBUGGING is turned off. This means
- that if the user/gdb tries to read gr64-gr95 or any of the
- protected special registers we silently return -1 (see the
- CANNOT_STORE/FETCH_REGISTER macros). */
-#define ULTRA3
-
-#if !defined (offsetof)
-# define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
-#endif
-
-extern int errno;
-struct ptrace_user pt_struct;
-
-/*
- * Takes a register number as defined in tm.h via REGISTER_NAMES, and maps
- * it to an offset in a struct ptrace_user defined by AMD's BCS.
- * That is, it defines the mapping between gdb register numbers and items in
- * a struct ptrace_user.
- * A register protection scheme is set up here. If a register not
- * available to the user is specified in 'regno', then an address that
- * will cause ptrace() to fail is returned.
- */
-unsigned int
-register_addr (regno,blockend)
- unsigned int regno;
- char *blockend;
-{
- if ((regno >= LR0_REGNUM) && (regno < LR0_REGNUM + 128)) {
- return(offsetof(struct ptrace_user,pt_lr[regno-LR0_REGNUM]));
- } else if ((regno >= GR96_REGNUM) && (regno < GR96_REGNUM + 32)) {
- return(offsetof(struct ptrace_user,pt_gr[regno-GR96_REGNUM]));
- } else {
- switch (regno) {
- case GR1_REGNUM: return(offsetof(struct ptrace_user,pt_gr1));
- case CPS_REGNUM: return(offsetof(struct ptrace_user,pt_psr));
- case NPC_REGNUM: return(offsetof(struct ptrace_user,pt_pc0));
- case PC_REGNUM: return(offsetof(struct ptrace_user,pt_pc1));
- case PC2_REGNUM: return(offsetof(struct ptrace_user,pt_pc2));
- case IPC_REGNUM: return(offsetof(struct ptrace_user,pt_ipc));
- case IPA_REGNUM: return(offsetof(struct ptrace_user,pt_ipa));
- case IPB_REGNUM: return(offsetof(struct ptrace_user,pt_ipb));
- case Q_REGNUM: return(offsetof(struct ptrace_user,pt_q));
- case BP_REGNUM: return(offsetof(struct ptrace_user,pt_bp));
- case FC_REGNUM: return(offsetof(struct ptrace_user,pt_fc));
- default:
- fprintf_filtered(stderr,"register_addr():Bad register %s (%d)\n",
- reg_names[regno],regno);
- return(0xffffffff); /* Should make ptrace() fail */
- }
- }
-}
-
-
/* Assorted operating system circumventions */
#ifdef SYM1