summaryrefslogtreecommitdiff
path: root/gdb/config/ns32k
diff options
context:
space:
mode:
authorJ.T. Conklin <jtc@redback.com>2001-01-22 20:23:25 +0000
committerJ.T. Conklin <jtc@redback.com>2001-01-22 20:23:25 +0000
commit24a557da19c22ffbc17c27fdd7c4809b794e8cad (patch)
tree81ad5571595e4a4bc46682cc034fbe415acbd6df /gdb/config/ns32k
parent8d5102286be33c4f5ccfe67dd6117d5a27c39d2f (diff)
downloadgdb-24a557da19c22ffbc17c27fdd7c4809b794e8cad.tar.gz
* ns32k-tdep.c: #include "frame.h"
* config/ns32k/tm-umax.h (FRAME_FIND_SAVED_REGS): Restore. It appears to have been inadvertantly removed sometime in May 1999. * Revert 2000-11-09 changes where shared library objects were moved from NATDEPFILES to TDEPFILES on NetBSD targets. While we'd like to be able to debug dynamically linked executables, this makes it impossible to build a cross debugger on a many hosts. * config/i386/nbsd.mt: Remove solib.o, solib-svr4.o from TDEPFILES. * config/i386/nbsdelf.mt: Likewise. * config/m68k/nbsd.mt: Likewise. * config/ns32k/nbsd.mt: Likewise. * config/powerpc/nbsd.mt: Likewise. * config/sparc/nbsd.mt: Likewise. * config/sparc/nbsdelf.mt: Likewise. * config/i386/nbsd.mh: Add solib.o, solib-svr4.o to NATDEPFILES. * config/i386/nbsdelf.mh: Likewise. * config/m68k/nbsd.mh: Likewise. * config/ns32k/nbsd.mh: Likewise. * config/powerpc/nbsd.mh: Likewise. * config/sparc/nbsd.mh: Likewise.
Diffstat (limited to 'gdb/config/ns32k')
-rw-r--r--gdb/config/ns32k/nbsd.mh2
-rw-r--r--gdb/config/ns32k/nbsd.mt2
-rw-r--r--gdb/config/ns32k/tm-umax.h37
3 files changed, 37 insertions, 4 deletions
diff --git a/gdb/config/ns32k/nbsd.mh b/gdb/config/ns32k/nbsd.mh
index 14d374c715e..711cbe4f05c 100644
--- a/gdb/config/ns32k/nbsd.mh
+++ b/gdb/config/ns32k/nbsd.mh
@@ -1,5 +1,5 @@
# Host: PC532 running NetBSD
XDEPFILES=
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o ns32knbsd-nat.o
+NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o ns32knbsd-nat.o solib.o solib-svr4.o
XM_FILE= xm-nbsd.h
NAT_FILE= nm-nbsd.h
diff --git a/gdb/config/ns32k/nbsd.mt b/gdb/config/ns32k/nbsd.mt
index 1656978b237..6eb86378a43 100644
--- a/gdb/config/ns32k/nbsd.mt
+++ b/gdb/config/ns32k/nbsd.mt
@@ -1,5 +1,5 @@
# Target: PC532 running NetBSD
-TDEPFILES= ns32k-tdep.o solib.o solib-svr4.o
+TDEPFILES= ns32k-tdep.o
TM_FILE= tm-nbsd.h
GDBSERVER_DEPFILES= low-nbsd.o
diff --git a/gdb/config/ns32k/tm-umax.h b/gdb/config/ns32k/tm-umax.h
index db8c978177a..7b2a4b59e23 100644
--- a/gdb/config/ns32k/tm-umax.h
+++ b/gdb/config/ns32k/tm-umax.h
@@ -222,6 +222,12 @@ extern CORE_ADDR umax_skip_prologue (CORE_ADDR);
extern CORE_ADDR ns32k_get_enter_addr ();
+/* Return number of args passed to a frame.
+ Can return -1, meaning no way to tell. */
+
+extern int umax_frame_num_args (struct frame_info *fi);
+#define FRAME_NUM_ARGS(fi) (umax_frame_num_args ((fi)))
+
/* Return number of bytes at start of arglist that are not really args. */
#define FRAME_ARGS_SKIP 8
@@ -232,8 +238,35 @@ extern CORE_ADDR ns32k_get_enter_addr ();
ways in the stack frame. sp is even more special:
the address we return for it IS the sp for the next frame. */
-extern int umax_frame_num_args (struct frame_info *fi);
-#define FRAME_NUM_ARGS(fi) (umax_frame_num_args ((fi)))
+#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
+{ \
+ register int regmask, regnum; \
+ int localcount; \
+ register CORE_ADDR enter_addr; \
+ register CORE_ADDR next_addr; \
+ \
+ memset (&(frame_saved_regs), '\0', sizeof (frame_saved_regs)); \
+ enter_addr = ns32k_get_enter_addr ((frame_info)->pc); \
+ if (enter_addr > 1) \
+ { \
+ regmask = read_memory_integer (enter_addr+1, 1) & 0xff; \
+ localcount = ns32k_localcount (enter_addr); \
+ next_addr = (frame_info)->frame + localcount; \
+ for (regnum = 0; regnum < 8; regnum++, regmask >>= 1) \
+ (frame_saved_regs).regs[regnum] = (regmask & 1) ? \
+ (next_addr -= 4) : 0; \
+ (frame_saved_regs).regs[SP_REGNUM] = (frame_info)->frame + 4;\
+ (frame_saved_regs).regs[PC_REGNUM] = (frame_info)->frame + 4;\
+ (frame_saved_regs).regs[FP_REGNUM] = \
+ (read_memory_integer ((frame_info)->frame, 4));\
+ } \
+ else if (enter_addr == 1) \
+ { \
+ CORE_ADDR sp = read_register (SP_REGNUM); \
+ (frame_saved_regs).regs[PC_REGNUM] = sp; \
+ (frame_saved_regs).regs[SP_REGNUM] = sp + 4; \
+ } \
+}
/* Things needed for making the inferior call functions. */