- Define DECLSPEC_ADDRSAFE and FORCEINLINE for gcc in winnt.h
[reactos.git] / reactos / include / ndk / asm.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 asm.h
8
9 Abstract:
10
11 ASM Offsets for dealing with de-referencing structures in registers.
12
13 Author:
14
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
16
17 --*/
18
19 #ifndef _ASM_H
20 #define _ASM_H
21
22 //
23 // FIXME: Use real names.
24 //
25 #define KERNEL_CS (0x8)
26 #define KERNEL_DS (0x10)
27 #define USER_CS (0x18 + 0x3)
28 #define USER_DS (0x20 + 0x3)
29 #define TSS_SELECTOR (0x28)
30 #define PCR_SELECTOR (0x30)
31 #define TEB_SELECTOR (0x38 + 0x3)
32 #define LDT_SELECTOR (0x48)
33 #define TRAP_TSS_SELECTOR (0x50)
34
35 //
36 // KV86M_REGISTERS Offsets
37 //
38 #define KV86M_REGISTERS_EBP 0x0
39 #define KV86M_REGISTERS_EDI 0x4
40 #define KV86M_REGISTERS_ESI 0x8
41 #define KV86M_REGISTERS_EDX 0xC
42 #define KV86M_REGISTERS_ECX 0x10
43 #define KV86M_REGISTERS_EBX 0x14
44 #define KV86M_REGISTERS_EAX 0x18
45 #define KV86M_REGISTERS_DS 0x1C
46 #define KV86M_REGISTERS_ES 0x20
47 #define KV86M_REGISTERS_FS 0x24
48 #define KV86M_REGISTERS_GS 0x28
49 #define KV86M_REGISTERS_EIP 0x2C
50 #define KV86M_REGISTERS_CS 0x30
51 #define KV86M_REGISTERS_EFLAGS 0x34
52 #define KV86M_REGISTERS_ESP 0x38
53 #define KV86M_REGISTERS_SS 0x3C
54 #define TF_SAVED_EXCEPTION_STACK 0x8C
55 #define TF_REGS 0x90
56 #define TF_ORIG_EBP 0x94
57
58 //
59 // TSS Offsets
60 //
61 #define KTSS_ESP0 0x4
62 #define KTSS_CR3 0x1C
63 #define KTSS_EFLAGS 0x24
64 #define KTSS_IOMAPBASE 0x66
65
66 //
67 // KTHREAD Offsets
68 //
69 #define KTHREAD_DEBUG_ACTIVE 0x03
70 #define KTHREAD_INITIAL_STACK 0x18
71 #define KTHREAD_STACK_LIMIT 0x1C
72 #define KTHREAD_TEB 0x74
73 #define KTHREAD_KERNEL_STACK 0x20
74 #define KTHREAD_NPX_STATE 0x4D
75 #define KTHREAD_STATE 0x4C
76 #define KTHREAD_ALERTED 0x5E
77 #define KTHREAD_APCSTATE_PROCESS 0x28 + 0x10
78 #define KTHREAD_PENDING_USER_APC 0x28 + 0x16
79 #define KTHREAD_PENDING_KERNEL_APC 0x28 + 0x15
80 #define KTHREAD_CONTEXT_SWITCHES 0x48
81 #define KTHREAD_WAIT_IRQL 0x4E
82 #define KTHREAD_SERVICE_TABLE 0x118
83 #define KTHREAD_PREVIOUS_MODE 0xD7
84 #define KTHREAD_TRAP_FRAME 0x110
85 #define KTHREAD_CALLBACK_STACK 0x114
86
87 //
88 // KPROCESS Offsets
89 //
90 #define KPROCESS_DIRECTORY_TABLE_BASE 0x18
91 #define KPROCESS_LDT_DESCRIPTOR0 0x20
92 #define KPROCESS_LDT_DESCRIPTOR1 0x24
93 #define KPROCESS_IOPM_OFFSET 0x30
94
95 //
96 // KPCR Offsets
97 //
98 #define KPCR_EXCEPTION_LIST 0x0
99 #define KPCR_INITIAL_STACK 0x4
100 #define KPCR_STACK_LIMIT 0x8
101 #define KPCR_TEB 0x18
102 #define KPCR_SELF 0x1C
103 #define KPCR_GDT 0x3C
104 #define KPCR_TSS 0x40
105 #define KPCR_CURRENT_THREAD 0x124
106 #define KPCR_NPX_THREAD 0x2F4
107
108 //
109 // FPU Save Area Offsets
110 //
111 #define FN_CONTROL_WORD 0x0
112 #define FN_STATUS_WORD 0x4
113 #define FN_TAG_WORD 0x8
114 #define FN_DATA_SELECTOR 0x18
115 #define FN_CR0_NPX_STATE 0x20C
116 #define SIZEOF_FX_SAVE_AREA 528
117
118 //
119 // Trap Frame Offsets
120 //
121 #define KTRAP_FRAME_DEBUGEBP 0x0
122 #define KTRAP_FRAME_DEBUGEIP 0x4
123 #define KTRAP_FRAME_DEBUGARGMARK 0x8
124 #define KTRAP_FRAME_DEBUGPOINTER 0xC
125 #define KTRAP_FRAME_TEMPCS 0x10
126 #define KTRAP_FRAME_TEMPESP 0x14
127 #define KTRAP_FRAME_DR0 0x18
128 #define KTRAP_FRAME_DR1 0x1C
129 #define KTRAP_FRAME_DR2 0x20
130 #define KTRAP_FRAME_DR3 0x24
131 #define KTRAP_FRAME_DR6 0x28
132 #define KTRAP_FRAME_DR7 0x2C
133 #define KTRAP_FRAME_GS 0x30
134 #define KTRAP_FRAME_RESERVED1 0x32
135 #define KTRAP_FRAME_ES 0x34
136 #define KTRAP_FRAME_RESERVED2 0x36
137 #define KTRAP_FRAME_DS 0x38
138 #define KTRAP_FRAME_RESERVED3 0x3A
139 #define KTRAP_FRAME_EDX 0x3C
140 #define KTRAP_FRAME_ECX 0x40
141 #define KTRAP_FRAME_EAX 0x44
142 #define KTRAP_FRAME_PREVIOUS_MODE 0x48
143 #define KTRAP_FRAME_EXCEPTION_LIST 0x4C
144 #define KTRAP_FRAME_FS 0x50
145 #define KTRAP_FRAME_RESERVED4 0x52
146 #define KTRAP_FRAME_EDI 0x54
147 #define KTRAP_FRAME_ESI 0x58
148 #define KTRAP_FRAME_EBX 0x5C
149 #define KTRAP_FRAME_EBP 0x60
150 #define KTRAP_FRAME_ERROR_CODE 0x64
151 #define KTRAP_FRAME_EIP 0x68
152 #define KTRAP_FRAME_CS 0x6C
153 #define KTRAP_FRAME_EFLAGS 0x70
154 #define KTRAP_FRAME_ESP 0x74
155 #define KTRAP_FRAME_SS 0x78
156 #define KTRAP_FRAME_RESERVED5 0x7A
157 #define KTRAP_FRAME_V86_ES 0x7C
158 #define KTRAP_FRAME_RESERVED6 0x7E
159 #define KTRAP_FRAME_V86_DS 0x80
160 #define KTRAP_FRAME_RESERVED7 0x82
161 #define KTRAP_FRAME_V86_FS 0x84
162 #define KTRAP_FRAME_RESERVED8 0x86
163 #define KTRAP_FRAME_V86_GS 0x88
164 #define KTRAP_FRAME_RESERVED9 0x8A
165 #define KTRAP_FRAME_SIZE 0x8C
166
167 //
168 // KUSER_SHARED_DATA Offsets
169 //
170 #define KERNEL_USER_SHARED_DATA 0x7FFE0000
171 #define KUSER_SHARED_PROCESSOR_FEATURES KERNEL_USER_SHARED_DATA + 0x274
172 #define KUSER_SHARED_SYSCALL KERNEL_USER_SHARED_DATA + 0x300
173 #define KUSER_SHARED_SYSCALL_RET KERNEL_USER_SHARED_DATA + 0x304
174 #define PROCESSOR_FEATURE_FXSR KUSER_SHARED_PROCESSOR_FEATURES + 0x4
175
176
177 //
178 // CONTEXT Offsets
179 //
180 #define CONTEXT_FLAGS 0x0
181 #define CONTEXT_DR6 0x14
182 #define CONTEXT_FLOAT_SAVE 0x1C
183 #define CONTEXT_SEGGS 0x8C
184 #define CONTEXT_SEGFS 0x90
185 #define CONTEXT_SEGES 0x94
186 #define CONTEXT_SEGDS 0x98
187 #define CONTEXT_EDI 0x9C
188 #define CONTEXT_ESI 0xA0
189 #define CONTEXT_EBX 0xA4
190 #define CONTEXT_EDX 0xA8
191 #define CONTEXT_ECX 0xAC
192 #define CONTEXT_EAX 0xB0
193 #define CONTEXT_EBP 0xB4
194 #define CONTEXT_EIP 0xB8
195 #define CONTEXT_SEGCS 0xBC
196 #define CONTEXT_EFLAGS 0xC0
197 #define CONTEXT_ESP 0xC4
198 #define CONTEXT_SEGSS 0xC8
199 #define CONTEXT_FLOAT_SAVE_CONTROL_WORD CONTEXT_FLOAT_SAVE + FN_CONTROL_WORD
200 #define CONTEXT_FLOAT_SAVE_STATUS_WORD CONTEXT_FLOAT_SAVE + FN_STATUS_WORD
201 #define CONTEXT_FLOAT_SAVE_TAG_WORD CONTEXT_FLOAT_SAVE + FN_TAG_WORD
202
203 //
204 // EXCEPTION_RECORD Offsets
205 //
206 #define EXCEPTION_RECORD_EXCEPTION_CODE 0x0
207 #define EXCEPTION_RECORD_EXCEPTION_FLAGS 0x4
208 #define EXCEPTION_RECORD_EXCEPTION_RECORD 0x8
209 #define EXCEPTION_RECORD_EXCEPTION_ADDRESS 0xC
210 #define EXCEPTION_RECORD_NUMBER_PARAMETERS 0x10
211 #define SIZEOF_EXCEPTION_RECORD 0x14
212
213 //
214 // TEB Offsets
215 //
216 #define TEB_EXCEPTION_LIST 0x0
217 #define TEB_STACK_BASE 0x4
218 #define TEB_STACK_LIMIT 0x8
219 #define TEB_FIBER_DATA 0x10
220 #define TEB_PEB 0x30
221 #define TEB_EXCEPTION_CODE 0x1A4
222 #define TEB_ACTIVATION_CONTEXT_STACK_POINTER 0x1A8
223 #define TEB_DEALLOCATION_STACK 0xE0C
224 #define TEB_GUARANTEED_STACK_BYTES 0xF78
225 #define TEB_FLS_DATA 0xFB4
226
227 //
228 // PEB Offsets
229 //
230 #define PEB_KERNEL_CALLBACK_TABLE 0x2C
231
232 //
233 // FIBER Offsets
234 //
235 #define FIBER_PARAMETER 0x0
236 #define FIBER_EXCEPTION_LIST 0x4
237 #define FIBER_STACK_BASE 0x8
238 #define FIBER_STACK_LIMIT 0xC
239 #define FIBER_DEALLOCATION_STACK 0x10
240 #define FIBER_CONTEXT 0x14
241 #define FIBER_GUARANTEED_STACK_BYTES 0x2E0
242 #define FIBER_FLS_DATA 0x2E4
243 #define FIBER_ACTIVATION_CONTEXT_STACK 0x2E8
244 #define FIBER_CONTEXT_FLAGS FIBER_CONTEXT + CONTEXT_FLAGS
245 #define FIBER_CONTEXT_EAX FIBER_CONTEXT + CONTEXT_EAX
246 #define FIBER_CONTEXT_EBX FIBER_CONTEXT + CONTEXT_EBX
247 #define FIBER_CONTEXT_ECX FIBER_CONTEXT + CONTEXT_ECX
248 #define FIBER_CONTEXT_EDX FIBER_CONTEXT + CONTEXT_EDX
249 #define FIBER_CONTEXT_ESI FIBER_CONTEXT + CONTEXT_ESI
250 #define FIBER_CONTEXT_EDI FIBER_CONTEXT + CONTEXT_EDI
251 #define FIBER_CONTEXT_EBP FIBER_CONTEXT + CONTEXT_EBP
252 #define FIBER_CONTEXT_ESP FIBER_CONTEXT + CONTEXT_ESP
253 #define FIBER_CONTEXT_DR6 FIBER_CONTEXT + CONTEXT_DR6
254 #define FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_STATUS_WORD
255 #define FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_CONTROL_WORD
256 #define FIBER_CONTEXT_FLOAT_SAVE_TAG_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_TAG_WORD
257
258 #endif // !_ASM_H
259