From: Roland McGrath Date: Wed, 30 Jan 2008 12:30:57 +0000 (+0100) Subject: x86: x86-64 ia32 ptrace pt_regs cleanup X-Git-Tag: v2.6.25-rc1~1143^2~675 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ff14c6164bd532a6dc9025c07d3b562f839f00a9;p=linux-2.6 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 Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- diff --git a/arch/x86/ia32/ptrace32.c b/arch/x86/ia32/ptrace32.c index 1e382e3bd8..c52d0664c6 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;