[runtime] Fix "make distcheck"
[mono-project.git] / mono / io-layer / context.h
blob2d0e814716c2e65bd2a50d03d02ffc597964a599
1 /*
2 * context.h: Processor-specific register contexts
4 * Author:
5 * Dick Porter (dick@ximian.com)
7 * (C) 2002 Ximian, Inc.
8 */
10 #ifndef _WAPI_CONTEXT_H_
11 #define _WAPI_CONTEXT_H_
13 #include <glib.h>
15 #include "mono/io-layer/wapi.h"
17 /* This part is x86-specific. MSDN states that CONTEXT is defined
18 * also for MIPS, Alpha and PPC processors.
21 #define SIZE_OF_80387_REGISTERS 80
23 #define CONTEXT_i386 0x00010000
24 #define CONTEXT_i486 0x00010000
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)
33 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
35 #define MAXIMUM_SUPPORTED_EXTENSION 512
37 typedef struct
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;
50 typedef struct
52 guint32 ContextFlags;
53 guint32 Dr0;
54 guint32 Dr1;
55 guint32 Dr2;
56 guint32 Dr3;
57 guint32 Dr6;
58 guint32 Dr7;
60 WapiFloatingSaveArea FloatSave;
62 guint32 SegGs;
63 guint32 SegFs;
64 guint32 SegEs;
65 guint32 SegDs;
67 guint32 Edi;
68 guint32 Esi;
69 guint32 Ebx;
70 guint32 Edx;
71 guint32 Ecx;
72 guint32 Eax;
74 guint32 Ebp;
75 guint32 Eip;
76 guint32 SegCs;
77 guint32 EFlags;
78 guint32 Esp;
79 guint32 SegSs;
81 guint8 ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
82 } WapiContext;
84 G_BEGIN_DECLS
86 extern gboolean GetThreadContext(gpointer handle, WapiContext *context);
88 G_END_DECLS
90 #endif /* _WAPI_COMPEX_H_ */