aboutsummaryrefslogtreecommitdiff
path: root/gdb/config/v850
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1996-10-11 22:50:42 +0000
committerStu Grossman <grossman@cygnus>1996-10-11 22:50:42 +0000
commite5a2ac8b3f597f5d7f24f592dc897118a1e106ec (patch)
tree48aad7c3dc3e8648af86c3f3cf2f5a0355e4d81c /gdb/config/v850
parent693e9bf6555521945a6953eb978a90347c3d7cc6 (diff)
downloadgdb-e5a2ac8b3f597f5d7f24f592dc897118a1e106ec.zip
gdb-e5a2ac8b3f597f5d7f24f592dc897118a1e106ec.tar.gz
gdb-e5a2ac8b3f597f5d7f24f592dc897118a1e106ec.tar.bz2
* frame.h: Move definition of struct frame_saved_args to before
struct frame to make it possible to use frame_saved_args in EXTRA_FRAME_INFO macro. * v850-tdep.c config/v850/tm-v850.h: Lotsa new functions and macros to make frame operations (such as backtrace) work.
Diffstat (limited to 'gdb/config/v850')
-rw-r--r--gdb/config/v850/tm-v850.h47
1 files changed, 36 insertions, 11 deletions
diff --git a/gdb/config/v850/tm-v850.h b/gdb/config/v850/tm-v850.h
index b09b25a..5aa11b5 100644
--- a/gdb/config/v850/tm-v850.h
+++ b/gdb/config/v850/tm-v850.h
@@ -41,6 +41,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define SP_REGNUM 3
#define FP_REGNUM 2
+#define V0_REGNUM 10
+#define V1_REGNUM 11
#define RP_REGNUM 31
#define PC_REGNUM 64
@@ -58,26 +60,49 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define DECR_PC_AFTER_BREAK 0
-#define POP_FRAME warning ("POP_FRAME not implemented yet!")
-
#define INNER_THAN <
-#define FRAME_ARGS_SKIP 4
-
#define SAVED_PC_AFTER_CALL(fi) read_register (RP_REGNUM)
-#define FRAME_CHAIN(fi) (read_memory_unsigned_integer ((fi)->frame - 8, 4))
+#ifdef __STDC__
+struct frame_info;
+struct frame_saved_regs;
+struct type;
+#endif
+
+#define EXTRA_FRAME_INFO struct frame_saved_regs fsr;
+
+extern void v850_init_extra_frame_info PARAMS ((struct frame_info *fi));
+#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) v850_init_extra_frame_info (fi)
+#define INIT_FRAME_PC /* Not necessary */
+
+extern void v850_frame_find_saved_regs PARAMS ((struct frame_info *fi, struct frame_saved_regs *regaddr));
+#define FRAME_FIND_SAVED_REGS(fi, regaddr) regaddr = fi->fsr
-#define FRAME_SAVED_PC(fi) (read_memory_unsigned_integer((fi)->frame - 4, 4))
+extern CORE_ADDR v850_frame_chain PARAMS ((struct frame_info *fi));
+#define FRAME_CHAIN(fi) v850_frame_chain (fi)
+extern CORE_ADDR v850_find_callers_reg PARAMS ((struct frame_info *fi, int regnum));
+#define FRAME_SAVED_PC(fi) (v850_find_callers_reg (fi, RP_REGNUM))
-#define SKIP_PROLOGUE(pc) pc+=8
+#define EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) \
+ memcpy (VALBUF, REGBUF + REGISTER_BYTE (V0_REGNUM), TYPE_LENGTH (TYPE))
+
+#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
+ (extract_address (REGBUF + REGISTER_BYTE (V0_REGNUM), \
+ REGISTER_RAW_SIZE (V0_REGNUM)))
+
+#define STORE_RETURN_VALUE(TYPE, VALBUF) \
+ write_register_bytes(REGISTER_BYTE (V0_REGNUM), VALBUF, TYPE_LENGTH (TYPE));
+
+extern CORE_ADDR v850_skip_prologue PARAMS ((CORE_ADDR pc));
+#define SKIP_PROLOGUE(pc) pc = v850_skip_prologue (pc)
+
+#define FRAME_ARGS_SKIP 0
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
#define FRAME_NUM_ARGS(val, fi) ((val) = -1)
-#define FRAME_FIND_SAVED_REGS(fi, regaddr) warning ("FRAME_FIND_SAVED_REGS not implemented yet!")
-
-#define EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) warning ("EXTRACT_RETURN_VALUE not implemented yet!")
-#define STORE_RETURN_VALUE(TYPE, VALBUF) warning ("STORE_RETURN_VALUE not implemented yet!")
+extern struct frame_info *v850_pop_frame PARAMS ((struct frame_info *frame));
+#define POP_FRAME v850_pop_frame (get_current_frame ())