+++ /dev/null
-/*++
-
-Copyright (c) 1998-2001 Klaus P. Gerlicher
-
-Module Name:
-
- trace.c
-
-Abstract:
-
-Environment:
-
- Kernel mode only
-
-Author:
-
- Klaus P. Gerlicher
-
-Revision History:
-
- 19-Aug-1998: created
-
-Copyright notice:
-
- This file may be distributed under the terms of the GNU Public License.
-
---*/
-
-////////////////////////////////////////////////////
-// INCLUDES
-////
-#include "remods.h"
-
-#include "precomp.h"
-
-extern void NewInt31Handler(void);
-
-void DeInstallTraceHook(void);
-
-volatile ULONG OldInt1Handler=0;
-
-BOOLEAN InstallTraceHook(void)
-{
- ULONG LocalInt1Handler;
-
- DPRINT((0,"InstallTraceHook(OldInt1Handler=%0.8x)...\n",OldInt1Handler));
-
- MaskIrqs();
- if(!OldInt1Handler)
- {
- __asm__("mov $NewInt1Handler,%0"
- :"=r" (LocalInt1Handler)
- :
- :"eax");
- OldInt1Handler=SetGlobalInt(0x01,(ULONG)LocalInt1Handler);
- }
- UnmaskIrqs();
- return TRUE;
-}
-
-//this asm function must be at least second in the file. otherwise gcc does not
-//generate correct code.
-__asm__("\n\t \
-NewInt1Handler:\n\t \
- pushl %eax\n\t \
- movl %dr6,%eax\n\t \
- testl $(1<<14),%eax\n\t \
- jz exceptionnotsinglestep\n\t \
-\n\t \
- popl %eax\n\t \
- pushl $" STR(REASON_SINGLESTEP) "\n\t \
- jmp NewInt31Handler\n\t \
-\n\t \
-exceptionnotsinglestep:\n\t \
- popl %eax\n\t \
- pushl $" STR(REASON_HARDWARE_BP) "\n\t \
- jmp NewInt31Handler\n\t \
-");
-
-void DeInstallTraceHook(void)
-{
- DPRINT((0,"DeInstallTraceHook(OldInt1Handler=%0.8x)...\n",OldInt1Handler));
-
- MaskIrqs();
- if(OldInt1Handler)
- {
- SetGlobalInt(0x01,(ULONG)OldInt1Handler);
- OldInt1Handler = 0;
- }
- UnmaskIrqs();
-}