summaryrefslogtreecommitdiff
path: root/gdb/i386-tdep.h
diff options
context:
space:
mode:
authorHui Zhu <teawater@gmail.com>2009-08-10 03:02:37 +0000
committerHui Zhu <teawater@gmail.com>2009-08-10 03:02:37 +0000
commitfbbc85bad636ce65fbb7f93c601ec7ad3ea99389 (patch)
treec95482f901959e43015fcb1251c7e26202adfd1d /gdb/i386-tdep.h
parent54d17db6f9a0923e4d22848bac6bbb15d5f594f1 (diff)
downloadgdb-fbbc85bad636ce65fbb7f93c601ec7ad3ea99389.tar.gz
2009-08-10 Hui Zhu <teawater@gmail.com>
Add AMD64 process record instruction set support. * i386-tdep.h (gdbarch_tdep): Add record_regmap for registers because the AMD64's registers order in GDB is not same with I386 instructions. Add i386_syscall_record to be the syscall function handle interface. (record_i386_regnum): Number for record_regmap. * i386-tdep.c (OT_QUAD): For 64 bits. (i386_record_s): Add rex_x, rex_b, rip_offset and popl_esp_hack for AMD64 instruction set. And regmap for record_regmap. (i386_record_lea_modrm_addr): Support AMD64 instruction set 64 bits lea. (i386_record_lea_modrm): Ditto. (i386_record_push): New function. Record the execution log of push. (I386_RECORD_ARCH_LIST_ADD_REG): New macro to record the register. (i386_process_record): Support AMD64 instruction set. * amd64-tdep.c (amd64_record_regmap): For record_regmap. (amd64_init_abi): Set amd64_record_regmap to record_regmap.
Diffstat (limited to 'gdb/i386-tdep.h')
-rw-r--r--gdb/i386-tdep.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h
index b3fef438964..b2365329863 100644
--- a/gdb/i386-tdep.h
+++ b/gdb/i386-tdep.h
@@ -111,10 +111,15 @@ struct gdbarch_tdep
struct type *i387_ext_type;
/* Process record/replay target. */
+ /* The map for registers because the AMD64's registers order
+ in GDB is not same as I386 instructions. */
+ const int *record_regmap;
/* Parse intx80 args. */
int (*i386_intx80_record) (struct regcache *regcache);
/* Parse sysenter args. */
int (*i386_sysenter_record) (struct regcache *regcache);
+ /* Parse syscall args. */
+ int (*i386_syscall_record) (struct regcache *regcache);
};
/* Floating-point registers. */
@@ -151,6 +156,36 @@ enum i386_regnum
I386_ST0_REGNUM /* %st(0) */
};
+/* Register numbers of RECORD_REGMAP. */
+
+enum record_i386_regnum
+{
+ X86_RECORD_REAX_REGNUM,
+ X86_RECORD_RECX_REGNUM,
+ X86_RECORD_REDX_REGNUM,
+ X86_RECORD_REBX_REGNUM,
+ X86_RECORD_RESP_REGNUM,
+ X86_RECORD_REBP_REGNUM,
+ X86_RECORD_RESI_REGNUM,
+ X86_RECORD_REDI_REGNUM,
+ X86_RECORD_R8_REGNUM,
+ X86_RECORD_R9_REGNUM,
+ X86_RECORD_R10_REGNUM,
+ X86_RECORD_R11_REGNUM,
+ X86_RECORD_R12_REGNUM,
+ X86_RECORD_R13_REGNUM,
+ X86_RECORD_R14_REGNUM,
+ X86_RECORD_R15_REGNUM,
+ X86_RECORD_REIP_REGNUM,
+ X86_RECORD_EFLAGS_REGNUM,
+ X86_RECORD_CS_REGNUM,
+ X86_RECORD_SS_REGNUM,
+ X86_RECORD_DS_REGNUM,
+ X86_RECORD_ES_REGNUM,
+ X86_RECORD_FS_REGNUM,
+ X86_RECORD_GS_REGNUM,
+};
+
#define I386_NUM_GREGS 16
#define I386_NUM_FREGS 16
#define I386_NUM_XREGS 9