diff options
Diffstat (limited to 'overlay/mgdb/gdb')
-rw-r--r-- | overlay/mgdb/gdb/amd64-winnt-regcache.c | 36 |
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,®ctx)) < 0) return ret; - if (regnum == AMD64_RIP_REGNUM) + if (regnum == AMD64_RIP_REGNUM) { amd64_winnt_supply_pc_regs(rcache,®ctx); + } else { + amd64_winnt_supply_core_regs(rcache,®ctx); + } return 0; } |