aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJason Thorpe <thorpej@netbsd.org>2002-04-22 23:13:50 +0000
committerJason Thorpe <thorpej@netbsd.org>2002-04-22 23:13:50 +0000
commita33f755889cb0954f969aefe18acdffaf3b59d8f (patch)
tree7c268b18a3aba3642f32ee21078eb185eff9fe71 /gdb
parent47a73475e95599c23aca725826e85f0c057cf233 (diff)
downloadgdb-a33f755889cb0954f969aefe18acdffaf3b59d8f.zip
gdb-a33f755889cb0954f969aefe18acdffaf3b59d8f.tar.gz
gdb-a33f755889cb0954f969aefe18acdffaf3b59d8f.tar.bz2
* vax-tdep.c: Include regcache.h.
(vax_call_dummy_words): New. (sizeof_vax_call_dummy_words): New. (vax_fix_call_dummy): New function. (vax_saved_pc_after_call): Ditto. * config/vax/tm-vax.h: Don't include regcache.h. (SAVED_PC_AFTER_CALL): Use vax_saved_pc_after_call. (CALL_DUMMY): Remove. (CALL_DUMMY_WORDS): Define. (SIZEOF_CALL_DUMMY_WORDS): Define. (FIX_CALL_DUMMY): Use vax_fix_call_dummy.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/config/vax/tm-vax.h38
-rw-r--r--gdb/vax-tdep.c26
3 files changed, 53 insertions, 25 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index d2f8200..673c171 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,17 @@
+2002-04-22 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * vax-tdep.c: Include regcache.h.
+ (vax_call_dummy_words): New.
+ (sizeof_vax_call_dummy_words): New.
+ (vax_fix_call_dummy): New function.
+ (vax_saved_pc_after_call): Ditto.
+ * config/vax/tm-vax.h: Don't include regcache.h.
+ (SAVED_PC_AFTER_CALL): Use vax_saved_pc_after_call.
+ (CALL_DUMMY): Remove.
+ (CALL_DUMMY_WORDS): Define.
+ (SIZEOF_CALL_DUMMY_WORDS): Define.
+ (FIX_CALL_DUMMY): Use vax_fix_call_dummy.
+
2002-04-18 Michael Snyder <msnyder@redhat.com>
* arm-tdep.h: Change regnum defines to enums for ease of debugging.
diff --git a/gdb/config/vax/tm-vax.h b/gdb/config/vax/tm-vax.h
index 5bce565..ee6ec00 100644
--- a/gdb/config/vax/tm-vax.h
+++ b/gdb/config/vax/tm-vax.h
@@ -19,25 +19,16 @@
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include "regcache.h"
-
/* Offset from address of function to start of its code.
Zero on most machines. */
#define FUNCTION_START_OFFSET 2
-/* Advance PC across any function entry prologue instructions
- to reach some "real" code. */
-
extern CORE_ADDR vax_skip_prologue (CORE_ADDR);
#define SKIP_PROLOGUE(pc) (vax_skip_prologue (pc))
-/* Immediately after a function call, return the saved pc.
- Can't always go through the frames for this because on some machines
- the new frame is not set up until the new function executes
- some instructions. */
-
-#define SAVED_PC_AFTER_CALL(frame) FRAME_SAVED_PC(frame)
+#define SAVED_PC_AFTER_CALL(frame) vax_saved_pc_after_call ((frame))
+extern CORE_ADDR vax_saved_pc_after_call (struct frame_info *);
#define TARGET_UPAGES 14
#define TARGET_NBPG 512
@@ -177,23 +168,22 @@ extern void vax_push_dummy_frame (void);
#define POP_FRAME vax_pop_frame()
extern void vax_pop_frame (void);
-/* This sequence of words is the instructions
- calls #69, @#32323232
- bpt
- Note this is 8 bytes. */
+#define CALL_DUMMY_WORDS vax_call_dummy_words
+extern LONGEST vax_call_dummy_words[];
-#define CALL_DUMMY {0x329f69fb, 0x03323232}
+#define SIZEOF_CALL_DUMMY_WORDS sizeof_vax_call_dummy_words
+extern int sizeof_vax_call_dummy_words;
-#define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */
+struct value;
+#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
+ vax_fix_call_dummy ((dummyname), (pc), (fun), (nargs), (args), (type), \
+ (gcc_p))
+extern void vax_fix_call_dummy (char *, CORE_ADDR, CORE_ADDR, int,
+ struct value **, struct type *, int);
-#define CALL_DUMMY_BREAKPOINT_OFFSET 7
-
-/* Insert the specified number of args and function address
- into a call sequence of the above form stored at DUMMYNAME. */
+#define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */
-#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
-{ *((char *) dummyname + 1) = nargs; \
- *(int *)((char *) dummyname + 3) = fun; }
+#define CALL_DUMMY_BREAKPOINT_OFFSET 7
/* If vax pcc says CHAR or SHORT, it provides the correct address. */
diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c
index d8cc678..8fc2997 100644
--- a/gdb/vax-tdep.c
+++ b/gdb/vax-tdep.c
@@ -23,6 +23,7 @@
#include "symtab.h"
#include "opcode/vax.h"
#include "gdbcore.h"
+#include "regcache.h"
#include "frame.h"
#include "value.h"
@@ -234,6 +235,24 @@ vax_pop_frame (void)
write_register (SP_REGNUM, fp);
flush_cached_frames ();
}
+
+/* The VAX call dummy sequence:
+
+ calls #69, @#32323232
+ bpt
+
+ It is 8 bytes long. The address and argc are patched by
+ vax_fix_call_dummy(). */
+LONGEST vax_call_dummy_words[] = { 0x329f69fb, 0x03323232 };
+int sizeof_vax_call_dummy_words = sizeof(vax_call_dummy_words);
+
+void
+vax_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs,
+ struct value **args, struct type *type, int gcc_p)
+{
+ dummy[1] = nargs;
+ store_unsigned_integer (dummy + 3, 4, fun);
+}
void
vax_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
@@ -288,7 +307,12 @@ vax_skip_prologue (CORE_ADDR pc)
return pc;
}
-
+CORE_ADDR
+vax_saved_pc_after_call (struct frame_info *frame)
+{
+ return (FRAME_SAVED_PC(frame));
+}
+
/* Print the vax instruction at address MEMADDR in debugged memory,
from disassembler info INFO.
Returns length of the instruction, in bytes. */