Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d0f081758260e9221729cabbc3aba63d89b8c8d4
Commit:     d0f081758260e9221729cabbc3aba63d89b8c8d4
Parent:     962ff3804d31a4d090bbcbd3d06a4b63e3a5b5fd
Author:     Roland McGrath <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 30 13:30:52 2008 +0100
Committer:  Ingo Molnar <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 13:30:52 2008 +0100

    x86: x86-64 ia32 ptrace debugreg cleanup
    
    This cleans up the ia32 compat ptrace code to use shared code from
    native ptrace for the implementation guts of debug register access.
    
    Signed-off-by: Roland McGrath <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
---
 arch/x86/ia32/ptrace32.c |   63 ++++++----------------------------------------
 1 files changed, 8 insertions(+), 55 deletions(-)

diff --git a/arch/x86/ia32/ptrace32.c b/arch/x86/ia32/ptrace32.c
index 5dee334..5ababea 100644
--- a/arch/x86/ia32/ptrace32.c
+++ b/arch/x86/ia32/ptrace32.c
@@ -41,7 +41,6 @@
 
 static int putreg32(struct task_struct *child, unsigned regno, u32 val)
 {
-       int i;
        __u64 *stack = (__u64 *)task_pt_regs(child);
 
        switch (regno) {
@@ -102,43 +101,10 @@ static int putreg32(struct task_struct *child, unsigned 
regno, u32 val)
                break;
        }
 
-       case offsetof(struct user32, u_debugreg[4]):
-       case offsetof(struct user32, u_debugreg[5]):
-               return -EIO;
-
-       case offsetof(struct user32, u_debugreg[0]):
-               child->thread.debugreg0 = val;
-               break;
-
-       case offsetof(struct user32, u_debugreg[1]):
-               child->thread.debugreg1 = val;
-               break;
-
-       case offsetof(struct user32, u_debugreg[2]):
-               child->thread.debugreg2 = val;
-               break;
-
-       case offsetof(struct user32, u_debugreg[3]):
-               child->thread.debugreg3 = val;
-               break;
-
-       case offsetof(struct user32, u_debugreg[6]):
-               child->thread.debugreg6 = val;
-               break;
-
-       case offsetof(struct user32, u_debugreg[7]):
-               val &= ~DR_CONTROL_RESERVED;
-               /* See arch/i386/kernel/ptrace.c for an explanation of
-                * this awkward check.*/
-               for (i = 0; i < 4; i++)
-                       if ((0x5454 >> ((val >> (16 + 4*i)) & 0xf)) & 1)
-                              return -EIO;
-               child->thread.debugreg7 = val;
-               if (val)
-                       set_tsk_thread_flag(child, TIF_DEBUG);
-               else
-                       clear_tsk_thread_flag(child, TIF_DEBUG);
-               break;
+       case offsetof(struct user32, u_debugreg[0]) ...
+               offsetof(struct user32, u_debugreg[7]):
+               regno -= offsetof(struct user32, u_debugreg[0]);
+               return ptrace_set_debugreg(child, regno / 4, val);
 
        default:
                if (regno > sizeof(struct user32) || (regno & 3))
@@ -199,23 +165,10 @@ static int getreg32(struct task_struct *child, unsigned 
regno, u32 *val)
                        *val &= ~X86_EFLAGS_TF;
                break;
 
-       case offsetof(struct user32, u_debugreg[0]):
-               *val = child->thread.debugreg0;
-               break;
-       case offsetof(struct user32, u_debugreg[1]):
-               *val = child->thread.debugreg1;
-               break;
-       case offsetof(struct user32, u_debugreg[2]):
-               *val = child->thread.debugreg2;
-               break;
-       case offsetof(struct user32, u_debugreg[3]):
-               *val = child->thread.debugreg3;
-               break;
-       case offsetof(struct user32, u_debugreg[6]):
-               *val = child->thread.debugreg6;
-               break;
-       case offsetof(struct user32, u_debugreg[7]):
-               *val = child->thread.debugreg7;
+       case offsetof(struct user32, u_debugreg[0]) ...
+               offsetof(struct user32, u_debugreg[7]):
+               regno -= offsetof(struct user32, u_debugreg[0]);
+               *val = ptrace_get_debugreg(child, regno / 4);
                break;
 
        default:
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to