From 9cc4675c5933738a28abc5e8cb8a675601d42913 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 19 May 2008 10:04:21 +0000 Subject: [PATCH] - Implement restoring DRx registers if the thread is being debugged. svn path=/trunk/; revision=33597 --- reactos/ntoskrnl/ke/i386/usercall_asm.S | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/ke/i386/usercall_asm.S b/reactos/ntoskrnl/ke/i386/usercall_asm.S index 11ea1ad213d..61a4717bf15 100644 --- a/reactos/ntoskrnl/ke/i386/usercall_asm.S +++ b/reactos/ntoskrnl/ke/i386/usercall_asm.S @@ -318,6 +318,8 @@ CheckDebug: test byte ptr [eax+KTHREAD_DEBUG_ACTIVE], 0xFF jnz RestoreDebug +RestoreStack: + /* Get TSS */ mov edx, fs:[KPCR_TSS] @@ -379,10 +381,25 @@ NotV86: jmp CheckDebug RestoreDebug: + /* Get a pointer to thread's trap frame */ + mov esi, [eax+KTHREAD_TRAP_FRAME] - /* Not yet supported */ - int 3 - jmp $ + /* Copy debug registers data from it */ + mov edx, [esi+KTRAP_FRAME_DR0] + mov [edi+KTRAP_FRAME_DR0], edx + mov edx, [esi+KTRAP_FRAME_DR1] + mov [edi+KTRAP_FRAME_DR1], edx + mov edx, [esi+KTRAP_FRAME_DR2] + mov [edi+KTRAP_FRAME_DR2], edx + mov edx, [esi+KTRAP_FRAME_DR3] + mov [edi+KTRAP_FRAME_DR3], edx + mov edx, [esi+KTRAP_FRAME_DR6] + mov [edi+KTRAP_FRAME_DR6], edx + mov edx, [esi+KTRAP_FRAME_DR7] + mov [edi+KTRAP_FRAME_DR7], edx + + /* Jump back */ + jmp RestoreStack NoStack: