aboutsummaryrefslogtreecommitdiff
path: root/gdb/irix4-nat.c
diff options
context:
space:
mode:
authorJohn Gilmore <gnu@cygnus>1992-10-16 10:47:34 +0000
committerJohn Gilmore <gnu@cygnus>1992-10-16 10:47:34 +0000
commit2268d619462dfcaf7055aede6cde6f7015be29ba (patch)
treece9959452b2add6e01740f5860fcc2f73f97cabe /gdb/irix4-nat.c
parentc3bbca3aad11d35978fbd96c6672eb4cbe6960f3 (diff)
downloadgdb-2268d619462dfcaf7055aede6cde6f7015be29ba.zip
gdb-2268d619462dfcaf7055aede6cde6f7015be29ba.tar.gz
gdb-2268d619462dfcaf7055aede6cde6f7015be29ba.tar.bz2
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.
Diffstat (limited to 'gdb/irix4-nat.c')
-rw-r--r--gdb/irix4-nat.c35
1 files changed, 30 insertions, 5 deletions
diff --git a/gdb/irix4-nat.c b/gdb/irix4-nat.c
index 5127bc2..97b63dc 100644
--- a/gdb/irix4-nat.c
+++ b/gdb/irix4-nat.c
@@ -1,7 +1,8 @@
-/* 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.
@@ -21,12 +22,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#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? */
@@ -124,3 +126,26 @@ fill_fpregset (fpregsetp, regno)
if ((regno == -1) || (regno == FCRCS_REGNUM))
fpregsetp->fp_csr = *(unsigned *) &registers[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;
+}