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