aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Thorpe <thorpej@netbsd.org>2002-04-22 19:44:05 +0000
committerJason Thorpe <thorpej@netbsd.org>2002-04-22 19:44:05 +0000
commitab62c900e2060381046d1fe998b1516fc81c8072 (patch)
tree9bb4dc8e0eab43b5bca77aaf8fcc23abd7780ea9
parent7232b100b9274cbd08ce3fed4ef4ac093ec4b0cb (diff)
downloadgdb-ab62c900e2060381046d1fe998b1516fc81c8072.zip
gdb-ab62c900e2060381046d1fe998b1516fc81c8072.tar.gz
gdb-ab62c900e2060381046d1fe998b1516fc81c8072.tar.bz2
* vax-tdep.c (vax_frame_init_saved_regs): New function.
* config/vax/tm-vax.h (FRAME_FIND_SAVED_REGS): Remove. (FRAME_INIT_SAVED_REGS): New macro.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/config/vax/tm-vax.h26
-rw-r--r--gdb/vax-tdep.c34
3 files changed, 42 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 045edf3..e64e688 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2002-04-22 Jason Thorpe <thorpej@wasabisystems.com>
+ * vax-tdep.c (vax_frame_init_saved_regs): New function.
+ * config/vax/tm-vax.h (FRAME_FIND_SAVED_REGS): Remove.
+ (FRAME_INIT_SAVED_REGS): New macro.
+
+2002-04-22 Jason Thorpe <thorpej@wasabisystems.com>
+
* MAINTAINERS: Reflect that the Alpha target has been multi-arch'd.
2002-04-22 Jason Thorpe <thorpej@wasabisystems.com>
diff --git a/gdb/config/vax/tm-vax.h b/gdb/config/vax/tm-vax.h
index 31acf00..90819f4 100644
--- a/gdb/config/vax/tm-vax.h
+++ b/gdb/config/vax/tm-vax.h
@@ -215,30 +215,8 @@ extern int vax_frame_num_args (struct frame_info *fi);
#define FRAME_ARGS_SKIP 4
-/* Put here the code to store, into a struct frame_saved_regs,
- the addresses of the saved registers of frame described by FRAME_INFO.
- This includes special registers such as pc and fp saved in special
- ways in the stack frame. sp is even more special:
- the address we return for it IS the sp for the next frame. */
-
-#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
-{ register int regnum; \
- register int regmask = read_memory_integer ((frame_info)->frame+4, 4) >> 16; \
- register CORE_ADDR next_addr; \
- memset (&frame_saved_regs, '\0', sizeof frame_saved_regs); \
- next_addr = (frame_info)->frame + 16; \
- /* Regmask's low bit is for register 0, \
- which is the first one that would be pushed. */ \
- for (regnum = 0; regnum < 12; regnum++, regmask >>= 1) \
- (frame_saved_regs).regs[regnum] = (regmask & 1) ? (next_addr += 4) : 0; \
- (frame_saved_regs).regs[SP_REGNUM] = next_addr + 4; \
- if (read_memory_integer ((frame_info)->frame + 4, 4) & 0x20000000) \
- (frame_saved_regs).regs[SP_REGNUM] += 4 + 4 * read_memory_integer (next_addr + 4, 4); \
- (frame_saved_regs).regs[PC_REGNUM] = (frame_info)->frame + 16; \
- (frame_saved_regs).regs[FP_REGNUM] = (frame_info)->frame + 12; \
- (frame_saved_regs).regs[AP_REGNUM] = (frame_info)->frame + 8; \
- (frame_saved_regs).regs[PS_REGNUM] = (frame_info)->frame + 4; \
-}
+#define FRAME_INIT_SAVED_REGS(fi) vax_frame_init_saved_regs ((fi))
+extern void vax_frame_init_saved_regs (struct frame_info *);
/* Things needed for making the inferior call functions. */
diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c
index 053041e..15cff55 100644
--- a/gdb/vax-tdep.c
+++ b/gdb/vax-tdep.c
@@ -93,6 +93,40 @@ vax_register_virtual_type (int regno)
return (builtin_type_int);
}
+void
+vax_frame_init_saved_regs (struct frame_info *frame)
+{
+ int regnum, regmask;
+ CORE_ADDR next_addr;
+
+ if (frame->saved_regs)
+ return;
+
+ frame_saved_regs_zalloc (frame);
+
+ regmask = read_memory_integer (frame->frame + 4, 4) >> 16;
+
+ next_addr = frame->frame + 16;
+
+ /* regmask's low bit is for register 0, which is the first one
+ what would be pushed. */
+ for (regnum = 0; regnum < AP_REGNUM; regnum++)
+ {
+ if (regmask & (1 << regnum))
+ frame->saved_regs[regnum] = next_addr += 4;
+ }
+
+ frame->saved_regs[SP_REGNUM] = next_addr + 4;
+ if (regmask & (1 << FP_REGNUM))
+ frame->saved_regs[SP_REGNUM] +=
+ 4 + (4 * read_memory_integer (next_addr + 4, 4));
+
+ frame->saved_regs[PC_REGNUM] = frame->frame + 16;
+ frame->saved_regs[FP_REGNUM] = frame->frame + 12;
+ frame->saved_regs[AP_REGNUM] = frame->frame + 8;
+ frame->saved_regs[PS_REGNUM] = frame->frame + 4;
+}
+
/* Advance PC across any function entry prologue instructions
to reach some "real" code. */