summaryrefslogtreecommitdiff
path: root/overlay/mgdb/gdb/amd64-winnt-tdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'overlay/mgdb/gdb/amd64-winnt-tdep.c')
-rw-r--r--overlay/mgdb/gdb/amd64-winnt-tdep.c36
1 files changed, 36 insertions, 0 deletions
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 <signal.h>
+#include <sys/debug.h>
+
#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,&regval);
+}
+
+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,&regctx)) < 0)
+ return ret;
+
+ if (regnum == AMD64_RIP_REGNUM)
+ amd64_winnt_supply_pc_regs(rcache,&regctx);
+
+ return 0;
+}
+
static void amd64_winnt_init_abi (struct gdbarch_info info, struct gdbarch * gdbarch)
{
/* abi */