* vax-tdep.c: Include regcache.h.
authorJason Thorpe <thorpej@netbsd.org>
Mon, 22 Apr 2002 23:13:50 +0000 (23:13 +0000)
committerJason Thorpe <thorpej@netbsd.org>
Mon, 22 Apr 2002 23:13:50 +0000 (23:13 +0000)
(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.

gdb/ChangeLog
gdb/config/vax/tm-vax.h
gdb/vax-tdep.c

index d2f82004507a42af0f611c6681eeb774dff3008f..673c171dc7bc51cc7cb6c9931c175575ccd0ab63 100644 (file)
@@ -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.
index 5bce565782ad7874a88ad8823eab8538dfbf850a..ee6ec00805d08d03471bc9ad717810154400f030 100644 (file)
    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.  */
 
index d8cc678e776cae5c2cd87edfdf3979cad42b44cc..8fc299763de4ba263df46100a8929ffee6aaaad4 100644 (file)
@@ -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);
+}
 \f
 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));
+}
+\f
 /* Print the vax instruction at address MEMADDR in debugged memory,
    from disassembler info INFO.
    Returns length of the instruction, in bytes.  */