Tue Apr 16 12:58:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / io-layer / context.h
1 #ifndef _WAPI_CONTEXT_H_
2 #define _WAPI_CONTEXT_H_
3
4 #include <glib.h>
5
6 #include "mono/io-layer/wapi.h"
7
8 /* This part is x86-specific.  MSDN states that CONTEXT is defined
9  * also for MIPS, Alpha and PPC processors.
10  */
11
12 #define SIZE_OF_80387_REGISTERS 80
13
14 #define CONTEXT_i386 0x00010000
15 #define CONTEXT_i486 0x00010000
16
17 #define CONTEXT_CONTROL                 (CONTEXT_i386 | 0x00000001L)
18 #define CONTEXT_INTEGER                 (CONTEXT_i386 | 0x00000002L)
19 #define CONTEXT_SEGMENTS                (CONTEXT_i386 | 0x00000004L)
20 #define CONTEXT_FLOATING_POINT          (CONTEXT_i386 | 0x00000008L)
21 #define CONTEXT_DEBUG_REGISTERS         (CONTEXT_i386 | 0x00000010L)
22 #define CONTEXT_EXTENDED_REGISTERS      (CONTEXT_i386 | 0x00000020L)
23
24 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
25
26 #define MAXIMUM_SUPPORTED_EXTENSION 512
27
28 typedef struct 
29 {
30         guint32 ControlWord;
31         guint32 StatusWord;
32         guint32 TagWord;
33         guint32 ErrorOffset;
34         guint32 ErrorSelector;
35         guint32 DataOffset;
36         guint32 DataSelector;
37         guint8 RegisterArea[SIZE_OF_80387_REGISTERS];
38         guint32 Cr0NpxState;
39 } WapiFloatingSaveArea;
40
41 typedef struct 
42 {
43         guint32 ContextFlags;
44         guint32 Dr0;
45         guint32 Dr1;
46         guint32 Dr2;
47         guint32 Dr3;
48         guint32 Dr6;
49         guint32 Dr7;
50         
51         WapiFloatingSaveArea FloatSave;
52         
53         guint32 SegGs;
54         guint32 SegFs;
55         guint32 SegEs;
56         guint32 SegDs;
57         
58         guint32 Edi;
59         guint32 Esi;
60         guint32 Ebx;
61         guint32 Edx;
62         guint32 Ecx;
63         guint32 Eax;
64         
65         guint32 Ebp;
66         guint32 Eip;
67         guint32 SegCs;
68         guint32 EFlags;
69         guint32 Esp;
70         guint32 SegSs;
71         
72         guint8 ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
73 } WapiContext;
74
75 extern gboolean GetThreadContext(WapiHandle *handle, WapiContext *context);
76
77 #endif /* _WAPI_COMPEX_H_ */