From a33f755889cb0954f969aefe18acdffaf3b59d8f Mon Sep 17 00:00:00 2001 From: Jason Thorpe Date: Mon, 22 Apr 2002 23:13:50 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 14 ++++++++++++++ gdb/config/vax/tm-vax.h | 38 ++++++++++++++------------------------ gdb/vax-tdep.c | 26 +++++++++++++++++++++++++- 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 + + * 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 * 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. */ -- 2.7.4