diff options
author | Roland McGrath <roland@redhat.com> | 2008-01-30 13:30:57 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 13:30:57 +0100 |
commit | ff14c6164bd532a6dc9025c07d3b562f839f00a9 (patch) | |
tree | 41c752b7cd0e8c9cfa9013887409dd3fbf140617 /arch/x86 | |
parent | 35d0991ffa544945d2e1992169c097286b7c0bfb (diff) |
x86: x86-64 ia32 ptrace pt_regs cleanup
This cleans up the getreg32/putreg32 functions to use struct pt_regs in a
straightforward fashion, instead of equivalent ugly pointer arithmetic.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/ia32/ptrace32.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/arch/x86/ia32/ptrace32.c b/arch/x86/ia32/ptrace32.c index 1e382e3bd88..c52d0664c67 100644 --- a/arch/x86/ia32/ptrace32.c +++ b/arch/x86/ia32/ptrace32.c @@ -37,11 +37,11 @@ #define R32(l,q) \ case offsetof(struct user32, regs.l): \ - stack[offsetof(struct pt_regs, q) / 8] = val; break + regs->q = val; break; static int putreg32(struct task_struct *child, unsigned regno, u32 val) { - __u64 *stack = (__u64 *)task_pt_regs(child); + struct pt_regs *regs = task_pt_regs(child); switch (regno) { case offsetof(struct user32, regs.fs): @@ -65,12 +65,12 @@ static int putreg32(struct task_struct *child, unsigned regno, u32 val) case offsetof(struct user32, regs.ss): if ((val & 3) != 3) return -EIO; - stack[offsetof(struct pt_regs, ss)/8] = val & 0xffff; + regs->ss = val & 0xffff; break; case offsetof(struct user32, regs.cs): if ((val & 3) != 3) return -EIO; - stack[offsetof(struct pt_regs, cs)/8] = val & 0xffff; + regs->cs = val & 0xffff; break; R32(ebx, bx); @@ -84,9 +84,7 @@ static int putreg32(struct task_struct *child, unsigned regno, u32 val) R32(eip, ip); R32(esp, sp); - case offsetof(struct user32, regs.eflags): { - __u64 *flags = &stack[offsetof(struct pt_regs, flags)/8]; - + case offsetof(struct user32, regs.eflags): val &= FLAG_MASK; /* * If the user value contains TF, mark that @@ -97,9 +95,8 @@ static int putreg32(struct task_struct *child, unsigned regno, u32 val) clear_tsk_thread_flag(child, TIF_FORCED_TF); else if (test_tsk_thread_flag(child, TIF_FORCED_TF)) val |= X86_EFLAGS_TF; - *flags = val | (*flags & ~FLAG_MASK); + regs->flags = val | (regs->flags & ~FLAG_MASK); break; - } case offsetof(struct user32, u_debugreg[0]) ... offsetof(struct user32, u_debugreg[7]): @@ -123,11 +120,11 @@ static int putreg32(struct task_struct *child, unsigned regno, u32 val) #define R32(l,q) \ case offsetof(struct user32, regs.l): \ - *val = stack[offsetof(struct pt_regs, q)/8]; break + *val = regs->q; break static int getreg32(struct task_struct *child, unsigned regno, u32 *val) { - __u64 *stack = (__u64 *)task_pt_regs(child); + struct pt_regs *regs = task_pt_regs(child); switch (regno) { case offsetof(struct user32, regs.fs): @@ -160,7 +157,7 @@ static int getreg32(struct task_struct *child, unsigned regno, u32 *val) /* * If the debugger set TF, hide it from the readout. */ - *val = stack[offsetof(struct pt_regs, flags)/8]; + *val = regs->flags; if (test_tsk_thread_flag(child, TIF_FORCED_TF)) *val &= ~X86_EFLAGS_TF; break; |