summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2019-09-09 03:45:37 +0000
committermidipix <writeonce@midipix.org>2019-09-09 05:07:27 +0000
commitb095cb097904fbebb7ce8879f46dbe34988bfcc8 (patch)
tree63740e61e1ed3d25fead43c6c37ae15ac4b286c5
parent98061512cd1334cb0db29bd5875bf395910a6494 (diff)
downloadchainport-b095cb097904fbebb7ce8879f46dbe34988bfcc8.tar.bz2
chainport-b095cb097904fbebb7ce8879f46dbe34988bfcc8.tar.xz
mgdb: amd64_winnt_supply_core_regs(): implementation and integration.
-rw-r--r--overlay/mgdb/gdb/amd64-winnt-regcache.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/overlay/mgdb/gdb/amd64-winnt-regcache.c b/overlay/mgdb/gdb/amd64-winnt-regcache.c
index 6ed35cb..0cf7928 100644
--- a/overlay/mgdb/gdb/amd64-winnt-regcache.c
+++ b/overlay/mgdb/gdb/amd64-winnt-regcache.c
@@ -28,6 +28,37 @@ static void amd64_winnt_supply_pc_regs(
amd64_winnt_supply_reg(rcache,AMD64_RIP_REGNUM,regctx->uc_rip);
}
+static void amd64_winnt_supply_core_regs(
+ struct regcache * rcache,
+ mcontext_t * regctx)
+{
+ amd64_winnt_supply_reg(rcache,AMD64_RAX_REGNUM,regctx->uc_rax);
+ amd64_winnt_supply_reg(rcache,AMD64_RBX_REGNUM,regctx->uc_rbx);
+ amd64_winnt_supply_reg(rcache,AMD64_RCX_REGNUM,regctx->uc_rcx);
+ amd64_winnt_supply_reg(rcache,AMD64_RDX_REGNUM,regctx->uc_rdx);
+ amd64_winnt_supply_reg(rcache,AMD64_RSI_REGNUM,regctx->uc_rsi);
+ amd64_winnt_supply_reg(rcache,AMD64_RDI_REGNUM,regctx->uc_rdi);
+ amd64_winnt_supply_reg(rcache,AMD64_RBP_REGNUM,regctx->uc_rbp);
+ amd64_winnt_supply_reg(rcache,AMD64_RSP_REGNUM,regctx->uc_rsp);
+ amd64_winnt_supply_reg(rcache,AMD64_R8_REGNUM, regctx->uc_r8);
+ amd64_winnt_supply_reg(rcache,AMD64_R9_REGNUM, regctx->uc_r9);
+ amd64_winnt_supply_reg(rcache,AMD64_R10_REGNUM,regctx->uc_r10);
+ amd64_winnt_supply_reg(rcache,AMD64_R11_REGNUM,regctx->uc_r11);
+ amd64_winnt_supply_reg(rcache,AMD64_R12_REGNUM,regctx->uc_r12);
+ amd64_winnt_supply_reg(rcache,AMD64_R13_REGNUM,regctx->uc_r13);
+ amd64_winnt_supply_reg(rcache,AMD64_R14_REGNUM,regctx->uc_r14);
+ amd64_winnt_supply_reg(rcache,AMD64_R15_REGNUM,regctx->uc_r15);
+
+ amd64_winnt_supply_reg(rcache,AMD64_CS_REGNUM,regctx->uc_seg_cs);
+ amd64_winnt_supply_reg(rcache,AMD64_SS_REGNUM,regctx->uc_seg_ss);
+ amd64_winnt_supply_reg(rcache,AMD64_DS_REGNUM,regctx->uc_seg_ds);
+ amd64_winnt_supply_reg(rcache,AMD64_ES_REGNUM,regctx->uc_seg_es);
+ amd64_winnt_supply_reg(rcache,AMD64_FS_REGNUM,regctx->uc_seg_fs);
+ amd64_winnt_supply_reg(rcache,AMD64_GS_REGNUM,regctx->uc_seg_gs);
+
+ amd64_winnt_supply_reg(rcache,AMD64_EFLAGS_REGNUM,regctx->uc_eflags);
+}
+
int amd64_winnt_fetch_registers(
int pfd, struct regcache * rcache,
int regnum, pid_t tid)
@@ -38,8 +69,11 @@ int amd64_winnt_fetch_registers(
if ((ret = __dbg_regs_fetch(pfd,tid,&regctx)) < 0)
return ret;
- if (regnum == AMD64_RIP_REGNUM)
+ if (regnum == AMD64_RIP_REGNUM) {
amd64_winnt_supply_pc_regs(rcache,&regctx);
+ } else {
+ amd64_winnt_supply_core_regs(rcache,&regctx);
+ }
return 0;
}