summaryrefslogtreecommitdiff
path: root/gdb/amd64-linux-nat.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/amd64-linux-nat.c')
-rw-r--r--gdb/amd64-linux-nat.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c
index fa4afebbee1..545910dd0a3 100644
--- a/gdb/amd64-linux-nat.c
+++ b/gdb/amd64-linux-nat.c
@@ -286,14 +286,16 @@ amd64_linux_dr_get (ptid_t ptid, int regnum)
{
int tid;
unsigned long value;
+ int offset;
tid = ptid_get_lwp (ptid);
if (tid == 0)
tid = ptid_get_pid (ptid);
errno = 0;
- value = ptrace (PTRACE_PEEKUSER, tid,
- offsetof (struct user, u_debugreg[regnum]), 0);
+
+ offset = offsetof (struct user, u_debugreg) + sizeof (((struct user *)0)->u_debugreg[0]) * regnum;
+ value = ptrace (PTRACE_PEEKUSER, tid, offset, 0);
if (errno != 0)
perror_with_name (_("Couldn't read debug register"));
@@ -306,14 +308,15 @@ static void
amd64_linux_dr_set (ptid_t ptid, int regnum, unsigned long value)
{
int tid;
+ int offset;
tid = ptid_get_lwp (ptid);
if (tid == 0)
tid = ptid_get_pid (ptid);
errno = 0;
- ptrace (PTRACE_POKEUSER, tid,
- offsetof (struct user, u_debugreg[regnum]), value);
+ offset = offsetof (struct user, u_debugreg) + sizeof (((struct user *)0)->u_debugreg[0]) * regnum;
+ ptrace (PTRACE_POKEUSER, tid, offset, value);
if (errno != 0)
perror_with_name (_("Couldn't write debug register"));
}