3 Copyright (c) 1998-2001 Klaus P. Gerlicher
11 handle general protection faults on x86
24 15-Nov-2000: general cleanup of source files
28 This file may be distributed under the terms of the GNU Public License.
32 ////////////////////////////////////////////////////
38 ////////////////////////////////////////////////////
41 ULONG OldGPFaultHandler
= 0;
45 ////////////////////////////////////////////////////
49 //*************************************************************************
50 // NewGPFaultHandler()
52 //*************************************************************************
53 void HandleGPFault(FRAME
* ptr
)
55 DPRINT((0,"HandleGPFault(): ptr = %x at eip: %x\n",ptr
, ptr
->eip
));
58 //*************************************************************************
59 // NewGPFaultHandler()
61 //*************************************************************************
63 NewGPFaultHandler:\n\t \
71 testl $0x20000,40(%esp)\n\t \
77 jmp *_OldGPFaultHandler\n\t \
79 // setup default data selectors\n\t \
83 // get frame ptr\n\t \
84 lea 40(%esp),%eax\n\t \
86 call _HandleGPFault\n\t \
92 // remove error code from stack and replace with reason code\n\t \
93 movl $" STR(REASON_GP_FAULT
) ",(%esp)\n\t \
94 // call debugger loop\n\t \
95 jmp NewInt31Handler\n\t \
98 //*************************************************************************
99 // InstallGPFaultHook()
101 //*************************************************************************
102 void InstallGPFaultHook(void)
104 ULONG LocalGPFaultHandler
;
109 if(!OldGPFaultHandler
)
111 __asm__("mov $NewGPFaultHandler,%0"
112 :"=r" (LocalGPFaultHandler
)
115 OldGPFaultHandler
=SetGlobalInt(0x0D,(ULONG
)LocalGPFaultHandler
);
122 //*************************************************************************
123 // DeInstallGPFaultHook()
125 //*************************************************************************
126 void DeInstallGPFaultHook(void)
131 if(OldGPFaultHandler
)
133 RemoveAllSWBreakpoints(TRUE
);
134 SetGlobalInt(0x0D,(ULONG
)OldGPFaultHandler
);