Use emergency TEB selector to avoid debugger crashes when stepping
[wine] / include / except.h
1 /*
2  * except.h
3  * Copyright (c) 1996, Onno Hovers (onno@stack.urc.tue.nl)
4  */
5
6 #ifndef __WINE_EXCEPT_H
7 #define __WINE_EXCEPT_H
8
9 #include "winnt.h"
10
11 /*
12  * the function pointer to a exception handler
13  */
14
15 /* forward definition */
16 struct __EXCEPTION_FRAME;
17
18 typedef DWORD (CALLBACK *PEXCEPTION_HANDLER)( PEXCEPTION_RECORD pexcrec,
19                                       struct __EXCEPTION_FRAME  *pestframe,
20                                       PCONTEXT                   pcontext,
21                                       LPVOID                     pdispatcher);
22
23 /*
24  * The exception frame, used for registering exception handlers 
25  * Win32 cares only about this, but compilers generally emit 
26  * larger exception frames for their own use.
27  */
28
29 typedef struct __EXCEPTION_FRAME
30 {
31   struct __EXCEPTION_FRAME *Prev;
32   PEXCEPTION_HANDLER       Handler;
33 } EXCEPTION_FRAME, *PEXCEPTION_FRAME;
34
35                         
36 /*
37  *  this undocumented function is called when an exception
38  *  handler wants all the frames to be unwound. RtlUnwind
39  *  calls all exception handlers with the EH_UNWIND or
40  *  EH_EXIT_UNWIND flags set in the exception record
41  *
42  *  This prototype assumes RtlUnwind takes the same
43  *  parameters as OS/2 2.0 DosUnwindException
44  *  Disassembling RtlUnwind shows this is true, except for
45  *  the TargetEIP parameter, which is unused. There is 
46  *  a fourth parameter, that is used as the eax in the 
47  *  context.   
48  */
49 void WINAPI RtlUnwind( PEXCEPTION_FRAME pestframe,
50                        LPVOID unusedEIP,
51                        PEXCEPTION_RECORD pexcrec,
52                        DWORD contextEAX );
53
54 #endif  /* __WINE_EXCEPT_H */