/***************************************************************/ /* mgdb: midipix-specific bits for gdb */ /* Copyright (C) 2019 Z. Gilboa */ /* Released under GPLv2 and GPLv3; see COPYING.MGDB. */ /***************************************************************/ #include "defs.h" #include "osabi.h" #include "regcache.h" #include "amd64-tdep.h" #include #include struct regcache; static void amd64_winnt_supply_reg( struct regcache * rcache, int regnum, uintptr_t regval) { regcache_raw_supply(rcache,regnum,®val); } static void amd64_winnt_supply_pc_regs( struct regcache * rcache, mcontext_t * regctx) { 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) { int ret; mcontext_t regctx; if ((ret = __dbg_regs_fetch(pfd,tid,®ctx)) < 0) return ret; if (regnum == AMD64_RIP_REGNUM) { amd64_winnt_supply_pc_regs(rcache,®ctx); } else { amd64_winnt_supply_core_regs(rcache,®ctx); } return 0; }