From 09150e53b3d4442c6e7afd3696691c16baaea8f0 Mon Sep 17 00:00:00 2001 From: midipix Date: Sun, 8 Sep 2019 14:24:03 +0000 Subject: mgdb: amd64_winnt_fetch_registers(): initial implementation and integration. --- overlay/mgdb/gdb/amd64-winnt-tdep.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'overlay/mgdb/gdb/amd64-winnt-tdep.c') diff --git a/overlay/mgdb/gdb/amd64-winnt-tdep.c b/overlay/mgdb/gdb/amd64-winnt-tdep.c index cf53d3d..f663677 100644 --- a/overlay/mgdb/gdb/amd64-winnt-tdep.c +++ b/overlay/mgdb/gdb/amd64-winnt-tdep.c @@ -6,10 +6,14 @@ #include "defs.h" #include "osabi.h" +#include "regcache.h" #include "frame-unwind.h" #include "windows-tdep.h" #include "amd64-windows-tdep.c" +#include +#include + #define amd64_winnt_push_dummy_call amd64_windows_push_dummy_call #define amd64_winnt_return_value amd64_windows_return_value #define amd64_winnt_skip_trampoline_code amd64_windows_skip_trampoline_code @@ -18,6 +22,38 @@ #define amd64_winnt_skip_main_prologue amd64_skip_main_prologue #define amd64_winnt_frame_unwind amd64_windows_frame_unwind +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); +} + +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); + + return 0; +} + static void amd64_winnt_init_abi (struct gdbarch_info info, struct gdbarch * gdbarch) { /* abi */ -- cgit v1.2.3