xref: /reactos/dll/win32/dbghelp/compat.h (revision f69be6c5)
1c2c66affSColin Finck #pragma once
2c2c66affSColin Finck 
3c2c66affSColin Finck #include <typedefs.h>
4c2c66affSColin Finck #include <guiddef.h>
5c2c66affSColin Finck #include <pecoff.h>
6c2c66affSColin Finck #include <wine/unicode.h>
7c2c66affSColin Finck 
8c2c66affSColin Finck #include <stdio.h>
9c2c66affSColin Finck #include <stdlib.h>
10c2c66affSColin Finck #include <wchar.h>
11c2c66affSColin Finck #include <ctype.h>
12c2c66affSColin Finck 
13c2c66affSColin Finck typedef HANDLE HWND;
14c2c66affSColin Finck 
15c2c66affSColin Finck #define min(x, y) (((x) < (y)) ? (x) : (y))
16c2c66affSColin Finck #define max(x, y) (((x) > (y)) ? (x) : (y))
17c2c66affSColin Finck 
18c2c66affSColin Finck #ifdef __i386__
19c2c66affSColin Finck #define CDECL __cdecl
20c2c66affSColin Finck #else
21c2c66affSColin Finck #define CDECL
22c2c66affSColin Finck #endif
23c2c66affSColin Finck typedef PVOID IUnknown, IDispatch, IRecordInfo;
24c2c66affSColin Finck 
25c2c66affSColin Finck // windef.h
26c2c66affSColin Finck #define MAX_PATH 260
27c2c66affSColin Finck #define CALLBACK
28c2c66affSColin Finck typedef int (*FARPROC)();
29c2c66affSColin Finck 
30c2c66affSColin Finck // bytesex.h
31c2c66affSColin Finck #define SWAPD(x) x
32c2c66affSColin Finck #define SWAPW(x) x
33c2c66affSColin Finck 
34c2c66affSColin Finck // Wine stuff
35c2c66affSColin Finck #define DECLSPEC_HIDDEN
36c2c66affSColin Finck #define WINE_DEFAULT_DEBUG_CHANNEL(x)
37c2c66affSColin Finck #define WINE_DECLARE_DEBUG_CHANNEL(x)
38c2c66affSColin Finck extern const char *wine_dbgstr_an( const char * s, int n );
39c2c66affSColin Finck extern const char *wine_dbgstr_wn( const WCHAR *s, int n );
40c2c66affSColin Finck extern const char *wine_dbg_sprintf( const char *format, ... );
41c2c66affSColin Finck static __inline const char *wine_dbgstr_longlong( ULONGLONG ll )
42c2c66affSColin Finck {
43c2c66affSColin Finck     if (/*sizeof(ll) > sizeof(unsigned long) &&*/ ll >> 32) /* ULONGLONG is always > long in ReactOS */
44c2c66affSColin Finck         return wine_dbg_sprintf( "%lx%08lx", (unsigned long)(ll >> 32), (unsigned long)ll );
45c2c66affSColin Finck     else return wine_dbg_sprintf( "%lx", (unsigned long)ll );
46c2c66affSColin Finck }
47c2c66affSColin Finck static __inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); }
48c2c66affSColin Finck static __inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); }
49c2c66affSColin Finck static __inline const char *debugstr_a( const char *s )  { return wine_dbgstr_an( s, -1 ); }
50c2c66affSColin Finck static __inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
51c2c66affSColin Finck static __inline const char *wine_dbgstr_w( const WCHAR *s ){return wine_dbgstr_wn( s, -1 );}
52c2c66affSColin Finck 
53c2c66affSColin Finck #if 0
54c2c66affSColin Finck #define WARN(fmt, ...) fprintf(stderr, "WARN %s: " fmt, __FUNCTION__, ##__VA_ARGS__)
55c2c66affSColin Finck #define FIXME(fmt, ...) fprintf(stderr, "FIXME %s: " fmt, __FUNCTION__, ##__VA_ARGS__)
56c2c66affSColin Finck #define TRACE(fmt, ...) fprintf(stderr, "TRACE %s: " fmt, __FUNCTION__, ##__VA_ARGS__)
57c2c66affSColin Finck #define ERR(fmt, ...) fprintf(stderr, "ERR %s: " fmt, __FUNCTION__, ##__VA_ARGS__)
58c2c66affSColin Finck #else
59c2c66affSColin Finck #define WARN(fmt, ...)
60c2c66affSColin Finck #define FIXME(fmt, ...)
61c2c66affSColin Finck #define TRACE(fmt, ...)
62c2c66affSColin Finck #define ERR(fmt, ...)
63c2c66affSColin Finck #endif
64c2c66affSColin Finck 
65c2c66affSColin Finck #define TRACE_ON(x) FALSE
66c2c66affSColin Finck #define TRACE_(x) TRACE
67c2c66affSColin Finck #define FIXME_(x) FIXME
68c2c66affSColin Finck const char *wine_dbg_sprintf( const char *format, ... );
69c2c66affSColin Finck #define CP_UNIXCP CP_ACP
70c2c66affSColin Finck #define __TRY if(1)
71c2c66affSColin Finck #define __EXCEPT_PAGE_FAULT else
72c2c66affSColin Finck #define __ENDTRY
73c2c66affSColin Finck 
74c2c66affSColin Finck // basetsd.h
75c2c66affSColin Finck typedef ULONG_PTR KAFFINITY;
76c2c66affSColin Finck 
77c2c66affSColin Finck // excpt.h
78c2c66affSColin Finck typedef enum _EXCEPTION_DISPOSITION
79c2c66affSColin Finck {
80c2c66affSColin Finck     ExceptionContinueExecution,
81c2c66affSColin Finck     ExceptionContinueSearch,
82c2c66affSColin Finck     ExceptionNestedException,
83c2c66affSColin Finck     ExceptionCollidedUnwind,
84c2c66affSColin Finck } EXCEPTION_DISPOSITION;
85c2c66affSColin Finck 
86c2c66affSColin Finck // winerror.h
87c2c66affSColin Finck #define ERROR_ACCESS_DENIED                                5
88c2c66affSColin Finck #define ERROR_INVALID_HANDLE                               6
89c2c66affSColin Finck #define ERROR_OUTOFMEMORY                                  14
90c2c66affSColin Finck #define ERROR_NOT_SUPPORTED                                50
91c2c66affSColin Finck #define ERROR_INVALID_PARAMETER                            87
92c2c66affSColin Finck #define ERROR_CALL_NOT_IMPLEMENTED                         120
93c2c66affSColin Finck #define ERROR_INVALID_NAME                                 123
94c2c66affSColin Finck #define ERROR_MOD_NOT_FOUND                                126
95c2c66affSColin Finck #define ERROR_NO_MORE_ITEMS                                259
96c2c66affSColin Finck #define ERROR_INVALID_ADDRESS                              487
97c2c66affSColin Finck 
98c2c66affSColin Finck // winnls.h
99c2c66affSColin Finck #define CP_ACP 0
100c2c66affSColin Finck #define MultiByteToWideChar __MultiByteToWideChar
101c2c66affSColin Finck #define WideCharToMultiByte __WideCharToMultiByte
102c2c66affSColin Finck INT __MultiByteToWideChar( UINT page, DWORD flags, LPCSTR src, INT srclen, LPWSTR dst, INT dstlen );
103c2c66affSColin Finck INT __WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen, LPSTR dst, INT dstlen, LPCSTR defchar, BOOL *used );
104c2c66affSColin Finck 
105c2c66affSColin Finck // #define strlenW(s) wcslen((s))
106c2c66affSColin Finck // #define strcpyW(d,s) wcscpy((d),(s))
107c2c66affSColin Finck // #define strchrW(s,c) wcschr((s),(c))
108c2c66affSColin Finck // #define strcatW(d,s) wcscat((d),(s))
109c2c66affSColin Finck // #define strncmpiW(s1,s2,n) _wcsnicmp((s1),(s2),(n))
110c2c66affSColin Finck // #define strcmpW(s1,s2) wcscmp((s1),(s2))
111c2c66affSColin Finck // #define strcmpiW(s1,s2) _wcsicmp((s1),(s2))
112c2c66affSColin Finck // #define tolowerW(n) towlower((n))
113c2c66affSColin Finck // #define toupperW(n) towupper((n))
114c2c66affSColin Finck 
115c2c66affSColin Finck // winnt.h
116c2c66affSColin Finck #define IMAGE_FILE_MACHINE_ARMNT      0x1c4
117c2c66affSColin Finck #define IMAGE_FILE_MACHINE_POWERPC    0x1f0
1181eea9304SStas'M #define IMAGE_FILE_MACHINE_ARM64      0xaa64
119c2c66affSColin Finck #define DLL_PROCESS_DETACH	0
120c2c66affSColin Finck #define DLL_PROCESS_ATTACH	1
121c2c66affSColin Finck #define DLL_THREAD_ATTACH	2
122c2c66affSColin Finck #define DLL_THREAD_DETACH	3
123c2c66affSColin Finck #define HEAP_ZERO_MEMORY 8
124c2c66affSColin Finck #define GENERIC_READ	0x80000000
125c2c66affSColin Finck #define FILE_SHARE_READ			0x00000001
126c2c66affSColin Finck #define FILE_ATTRIBUTE_NORMAL			0x00000080
127c2c66affSColin Finck #define PAGE_READONLY	0x0002
128c2c66affSColin Finck #define SECTION_MAP_READ 4
129c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_UNKNOWN 0
130c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_COFF 1
131c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_CODEVIEW 2
132c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_FPO 3
133c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_MISC 4
134c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_EXCEPTION 5
135c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_FIXUP 6
136c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
137c2c66affSColin Finck #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
138c2c66affSColin Finck #define IMAGE_SYM_CLASS_EXTERNAL 2
139c2c66affSColin Finck #define IMAGE_SYM_CLASS_FILE 103
140c2c66affSColin Finck #define IMAGE_DIRECTORY_ENTRY_EXPORT	0
141c2c66affSColin Finck #define IMAGE_DIRECTORY_ENTRY_DEBUG	6
1422ed06c95SMark Jansen #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG	10
143c2c66affSColin Finck #define IMAGE_DEBUG_MISC_EXENAME 1
144c2c66affSColin Finck #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
145c2c66affSColin Finck typedef struct _IMAGE_EXPORT_DIRECTORY {
146c2c66affSColin Finck   DWORD Characteristics;
147c2c66affSColin Finck   DWORD TimeDateStamp;
148c2c66affSColin Finck   WORD MajorVersion;
149c2c66affSColin Finck   WORD MinorVersion;
150c2c66affSColin Finck   DWORD Name;
151c2c66affSColin Finck   DWORD Base;
152c2c66affSColin Finck   DWORD NumberOfFunctions;
153c2c66affSColin Finck   DWORD NumberOfNames;
154c2c66affSColin Finck   DWORD AddressOfFunctions;
155c2c66affSColin Finck   DWORD AddressOfNames;
156c2c66affSColin Finck   DWORD AddressOfNameOrdinals;
157c2c66affSColin Finck } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
158c2c66affSColin Finck typedef struct _IMAGE_DEBUG_MISC {
159c2c66affSColin Finck   DWORD DataType;
160c2c66affSColin Finck   DWORD Length;
161c2c66affSColin Finck   BOOLEAN Unicode;
162c2c66affSColin Finck   BYTE Reserved[3];
163c2c66affSColin Finck   BYTE Data[1];
164c2c66affSColin Finck } IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC;
165c2c66affSColin Finck typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
166c2c66affSColin Finck   WORD Signature;
167c2c66affSColin Finck   WORD Flags;
168c2c66affSColin Finck   WORD Machine;
169c2c66affSColin Finck   WORD Characteristics;
170c2c66affSColin Finck   DWORD TimeDateStamp;
171c2c66affSColin Finck   DWORD CheckSum;
172c2c66affSColin Finck   DWORD ImageBase;
173c2c66affSColin Finck   DWORD SizeOfImage;
174c2c66affSColin Finck   DWORD NumberOfSections;
175c2c66affSColin Finck   DWORD ExportedNamesSize;
176c2c66affSColin Finck   DWORD DebugDirectorySize;
177c2c66affSColin Finck   DWORD SectionAlignment;
178c2c66affSColin Finck   DWORD Reserved[2];
179c2c66affSColin Finck } IMAGE_SEPARATE_DEBUG_HEADER, *PIMAGE_SEPARATE_DEBUG_HEADER;
180c2c66affSColin Finck typedef struct _SECURITY_ATTRIBUTES {
181c2c66affSColin Finck 	DWORD nLength;
182c2c66affSColin Finck 	LPVOID lpSecurityDescriptor;
183c2c66affSColin Finck 	BOOL bInheritHandle;
184c2c66affSColin Finck } SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
185c2c66affSColin Finck typedef struct _IMAGE_DEBUG_DIRECTORY {
186c2c66affSColin Finck   DWORD Characteristics;
187c2c66affSColin Finck   DWORD TimeDateStamp;
188c2c66affSColin Finck   WORD MajorVersion;
189c2c66affSColin Finck   WORD MinorVersion;
190c2c66affSColin Finck   DWORD Type;
191c2c66affSColin Finck   DWORD SizeOfData;
192c2c66affSColin Finck   DWORD AddressOfRawData;
193c2c66affSColin Finck   DWORD PointerToRawData;
194c2c66affSColin Finck } IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
195c2c66affSColin Finck #define EXCEPTION_MAXIMUM_PARAMETERS   15
196c2c66affSColin Finck typedef struct _EXCEPTION_RECORD {
197c2c66affSColin Finck   DWORD ExceptionCode;
198c2c66affSColin Finck   DWORD ExceptionFlags;
199c2c66affSColin Finck   struct _EXCEPTION_RECORD *ExceptionRecord;
200c2c66affSColin Finck   PVOID ExceptionAddress;
201c2c66affSColin Finck   DWORD NumberParameters;
202c2c66affSColin Finck   ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
203c2c66affSColin Finck } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
204493ceb7aSJérôme Gardou #if defined(TARGET_i386)
205c2c66affSColin Finck #define SIZE_OF_80387_REGISTERS	80
206c2c66affSColin Finck #define CONTEXT_i386	0x10000
207c2c66affSColin Finck #define CONTEXT_i486	0x10000
208c2c66affSColin Finck #define CONTEXT_CONTROL	(CONTEXT_i386|0x00000001L)
209c2c66affSColin Finck #define CONTEXT_INTEGER	(CONTEXT_i386|0x00000002L)
210c2c66affSColin Finck #define CONTEXT_SEGMENTS	(CONTEXT_i386|0x00000004L)
211c2c66affSColin Finck #define CONTEXT_FLOATING_POINT	(CONTEXT_i386|0x00000008L)
212c2c66affSColin Finck #define CONTEXT_DEBUG_REGISTERS	(CONTEXT_i386|0x00000010L)
213c2c66affSColin Finck #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
214c2c66affSColin Finck #define CONTEXT_FULL	(CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
215c2c66affSColin Finck #define MAXIMUM_SUPPORTED_EXTENSION  512
216c2c66affSColin Finck 
217c2c66affSColin Finck #define EXCEPTION_READ_FAULT    0
218c2c66affSColin Finck #define EXCEPTION_WRITE_FAULT   1
219c2c66affSColin Finck #define EXCEPTION_EXECUTE_FAULT 8
220c2c66affSColin Finck 
221c2c66affSColin Finck typedef struct _FLOATING_SAVE_AREA {
222c2c66affSColin Finck   DWORD ControlWord;
223c2c66affSColin Finck   DWORD StatusWord;
224c2c66affSColin Finck   DWORD TagWord;
225c2c66affSColin Finck   DWORD ErrorOffset;
226c2c66affSColin Finck   DWORD ErrorSelector;
227c2c66affSColin Finck   DWORD DataOffset;
228c2c66affSColin Finck   DWORD DataSelector;
229c2c66affSColin Finck   BYTE RegisterArea[80];
230c2c66affSColin Finck   DWORD Cr0NpxState;
231c2c66affSColin Finck } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
232c2c66affSColin Finck 
233c2c66affSColin Finck typedef struct _CONTEXT {
234c2c66affSColin Finck   DWORD ContextFlags;
235c2c66affSColin Finck   DWORD Dr0;
236c2c66affSColin Finck   DWORD Dr1;
237c2c66affSColin Finck   DWORD Dr2;
238c2c66affSColin Finck   DWORD Dr3;
239c2c66affSColin Finck   DWORD Dr6;
240c2c66affSColin Finck   DWORD Dr7;
241c2c66affSColin Finck   FLOATING_SAVE_AREA FloatSave;
242c2c66affSColin Finck   DWORD SegGs;
243c2c66affSColin Finck   DWORD SegFs;
244c2c66affSColin Finck   DWORD SegEs;
245c2c66affSColin Finck   DWORD SegDs;
246c2c66affSColin Finck   DWORD Edi;
247c2c66affSColin Finck   DWORD Esi;
248c2c66affSColin Finck   DWORD Ebx;
249c2c66affSColin Finck   DWORD Edx;
250c2c66affSColin Finck   DWORD Ecx;
251c2c66affSColin Finck   DWORD Eax;
252c2c66affSColin Finck   DWORD Ebp;
253c2c66affSColin Finck   DWORD Eip;
254c2c66affSColin Finck   DWORD SegCs;
255c2c66affSColin Finck   DWORD EFlags;
256c2c66affSColin Finck   DWORD Esp;
257c2c66affSColin Finck   DWORD SegSs;
258c2c66affSColin Finck   BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
259c2c66affSColin Finck } CONTEXT, *PCONTEXT;
260c2c66affSColin Finck 
261493ceb7aSJérôme Gardou #elif defined TARGET_amd64
262493ceb7aSJérôme Gardou 
263493ceb7aSJérôme Gardou #error "Please define the CONTEXT structure for amd64 platform"
264493ceb7aSJérôme Gardou 
265493ceb7aSJérôme Gardou #elif defined TARGET_arm /* ARM? */
266c2c66affSColin Finck 
267c2c66affSColin Finck /* The following flags control the contents of the CONTEXT structure. */
268c2c66affSColin Finck 
269c2c66affSColin Finck #define CONTEXT_ARM    0x0200000
270c2c66affSColin Finck #define CONTEXT_CONTROL         (CONTEXT_ARM | 0x00000001)
271c2c66affSColin Finck #define CONTEXT_INTEGER         (CONTEXT_ARM | 0x00000002)
272c2c66affSColin Finck #define CONTEXT_FLOATING_POINT  (CONTEXT_ARM | 0x00000004)
273c2c66affSColin Finck #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
274c2c66affSColin Finck 
275c2c66affSColin Finck #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
276c2c66affSColin Finck 
277c2c66affSColin Finck #define EXCEPTION_READ_FAULT    0
278c2c66affSColin Finck #define EXCEPTION_WRITE_FAULT   1
279c2c66affSColin Finck #define EXCEPTION_EXECUTE_FAULT 8
280c2c66affSColin Finck 
281c2c66affSColin Finck typedef struct _RUNTIME_FUNCTION
282c2c66affSColin Finck {
283c2c66affSColin Finck     DWORD BeginAddress;
284c2c66affSColin Finck     union {
285c2c66affSColin Finck         DWORD UnwindData;
286c2c66affSColin Finck         struct {
287c2c66affSColin Finck             DWORD Flag : 2;
288c2c66affSColin Finck             DWORD FunctionLength : 11;
289c2c66affSColin Finck             DWORD Ret : 2;
290c2c66affSColin Finck             DWORD H : 1;
291c2c66affSColin Finck             DWORD Reg : 3;
292c2c66affSColin Finck             DWORD R : 1;
293c2c66affSColin Finck             DWORD L : 1;
294c2c66affSColin Finck             DWORD C : 1;
295c2c66affSColin Finck             DWORD StackAdjust : 10;
296c2c66affSColin Finck         } DUMMYSTRUCTNAME;
297c2c66affSColin Finck     } DUMMYUNIONNAME;
298c2c66affSColin Finck } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
299c2c66affSColin Finck 
300c2c66affSColin Finck #define UNWIND_HISTORY_TABLE_SIZE 12
301c2c66affSColin Finck typedef struct _UNWIND_HISTORY_TABLE_ENTRY
302c2c66affSColin Finck {
303c2c66affSColin Finck     DWORD ImageBase;
304c2c66affSColin Finck     PRUNTIME_FUNCTION FunctionEntry;
305c2c66affSColin Finck } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
306c2c66affSColin Finck 
307c2c66affSColin Finck typedef struct _UNWIND_HISTORY_TABLE
308c2c66affSColin Finck {
309c2c66affSColin Finck     DWORD Count;
310c2c66affSColin Finck     BYTE  LocalHint;
311c2c66affSColin Finck     BYTE  GlobalHint;
312c2c66affSColin Finck     BYTE  Search;
313c2c66affSColin Finck     BYTE  Once;
314c2c66affSColin Finck     DWORD LowAddress;
315c2c66affSColin Finck     DWORD HighAddress;
316c2c66affSColin Finck     UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
317c2c66affSColin Finck } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
318c2c66affSColin Finck 
319c2c66affSColin Finck typedef struct _CONTEXT {
320c2c66affSColin Finck         /* The flags values within this flag control the contents of
321c2c66affSColin Finck            a CONTEXT record.
322c2c66affSColin Finck 
323c2c66affSColin Finck            If the context record is used as an input parameter, then
324c2c66affSColin Finck            for each portion of the context record controlled by a flag
325c2c66affSColin Finck            whose value is set, it is assumed that that portion of the
326c2c66affSColin Finck            context record contains valid context. If the context record
327c2c66affSColin Finck            is being used to modify a thread's context, then only that
328c2c66affSColin Finck            portion of the threads context will be modified.
329c2c66affSColin Finck 
330c2c66affSColin Finck            If the context record is used as an IN OUT parameter to capture
331c2c66affSColin Finck            the context of a thread, then only those portions of the thread's
332c2c66affSColin Finck            context corresponding to set flags will be returned.
333c2c66affSColin Finck 
334c2c66affSColin Finck            The context record is never used as an OUT only parameter. */
335c2c66affSColin Finck 
336c2c66affSColin Finck         ULONG ContextFlags;
337c2c66affSColin Finck 
338c2c66affSColin Finck         /* This section is specified/returned if the ContextFlags word contains
339c2c66affSColin Finck            the flag CONTEXT_INTEGER. */
340c2c66affSColin Finck         ULONG R0;
341c2c66affSColin Finck         ULONG R1;
342c2c66affSColin Finck         ULONG R2;
343c2c66affSColin Finck         ULONG R3;
344c2c66affSColin Finck         ULONG R4;
345c2c66affSColin Finck         ULONG R5;
346c2c66affSColin Finck         ULONG R6;
347c2c66affSColin Finck         ULONG R7;
348c2c66affSColin Finck         ULONG R8;
349c2c66affSColin Finck         ULONG R9;
350c2c66affSColin Finck         ULONG R10;
351c2c66affSColin Finck         ULONG Fp;
352c2c66affSColin Finck         ULONG Ip;
353c2c66affSColin Finck 
354c2c66affSColin Finck         /* These are selected by CONTEXT_CONTROL */
355c2c66affSColin Finck         ULONG Sp;
356c2c66affSColin Finck         ULONG Lr;
357c2c66affSColin Finck         ULONG Pc;
358c2c66affSColin Finck         ULONG Cpsr;
359c2c66affSColin Finck } CONTEXT;
360c2c66affSColin Finck 
361c2c66affSColin Finck BOOLEAN CDECL            RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD);
362c2c66affSColin Finck BOOLEAN CDECL            RtlDeleteFunctionTable(RUNTIME_FUNCTION*);
363c2c66affSColin Finck PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_TABLE*);
364493ceb7aSJérôme Gardou #else
365493ceb7aSJérôme Gardou 
366493ceb7aSJérôme Gardou #error "Unknown target platform"
367493ceb7aSJérôme Gardou 
368c2c66affSColin Finck #endif
369c2c66affSColin Finck 
370c2c66affSColin Finck typedef
371c2c66affSColin Finck EXCEPTION_DISPOSITION
372c2c66affSColin Finck NTAPI
373c2c66affSColin Finck EXCEPTION_ROUTINE(
374c2c66affSColin Finck   struct _EXCEPTION_RECORD *ExceptionRecord,
375c2c66affSColin Finck   PVOID EstablisherFrame,
376c2c66affSColin Finck   struct _CONTEXT *ContextRecord,
377c2c66affSColin Finck   PVOID DispatcherContext);
378c2c66affSColin Finck typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
379c2c66affSColin Finck typedef struct _NT_TIB {
380c2c66affSColin Finck   struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
381c2c66affSColin Finck   PVOID StackBase;
382c2c66affSColin Finck   PVOID StackLimit;
383c2c66affSColin Finck   PVOID SubSystemTib;
384c2c66affSColin Finck   union {
385c2c66affSColin Finck     PVOID FiberData;
386c2c66affSColin Finck     DWORD Version;
387c2c66affSColin Finck   } DUMMYUNIONNAME;
388c2c66affSColin Finck   PVOID ArbitraryUserPointer;
389c2c66affSColin Finck   struct _NT_TIB *Self;
390c2c66affSColin Finck } NT_TIB,*PNT_TIB;
391c2c66affSColin Finck 
392c2c66affSColin Finck // rtltypes.h
393c2c66affSColin Finck typedef struct _EXCEPTION_REGISTRATION_RECORD
394c2c66affSColin Finck {
395c2c66affSColin Finck     struct _EXCEPTION_REGISTRATION_RECORD *Next;
396c2c66affSColin Finck     PEXCEPTION_ROUTINE Handler;
397c2c66affSColin Finck } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
398c2c66affSColin Finck 
399c2c66affSColin Finck // winbase.h
400c2c66affSColin Finck #define INVALID_HANDLE_VALUE (HANDLE)(-1)
401c2c66affSColin Finck #define HeapAlloc __HeapAlloc
402c2c66affSColin Finck #define HeapReAlloc __HeapReAlloc
403c2c66affSColin Finck #define HeapFree(x,y,z) free(z)
404c2c66affSColin Finck #define GetProcessHeap() 1
405c2c66affSColin Finck #define GetProcessId(x) 8
406c2c66affSColin Finck #define lstrcpynW __lstrcpynW
407c2c66affSColin Finck #define CloseHandle __CloseHandle
408c2c66affSColin Finck #define CreateFileA(a,b,c,d,e,f,g) fopen(a, "rb")
409c2c66affSColin Finck #define CreateFileW __CreateFileW
410c2c66affSColin Finck #define CreateFileMappingW(a,b,c,d,e,f) a
411c2c66affSColin Finck #define MapViewOfFile __MapViewOfFile
412c2c66affSColin Finck #define UnmapViewOfFile __UnmapViewOfFile
413c2c66affSColin Finck #define LoadLibraryW(x) 0
414c2c66affSColin Finck #define FreeLibrary(x) 0
415c2c66affSColin Finck #define lstrcpyW strcpyW // Forward this to wine unicode inline function
416c2c66affSColin Finck #define lstrlenW strlenW // ditto
417c2c66affSColin Finck #define lstrcpynA __lstrcpynA
418c2c66affSColin Finck #define SetLastError(x)
419c2c66affSColin Finck #define GetProcAddress(x,y) 0
420c2c66affSColin Finck #define GetEnvironmentVariableA(x, y, z) 0
421c2c66affSColin Finck #define GetEnvironmentVariableW(x, y, z) 0
422c2c66affSColin Finck #define GetCurrentDirectoryW(x, y) 0
423c2c66affSColin Finck #define GetFileSizeEx __GetFileSizeEx
424c2c66affSColin Finck #define ReadProcessMemory(a,b,c,d,e) 0
425*f69be6c5Swinesync #define GetCurrentProcess() (HANDLE)1
426*f69be6c5Swinesync #define IsWow64Process __IsWow64Process
427c2c66affSColin Finck 
428c2c66affSColin Finck void* __HeapAlloc(int heap, int flags, size_t size);
429c2c66affSColin Finck void* __HeapReAlloc(int heap, DWORD d2, void *slab, SIZE_T newsize);
430c2c66affSColin Finck WCHAR* __lstrcpynW(WCHAR* lpString1, const WCHAR* lpString2, int iMaxLength);
431c2c66affSColin Finck BOOL __CloseHandle(HANDLE handle);
432c2c66affSColin Finck HANDLE __CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
433c2c66affSColin Finck void* __MapViewOfFile(HANDLE file,DWORD d1,DWORD d2,DWORD d3,SIZE_T s);
434c2c66affSColin Finck BOOL __UnmapViewOfFile(const void*);
435c2c66affSColin Finck LPSTR __lstrcpynA(LPSTR,LPCSTR,int);
436c2c66affSColin Finck BOOL __GetFileSizeEx(HANDLE,PLARGE_INTEGER);
437*f69be6c5Swinesync BOOL WINAPI __IsWow64Process(HANDLE,BOOL*);
438c2c66affSColin Finck #define OPEN_EXISTING	3
439c2c66affSColin Finck #define FILE_MAP_READ SECTION_MAP_READ
440c2c66affSColin Finck typedef struct _LDT_ENTRY {
441c2c66affSColin Finck 	WORD LimitLow;
442c2c66affSColin Finck 	WORD BaseLow;
443c2c66affSColin Finck 	union {
444c2c66affSColin Finck 		struct {
445c2c66affSColin Finck 			BYTE BaseMid;
446c2c66affSColin Finck 			BYTE Flags1;
447c2c66affSColin Finck 			BYTE Flags2;
448c2c66affSColin Finck 			BYTE BaseHi;
449c2c66affSColin Finck 		} Bytes;
450c2c66affSColin Finck 		struct {
451c2c66affSColin Finck 			DWORD BaseMid:8;
452c2c66affSColin Finck 			DWORD Type:5;
453c2c66affSColin Finck 			DWORD Dpl:2;
454c2c66affSColin Finck 			DWORD Pres:1;
455c2c66affSColin Finck 			DWORD LimitHi:4;
456c2c66affSColin Finck 			DWORD Sys:1;
457c2c66affSColin Finck 			DWORD Reserved_0:1;
458c2c66affSColin Finck 			DWORD Default_Big:1;
459c2c66affSColin Finck 			DWORD Granularity:1;
460c2c66affSColin Finck 			DWORD BaseHi:8;
461c2c66affSColin Finck 		} Bits;
462c2c66affSColin Finck 	} HighWord;
463c2c66affSColin Finck } LDT_ENTRY,*PLDT_ENTRY,*LPLDT_ENTRY;
464c2c66affSColin Finck 
465c2c66affSColin Finck // umtypes.h
466c2c66affSColin Finck typedef LONG KPRIORITY;
467c2c66affSColin Finck 
468c2c66affSColin Finck // winternl.h
469c2c66affSColin Finck #define RtlImageNtHeader __RtlImageNtHeader
470c2c66affSColin Finck #define RtlImageRvaToVa __RtlImageRvaToVa
471c2c66affSColin Finck #define RtlImageRvaToSection __RtlImageRvaToSection
472c2c66affSColin Finck #define RtlImageDirectoryEntryToData __RtlImageDirectoryEntryToData
473c2c66affSColin Finck 
474c2c66affSColin Finck #ifdef _MSC_VER
475c2c66affSColin Finck #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
476c2c66affSColin Finck #else
477c2c66affSColin Finck #define RtlUlongByteSwap(_x) __builtin_bswap32((_x))
478c2c66affSColin Finck #endif
479c2c66affSColin Finck 
480c2c66affSColin Finck PIMAGE_NT_HEADERS __RtlImageNtHeader(void *data);
481c2c66affSColin Finck PVOID __RtlImageRvaToVa (const IMAGE_NT_HEADERS* NtHeader, PVOID BaseAddress, ULONG Rva, PIMAGE_SECTION_HEADER *SectionHeader);
482c2c66affSColin Finck PVOID __RtlImageDirectoryEntryToData(PVOID BaseAddress, BOOLEAN MappedAsImage, USHORT Directory, PULONG Size);
483c2c66affSColin Finck 
484c2c66affSColin Finck typedef struct _CLIENT_ID
485c2c66affSColin Finck {
486c2c66affSColin Finck    HANDLE UniqueProcess;
487c2c66affSColin Finck    HANDLE UniqueThread;
488c2c66affSColin Finck } CLIENT_ID, *PCLIENT_ID;
489c2c66affSColin Finck #define GDI_BATCH_BUFFER_SIZE 0x136
490c2c66affSColin Finck typedef struct _GDI_TEB_BATCH
491c2c66affSColin Finck {
492c2c66affSColin Finck     ULONG Offset;
493c2c66affSColin Finck     HANDLE HDC;
494c2c66affSColin Finck     ULONG Buffer[GDI_BATCH_BUFFER_SIZE];
495c2c66affSColin Finck } GDI_TEB_BATCH, *PGDI_TEB_BATCH;
496c2c66affSColin Finck typedef struct _TEB
497c2c66affSColin Finck {
498c2c66affSColin Finck     NT_TIB          Tib;                        /* 000 */
499c2c66affSColin Finck     PVOID           EnvironmentPointer;         /* 01c */
500c2c66affSColin Finck     CLIENT_ID       ClientId;                   /* 020 */
501c2c66affSColin Finck     PVOID           ActiveRpcHandle;            /* 028 */
502c2c66affSColin Finck     PVOID           ThreadLocalStoragePointer;  /* 02c */
503c2c66affSColin Finck     PVOID           Peb;                        /* 030 */
504c2c66affSColin Finck     ULONG           LastErrorValue;             /* 034 */
505c2c66affSColin Finck     ULONG           CountOfOwnedCriticalSections;/* 038 */
506c2c66affSColin Finck     PVOID           CsrClientThread;            /* 03c */
507c2c66affSColin Finck     PVOID           Win32ThreadInfo;            /* 040 */
508c2c66affSColin Finck     ULONG           Win32ClientInfo[31];        /* 044 used for user32 private data in Wine */
509c2c66affSColin Finck     PVOID           WOW32Reserved;              /* 0c0 */
510c2c66affSColin Finck     ULONG           CurrentLocale;              /* 0c4 */
511c2c66affSColin Finck     ULONG           FpSoftwareStatusRegister;   /* 0c8 */
512c2c66affSColin Finck     PVOID           SystemReserved1[54];        /* 0cc used for kernel32 private data in Wine */
513c2c66affSColin Finck     PVOID           Spare1;                     /* 1a4 */
514c2c66affSColin Finck     LONG            ExceptionCode;              /* 1a8 */
515c2c66affSColin Finck     PVOID     ActivationContextStackPointer;            /* 1a8/02c8 */
516c2c66affSColin Finck     BYTE            SpareBytes1[36];            /* 1ac */
517c2c66affSColin Finck     PVOID           SystemReserved2[10];        /* 1d4 used for ntdll private data in Wine */
518c2c66affSColin Finck     GDI_TEB_BATCH   GdiTebBatch;                /* 1fc */
519c2c66affSColin Finck     ULONG           gdiRgn;                     /* 6dc */
520c2c66affSColin Finck     ULONG           gdiPen;                     /* 6e0 */
521c2c66affSColin Finck     ULONG           gdiBrush;                   /* 6e4 */
522c2c66affSColin Finck     CLIENT_ID       RealClientId;               /* 6e8 */
523c2c66affSColin Finck     HANDLE          GdiCachedProcessHandle;     /* 6f0 */
524c2c66affSColin Finck     ULONG           GdiClientPID;               /* 6f4 */
525c2c66affSColin Finck     ULONG           GdiClientTID;               /* 6f8 */
526c2c66affSColin Finck     PVOID           GdiThreadLocaleInfo;        /* 6fc */
527c2c66affSColin Finck     PVOID           UserReserved[5];            /* 700 */
528c2c66affSColin Finck     PVOID           glDispatchTable[280];        /* 714 */
529c2c66affSColin Finck     ULONG           glReserved1[26];            /* b74 */
530c2c66affSColin Finck     PVOID           glReserved2;                /* bdc */
531c2c66affSColin Finck     PVOID           glSectionInfo;              /* be0 */
532c2c66affSColin Finck     PVOID           glSection;                  /* be4 */
533c2c66affSColin Finck     PVOID           glTable;                    /* be8 */
534c2c66affSColin Finck     PVOID           glCurrentRC;                /* bec */
535c2c66affSColin Finck     PVOID           glContext;                  /* bf0 */
536c2c66affSColin Finck     ULONG           LastStatusValue;            /* bf4 */
537c2c66affSColin Finck     UNICODE_STRING  StaticUnicodeString;        /* bf8 used by advapi32 */
538c2c66affSColin Finck     WCHAR           StaticUnicodeBuffer[261];   /* c00 used by advapi32 */
539c2c66affSColin Finck     PVOID           DeallocationStack;          /* e0c */
540c2c66affSColin Finck     PVOID           TlsSlots[64];               /* e10 */
541c2c66affSColin Finck     LIST_ENTRY      TlsLinks;                   /* f10 */
542c2c66affSColin Finck     PVOID           Vdm;                        /* f18 */
543c2c66affSColin Finck     PVOID           ReservedForNtRpc;           /* f1c */
544c2c66affSColin Finck     PVOID           DbgSsReserved[2];           /* f20 */
545c2c66affSColin Finck     ULONG           HardErrorDisabled;          /* f28 */
546c2c66affSColin Finck     PVOID           Instrumentation[16];        /* f2c */
547c2c66affSColin Finck     PVOID           WinSockData;                /* f6c */
548c2c66affSColin Finck     ULONG           GdiBatchCount;              /* f70 */
549c2c66affSColin Finck     ULONG           Spare2;                     /* f74 */
550c2c66affSColin Finck     ULONG           Spare3;                     /* f78 */
551c2c66affSColin Finck     ULONG           Spare4;                     /* f7c */
552c2c66affSColin Finck     PVOID           ReservedForOle;             /* f80 */
553c2c66affSColin Finck     ULONG           WaitingOnLoaderLock;        /* f84 */
554c2c66affSColin Finck     PVOID           Reserved5[3];               /* f88 */
555c2c66affSColin Finck     PVOID          *TlsExpansionSlots;          /* f94 */
556c2c66affSColin Finck } TEB, *PTEB;
557c2c66affSColin Finck 
558c2c66affSColin Finck 
559c2c66affSColin Finck // winver.h
560c2c66affSColin Finck typedef struct tagVS_FIXEDFILEINFO {
561c2c66affSColin Finck 	DWORD dwSignature;
562c2c66affSColin Finck 	DWORD dwStrucVersion;
563c2c66affSColin Finck 	DWORD dwFileVersionMS;
564c2c66affSColin Finck 	DWORD dwFileVersionLS;
565c2c66affSColin Finck 	DWORD dwProductVersionMS;
566c2c66affSColin Finck 	DWORD dwProductVersionLS;
567c2c66affSColin Finck 	DWORD dwFileFlagsMask;
568c2c66affSColin Finck 	DWORD dwFileFlags;
569c2c66affSColin Finck 	DWORD dwFileOS;
570c2c66affSColin Finck 	DWORD dwFileType;
571c2c66affSColin Finck 	DWORD dwFileSubtype;
572c2c66affSColin Finck 	DWORD dwFileDateMS;
573c2c66affSColin Finck 	DWORD dwFileDateLS;
574c2c66affSColin Finck } VS_FIXEDFILEINFO;
575c2c66affSColin Finck 
576c2c66affSColin Finck 
577c2c66affSColin Finck // psapi.h
578c2c66affSColin Finck typedef struct _MODULEINFO {
579c2c66affSColin Finck 	LPVOID lpBaseOfDll;
580c2c66affSColin Finck 	DWORD SizeOfImage;
581c2c66affSColin Finck 	LPVOID EntryPoint;
582c2c66affSColin Finck } MODULEINFO,*LPMODULEINFO;
583c2c66affSColin Finck #define GetModuleFileNameExW(w, x, y, z) 0
584c2c66affSColin Finck 
585c2c66affSColin Finck // pstypes.h
586c2c66affSColin Finck typedef struct _THREAD_BASIC_INFORMATION
587c2c66affSColin Finck {
588c2c66affSColin Finck     NTSTATUS ExitStatus;
589c2c66affSColin Finck     PVOID TebBaseAddress;
590c2c66affSColin Finck     CLIENT_ID ClientId;
591c2c66affSColin Finck     KAFFINITY AffinityMask;
592c2c66affSColin Finck     KPRIORITY Priority;
593c2c66affSColin Finck     KPRIORITY BasePriority;
594c2c66affSColin Finck } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
595c2c66affSColin Finck typedef enum _THREADINFOCLASS {
596c2c66affSColin Finck   ThreadBasicInformation,
597c2c66affSColin Finck   ThreadTimes,
598c2c66affSColin Finck   ThreadPriority,
599c2c66affSColin Finck   ThreadBasePriority,
600c2c66affSColin Finck   ThreadAffinityMask,
601c2c66affSColin Finck   ThreadImpersonationToken,
602c2c66affSColin Finck   ThreadDescriptorTableEntry,
603c2c66affSColin Finck   ThreadEnableAlignmentFaultFixup,
604c2c66affSColin Finck   ThreadEventPair_Reusable,
605c2c66affSColin Finck   ThreadQuerySetWin32StartAddress,
606c2c66affSColin Finck   ThreadZeroTlsCell,
607c2c66affSColin Finck   ThreadPerformanceCount,
608c2c66affSColin Finck   ThreadAmILastThread,
609c2c66affSColin Finck   ThreadIdealProcessor,
610c2c66affSColin Finck   ThreadPriorityBoost,
611c2c66affSColin Finck   ThreadSetTlsArrayAddress,
612c2c66affSColin Finck   ThreadIsIoPending,
613c2c66affSColin Finck   ThreadHideFromDebugger,
614c2c66affSColin Finck   ThreadBreakOnTermination,
615c2c66affSColin Finck   ThreadSwitchLegacyState,
616c2c66affSColin Finck   ThreadIsTerminated,
617c2c66affSColin Finck   ThreadLastSystemCall,
618c2c66affSColin Finck   ThreadIoPriority,
619c2c66affSColin Finck   ThreadCycleTime,
620c2c66affSColin Finck   ThreadPagePriority,
621c2c66affSColin Finck   ThreadActualBasePriority,
622c2c66affSColin Finck   ThreadTebInformation,
623c2c66affSColin Finck   ThreadCSwitchMon,
624c2c66affSColin Finck   ThreadCSwitchPmu,
625c2c66affSColin Finck   ThreadWow64Context,
626c2c66affSColin Finck   ThreadGroupInformation,
627c2c66affSColin Finck   ThreadUmsInformation,
628c2c66affSColin Finck   ThreadCounterProfiling,
629c2c66affSColin Finck   ThreadIdealProcessorEx,
630c2c66affSColin Finck   MaxThreadInfoClass
631c2c66affSColin Finck } THREADINFOCLASS;
632c2c66affSColin Finck 
633c2c66affSColin Finck 
634c2c66affSColin Finck // dbghelp.h
635c2c66affSColin Finck typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
636c2c66affSColin Finck #define MAX_SYM_NAME    2000
637c2c66affSColin Finck #define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
638c2c66affSColin Finck #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
639c2c66affSColin Finck #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
640c2c66affSColin Finck #define CBA_SYMBOLS_UNLOADED                    0x00000004
641c2c66affSColin Finck #define CBA_DUPLICATE_SYMBOL                    0x00000005
642c2c66affSColin Finck #define CBA_READ_MEMORY                         0x00000006
643c2c66affSColin Finck #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL         0x00000007
644c2c66affSColin Finck #define CBA_SET_OPTIONS                         0x00000008
645c2c66affSColin Finck #define CBA_EVENT                               0x00000010
646c2c66affSColin Finck #define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL        0x00000020
647c2c66affSColin Finck #define CBA_DEBUG_INFO                          0x10000000
648c2c66affSColin Finck #define SYMOPT_CASE_INSENSITIVE         0x00000001
649c2c66affSColin Finck #define SYMOPT_UNDNAME                  0x00000002
650c2c66affSColin Finck #define SYMOPT_DEFERRED_LOADS           0x00000004
651c2c66affSColin Finck #define SYMOPT_LOAD_LINES               0x00000010
652c2c66affSColin Finck #define SYMOPT_LOAD_ANYTHING            0x00000040
653c2c66affSColin Finck #define SYMOPT_PUBLICS_ONLY             0x00004000
654c2c66affSColin Finck #define SYMOPT_NO_PUBLICS               0x00008000
655c2c66affSColin Finck #define SYMOPT_AUTO_PUBLICS             0x00010000
656c2c66affSColin Finck #define SYMFLAG_VALUEPRESENT     0x00000001
657c2c66affSColin Finck #define SYMFLAG_REGISTER         0x00000008
658c2c66affSColin Finck #define SYMFLAG_REGREL           0x00000010
659c2c66affSColin Finck #define SYMFLAG_FRAMEREL         0x00000020
660c2c66affSColin Finck #define SYMFLAG_PARAMETER        0x00000040
661c2c66affSColin Finck #define SYMFLAG_LOCAL            0x00000080
662c2c66affSColin Finck #define SYMFLAG_CONSTANT         0x00000100
663c2c66affSColin Finck #define SYMFLAG_EXPORT           0x00000200
664c2c66affSColin Finck #define SYMFLAG_FORWARDER        0x00000400
665c2c66affSColin Finck #define SYMFLAG_FUNCTION         0x00000800
666c2c66affSColin Finck #define SYMFLAG_VIRTUAL          0x00001000
667c2c66affSColin Finck #define SYMFLAG_THUNK            0x00002000
668c2c66affSColin Finck #define SYMFLAG_TLSREL           0x00004000
669c2c66affSColin Finck #define SYMFLAG_SLOT             0x00008000
6709466a005SAndreas Maier #define SYMFLAG_ILREL            0x00010000
6719466a005SAndreas Maier #define SYMFLAG_METADATA         0x00020000
6729466a005SAndreas Maier #define SYMFLAG_CLR_TOKEN        0x00040000
6739466a005SAndreas Maier #define SYMFLAG_NULL             0x00080000
6749466a005SAndreas Maier #define SYMFLAG_FUNC_NO_RETURN   0x00100000
6759466a005SAndreas Maier #define SYMFLAG_SYNTHETIC_ZEROBASE 0x00200000
6769466a005SAndreas Maier #define SYMFLAG_PUBLIC_CODE      0x00400000
677c2c66affSColin Finck #define UNDNAME_COMPLETE                 (0x0000)
678c2c66affSColin Finck #define UNDNAME_NAME_ONLY                (0x1000)
679c2c66affSColin Finck typedef struct _TI_FINDCHILDREN_PARAMS
680c2c66affSColin Finck {
681c2c66affSColin Finck     ULONG Count;
682c2c66affSColin Finck     ULONG Start;
683c2c66affSColin Finck     ULONG ChildId[1];
684c2c66affSColin Finck } TI_FINDCHILDREN_PARAMS;
685c2c66affSColin Finck #define SYMSEARCH_GLOBALSONLY           0x04
686c2c66affSColin Finck /* flags for SymLoadModuleEx */
687c2c66affSColin Finck #define SLMFLAG_VIRTUAL         0x1
688c2c66affSColin Finck #define SLMFLAG_NO_SYMBOLS      0x4
689c2c66affSColin Finck typedef struct _DBGHELP_MODLOAD_DATA
690c2c66affSColin Finck {
691c2c66affSColin Finck     DWORD               ssize;
692c2c66affSColin Finck     DWORD               ssig;
693c2c66affSColin Finck     PVOID               data;
694c2c66affSColin Finck     DWORD               size;
695c2c66affSColin Finck     DWORD               flags;
696c2c66affSColin Finck } MODLOAD_DATA, *PMODLOAD_DATA;
697c2c66affSColin Finck typedef struct _SYMBOL_INFO
698c2c66affSColin Finck {
699c2c66affSColin Finck     ULONG       SizeOfStruct;
700c2c66affSColin Finck     ULONG       TypeIndex;
701c2c66affSColin Finck     ULONG64     Reserved[2];
702c2c66affSColin Finck     ULONG       Index;
703c2c66affSColin Finck     ULONG       Size;
704c2c66affSColin Finck     ULONG64     ModBase;
705c2c66affSColin Finck     ULONG       Flags;
706c2c66affSColin Finck     ULONG64     Value;
707c2c66affSColin Finck     ULONG64     Address;
708c2c66affSColin Finck     ULONG       Register;
709c2c66affSColin Finck     ULONG       Scope;
710c2c66affSColin Finck     ULONG       Tag;
711c2c66affSColin Finck     ULONG       NameLen;
712c2c66affSColin Finck     ULONG       MaxNameLen;
713c2c66affSColin Finck     CHAR        Name[1];
714c2c66affSColin Finck } SYMBOL_INFO, *PSYMBOL_INFO;
715c2c66affSColin Finck typedef enum
716c2c66affSColin Finck {
717c2c66affSColin Finck     SymNone = 0,
718c2c66affSColin Finck     SymCoff,
719c2c66affSColin Finck     SymCv,
720c2c66affSColin Finck     SymPdb,
721c2c66affSColin Finck     SymExport,
722c2c66affSColin Finck     SymDeferred,
723c2c66affSColin Finck     SymSym,
724c2c66affSColin Finck     SymDia,
725c2c66affSColin Finck     SymVirtual,
726c2c66affSColin Finck     NumSymTypes
727c2c66affSColin Finck } SYM_TYPE;
728c2c66affSColin Finck typedef struct _IMAGEHLP_MODULEW64
729c2c66affSColin Finck {
730c2c66affSColin Finck     DWORD                       SizeOfStruct;
731c2c66affSColin Finck     DWORD64                     BaseOfImage;
732c2c66affSColin Finck     DWORD                       ImageSize;
733c2c66affSColin Finck     DWORD                       TimeDateStamp;
734c2c66affSColin Finck     DWORD                       CheckSum;
735c2c66affSColin Finck     DWORD                       NumSyms;
736c2c66affSColin Finck     SYM_TYPE                    SymType;
737c2c66affSColin Finck     WCHAR                       ModuleName[32];
738c2c66affSColin Finck     WCHAR                       ImageName[256];
739c2c66affSColin Finck     WCHAR                       LoadedImageName[256];
740c2c66affSColin Finck     WCHAR                       LoadedPdbName[256];
741c2c66affSColin Finck     DWORD                       CVSig;
742c2c66affSColin Finck     WCHAR                       CVData[MAX_PATH*3];
743c2c66affSColin Finck     DWORD                       PdbSig;
744c2c66affSColin Finck     GUID                        PdbSig70;
745c2c66affSColin Finck     DWORD                       PdbAge;
746c2c66affSColin Finck     BOOL                        PdbUnmatched;
747c2c66affSColin Finck     BOOL                        DbgUnmatched;
748c2c66affSColin Finck     BOOL                        LineNumbers;
749c2c66affSColin Finck     BOOL                        GlobalSymbols;
750c2c66affSColin Finck     BOOL                        TypeInfo;
751c2c66affSColin Finck     BOOL                        SourceIndexed;
752c2c66affSColin Finck     BOOL                        Publics;
753c2c66affSColin Finck } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
754c2c66affSColin Finck typedef struct _IMAGEHLP_LINE64
755c2c66affSColin Finck {
756c2c66affSColin Finck     DWORD                       SizeOfStruct;
757c2c66affSColin Finck     PVOID                       Key;
758c2c66affSColin Finck     DWORD                       LineNumber;
759c2c66affSColin Finck     PCHAR                       FileName;
760c2c66affSColin Finck     DWORD64                     Address;
761c2c66affSColin Finck } IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
762c2c66affSColin Finck typedef struct _SRCCODEINFO
763c2c66affSColin Finck {
764c2c66affSColin Finck     DWORD       SizeOfStruct;
765c2c66affSColin Finck     PVOID       Key;
766c2c66affSColin Finck     DWORD64     ModBase;
767c2c66affSColin Finck     CHAR        Obj[MAX_PATH+1];
768c2c66affSColin Finck     CHAR        FileName[MAX_PATH+1];
769c2c66affSColin Finck     DWORD       LineNumber;
770c2c66affSColin Finck     DWORD64     Address;
771c2c66affSColin Finck } SRCCODEINFO, *PSRCCODEINFO;
772c2c66affSColin Finck typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);
773c2c66affSColin Finck typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
774c2c66affSColin Finck BOOL WINAPI SymInitialize(HANDLE hProcess, PCSTR UserSearchPath, BOOL fInvadeProcess);
775c2c66affSColin Finck BOOL WINAPI SymCleanup(HANDLE hProcess);
776c2c66affSColin Finck BOOL WINAPI SymAddSymbolW(HANDLE hProcess, ULONG64 BaseOfDll, PCWSTR name, DWORD64 addr, DWORD size, DWORD flags);
777c2c66affSColin Finck BOOL  WINAPI SymGetModuleInfoW64(HANDLE hProcess, DWORD64 dwAddr, PIMAGEHLP_MODULEW64 ModuleInfo);
778c2c66affSColin Finck BOOL WINAPI SymMatchStringW(PCWSTR string, PCWSTR re, BOOL _case);
779c2c66affSColin Finck DWORD WINAPI SymLoadModule(HANDLE hProcess, HANDLE hFile, PCSTR ImageName,
780c2c66affSColin Finck                            PCSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll);
781c2c66affSColin Finck DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,
782c2c66affSColin Finck                                PMODLOAD_DATA, DWORD);
783c2c66affSColin Finck DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD,
784c2c66affSColin Finck                                 PMODLOAD_DATA, DWORD);
785c2c66affSColin Finck DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);
786c2c66affSColin Finck BOOL WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll);
787c2c66affSColin Finck PVOID   WINAPI SymFunctionTableAccess(HANDLE, DWORD);
788c2c66affSColin Finck PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);
789c2c66affSColin Finck BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD64 Address, DWORD64* Displacement, PSYMBOL_INFO Symbol);
790c2c66affSColin Finck BOOL WINAPI SymEnumLines(HANDLE hProcess, ULONG64 base, PCSTR compiland, PCSTR srcfile, PSYM_ENUMLINES_CALLBACK cb, PVOID user);
791c2c66affSColin Finck DWORD WINAPI SymSetOptions(DWORD opts);
792c2c66affSColin Finck BOOL WINAPI SymGetLineFromAddr64(HANDLE hProcess, DWORD64 dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINE64 Line);
793c2c66affSColin Finck typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
794c2c66affSColin Finck #define FindExecutableImageExW __FindExecutableImageExW
795c2c66affSColin Finck HANDLE __FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
796c2c66affSColin Finck DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD);
797c2c66affSColin Finck typedef enum _THREAD_WRITE_FLAGS
798c2c66affSColin Finck {
799c2c66affSColin Finck     ThreadWriteThread            = 0x0001,
800c2c66affSColin Finck     ThreadWriteStack             = 0x0002,
801c2c66affSColin Finck     ThreadWriteContext           = 0x0004,
802c2c66affSColin Finck     ThreadWriteBackingStore      = 0x0008,
803c2c66affSColin Finck     ThreadWriteInstructionWindow = 0x0010,
804c2c66affSColin Finck     ThreadWriteThreadData        = 0x0020,
805c2c66affSColin Finck     ThreadWriteThreadInfo        = 0x0040
806c2c66affSColin Finck } THREAD_WRITE_FLAGS;
807c2c66affSColin Finck typedef enum
808c2c66affSColin Finck {
809c2c66affSColin Finck     AddrMode1616,
810c2c66affSColin Finck     AddrMode1632,
811c2c66affSColin Finck     AddrModeReal,
812c2c66affSColin Finck     AddrModeFlat
813c2c66affSColin Finck } ADDRESS_MODE;
814c2c66affSColin Finck typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64
815c2c66affSColin Finck {
816c2c66affSColin Finck     DWORD                       SizeOfStruct;
817c2c66affSColin Finck     DWORD64                     BaseOfImage;
818c2c66affSColin Finck     DWORD                       CheckSum;
819c2c66affSColin Finck     DWORD                       TimeDateStamp;
820c2c66affSColin Finck     WCHAR                       FileName[MAX_PATH + 1];
821c2c66affSColin Finck     BOOLEAN                     Reparse;
822c2c66affSColin Finck     HANDLE                      hFile;
823c2c66affSColin Finck     DWORD                       Flags;
824c2c66affSColin Finck } IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;
825c2c66affSColin Finck typedef struct _tagADDRESS64
826c2c66affSColin Finck {
827c2c66affSColin Finck     DWORD64                     Offset;
828c2c66affSColin Finck     WORD                        Segment;
829c2c66affSColin Finck     ADDRESS_MODE                Mode;
830c2c66affSColin Finck } ADDRESS64, *LPADDRESS64;
831c2c66affSColin Finck typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID);
832c2c66affSColin Finck typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);
833c2c66affSColin Finck typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);
834c2c66affSColin Finck typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);
835c2c66affSColin Finck typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);
836c2c66affSColin Finck typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)(HANDLE, DWORD64, PVOID, DWORD, PDWORD);
837c2c66affSColin Finck typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID);
838c2c66affSColin Finck typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID);
839c2c66affSColin Finck typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
840c2c66affSColin Finck typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID);
841c2c66affSColin Finck typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
842c2c66affSColin Finck typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID);
843c2c66affSColin Finck 
844c2c66affSColin Finck BOOL WINAPI SymEnumerateModulesW64(HANDLE hProcess, PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback, PVOID UserContext);
845c2c66affSColin Finck 
846c2c66affSColin Finck typedef struct _tagADDRESS
847c2c66affSColin Finck {
848c2c66affSColin Finck     DWORD                       Offset;
849c2c66affSColin Finck     WORD                        Segment;
850c2c66affSColin Finck     ADDRESS_MODE                Mode;
851c2c66affSColin Finck } ADDRESS, *LPADDRESS;
852c2c66affSColin Finck 
853c2c66affSColin Finck typedef struct _IMAGEHLP_MODULE
854c2c66affSColin Finck {
855c2c66affSColin Finck     DWORD                       SizeOfStruct;
856c2c66affSColin Finck     DWORD                       BaseOfImage;
857c2c66affSColin Finck     DWORD                       ImageSize;
858c2c66affSColin Finck     DWORD                       TimeDateStamp;
859c2c66affSColin Finck     DWORD                       CheckSum;
860c2c66affSColin Finck     DWORD                       NumSyms;
861c2c66affSColin Finck     SYM_TYPE                    SymType;
862c2c66affSColin Finck     CHAR                        ModuleName[32];
863c2c66affSColin Finck     CHAR                        ImageName[256];
864c2c66affSColin Finck     CHAR                        LoadedImageName[256];
865c2c66affSColin Finck } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
866c2c66affSColin Finck typedef struct _IMAGEHLP_MODULEW
867c2c66affSColin Finck {
868c2c66affSColin Finck     DWORD                       SizeOfStruct;
869c2c66affSColin Finck     DWORD                       BaseOfImage;
870c2c66affSColin Finck     DWORD                       ImageSize;
871c2c66affSColin Finck     DWORD                       TimeDateStamp;
872c2c66affSColin Finck     DWORD                       CheckSum;
873c2c66affSColin Finck     DWORD                       NumSyms;
874c2c66affSColin Finck     SYM_TYPE                    SymType;
875c2c66affSColin Finck     WCHAR                       ModuleName[32];
876c2c66affSColin Finck     WCHAR                       ImageName[256];
877c2c66affSColin Finck     WCHAR                       LoadedImageName[256];
878c2c66affSColin Finck } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
879c2c66affSColin Finck typedef BOOL  (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
880c2c66affSColin Finck typedef BOOL  (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
881c2c66affSColin Finck typedef BOOL  (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE, DWORD, PVOID, DWORD, PDWORD);
882c2c66affSColin Finck typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
883c2c66affSColin Finck typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
884c2c66affSColin Finck typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
885c2c66affSColin Finck typedef BOOL  (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID);
886c2c66affSColin Finck typedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
887c2c66affSColin Finck typedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID);
888c2c66affSColin Finck 
889c2c66affSColin Finck typedef struct _IMAGEHLP_MODULE64
890c2c66affSColin Finck {
891c2c66affSColin Finck     DWORD                       SizeOfStruct;
892c2c66affSColin Finck     DWORD64                     BaseOfImage;
893c2c66affSColin Finck     DWORD                       ImageSize;
894c2c66affSColin Finck     DWORD                       TimeDateStamp;
895c2c66affSColin Finck     DWORD                       CheckSum;
896c2c66affSColin Finck     DWORD                       NumSyms;
897c2c66affSColin Finck     SYM_TYPE                    SymType;
898c2c66affSColin Finck     CHAR                        ModuleName[32];
899c2c66affSColin Finck     CHAR                        ImageName[256];
900c2c66affSColin Finck     CHAR                        LoadedImageName[256];
901c2c66affSColin Finck     CHAR                        LoadedPdbName[256];
902c2c66affSColin Finck     DWORD                       CVSig;
903c2c66affSColin Finck     CHAR                        CVData[MAX_PATH*3];
904c2c66affSColin Finck     DWORD                       PdbSig;
905c2c66affSColin Finck     GUID                        PdbSig70;
906c2c66affSColin Finck     DWORD                       PdbAge;
907c2c66affSColin Finck     BOOL                        PdbUnmatched;
908c2c66affSColin Finck     BOOL                        DbgUnmatched;
909c2c66affSColin Finck     BOOL                        LineNumbers;
910c2c66affSColin Finck     BOOL                        GlobalSymbols;
911c2c66affSColin Finck     BOOL                        TypeInfo;
912c2c66affSColin Finck     BOOL                        SourceIndexed;
913c2c66affSColin Finck     BOOL                        Publics;
914c2c66affSColin Finck } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
915c2c66affSColin Finck typedef DWORD   RVA;
916c2c66affSColin Finck typedef ULONG64 RVA64;
917c2c66affSColin Finck typedef enum _MINIDUMP_TYPE
918c2c66affSColin Finck {
919c2c66affSColin Finck     MiniDumpNormal                              = 0x0000,
920c2c66affSColin Finck     MiniDumpWithDataSegs                        = 0x0001,
921c2c66affSColin Finck     MiniDumpWithFullMemory                      = 0x0002,
922c2c66affSColin Finck     MiniDumpWithHandleData                      = 0x0004,
923c2c66affSColin Finck     MiniDumpFilterMemory                        = 0x0008,
924c2c66affSColin Finck     MiniDumpScanMemory                          = 0x0010,
925c2c66affSColin Finck     MiniDumpWithUnloadedModules                 = 0x0020,
926c2c66affSColin Finck     MiniDumpWithIndirectlyReferencedMemory      = 0x0040,
927c2c66affSColin Finck     MiniDumpFilterModulePaths                   = 0x0080,
928c2c66affSColin Finck     MiniDumpWithProcessThreadData               = 0x0100,
929c2c66affSColin Finck     MiniDumpWithPrivateReadWriteMemory          = 0x0200,
930c2c66affSColin Finck     MiniDumpWithoutOptionalData                 = 0x0400,
931c2c66affSColin Finck     MiniDumpWithFullMemoryInfo                  = 0x0800,
932c2c66affSColin Finck     MiniDumpWithThreadInfo                      = 0x1000,
933c2c66affSColin Finck     MiniDumpWithCodeSegs                        = 0x2000
934c2c66affSColin Finck } MINIDUMP_TYPE;
935c2c66affSColin Finck typedef struct _MINIDUMP_THREAD_CALLBACK
936c2c66affSColin Finck {
937c2c66affSColin Finck     ULONG                       ThreadId;
938c2c66affSColin Finck     HANDLE                      ThreadHandle;
939c2c66affSColin Finck     CONTEXT                     Context;
940c2c66affSColin Finck     ULONG                       SizeOfContext;
941c2c66affSColin Finck     ULONG64                     StackBase;
942c2c66affSColin Finck     ULONG64                     StackEnd;
943c2c66affSColin Finck } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
944c2c66affSColin Finck typedef struct _MINIDUMP_THREAD_EX_CALLBACK
945c2c66affSColin Finck {
946c2c66affSColin Finck     ULONG                       ThreadId;
947c2c66affSColin Finck     HANDLE                      ThreadHandle;
948c2c66affSColin Finck     CONTEXT                     Context;
949c2c66affSColin Finck     ULONG                       SizeOfContext;
950c2c66affSColin Finck     ULONG64                     StackBase;
951c2c66affSColin Finck     ULONG64                     StackEnd;
952c2c66affSColin Finck     ULONG64                     BackingStoreBase;
953c2c66affSColin Finck     ULONG64                     BackingStoreEnd;
954c2c66affSColin Finck } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
955c2c66affSColin Finck typedef struct _MINIDUMP_MODULE_CALLBACK
956c2c66affSColin Finck {
957c2c66affSColin Finck     PWCHAR                      FullPath;
958c2c66affSColin Finck     ULONG64                     BaseOfImage;
959c2c66affSColin Finck     ULONG                       SizeOfImage;
960c2c66affSColin Finck     ULONG                       CheckSum;
961c2c66affSColin Finck     ULONG                       TimeDateStamp;
962c2c66affSColin Finck     VS_FIXEDFILEINFO            VersionInfo;
963c2c66affSColin Finck     PVOID                       CvRecord;
964c2c66affSColin Finck     ULONG                       SizeOfCvRecord;
965c2c66affSColin Finck     PVOID                       MiscRecord;
966c2c66affSColin Finck     ULONG                       SizeOfMiscRecord;
967c2c66affSColin Finck } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
968c2c66affSColin Finck typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
969c2c66affSColin Finck {
970c2c66affSColin Finck     ULONG ThreadId;
971c2c66affSColin Finck } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
972c2c66affSColin Finck typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK
973c2c66affSColin Finck {
974c2c66affSColin Finck     ULONG64 BaseOfImage;
975c2c66affSColin Finck } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
976c2c66affSColin Finck typedef struct _MINIDUMP_CALLBACK_INPUT
977c2c66affSColin Finck {
978c2c66affSColin Finck     ULONG                       ProcessId;
979c2c66affSColin Finck     HANDLE                      ProcessHandle;
980c2c66affSColin Finck     ULONG                       CallbackType;
981c2c66affSColin Finck     union
982c2c66affSColin Finck     {
983c2c66affSColin Finck         MINIDUMP_THREAD_CALLBACK        Thread;
984c2c66affSColin Finck         MINIDUMP_THREAD_EX_CALLBACK     ThreadEx;
985c2c66affSColin Finck         MINIDUMP_MODULE_CALLBACK        Module;
986c2c66affSColin Finck         MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
987c2c66affSColin Finck         MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
988c2c66affSColin Finck     } DUMMYUNIONNAME;
989c2c66affSColin Finck } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
990c2c66affSColin Finck typedef struct _MINIDUMP_CALLBACK_OUTPUT
991c2c66affSColin Finck {
992c2c66affSColin Finck     union
993c2c66affSColin Finck     {
994c2c66affSColin Finck         ULONG                           ModuleWriteFlags;
995c2c66affSColin Finck         ULONG                           ThreadWriteFlags;
996c2c66affSColin Finck         struct
997c2c66affSColin Finck         {
998c2c66affSColin Finck             ULONG64                     MemoryBase;
999c2c66affSColin Finck             ULONG                       MemorySize;
1000c2c66affSColin Finck         } DUMMYSTRUCTNAME;
1001c2c66affSColin Finck     } DUMMYUNIONNAME;
1002c2c66affSColin Finck } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
1003c2c66affSColin Finck typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);
1004c2c66affSColin Finck typedef struct _MINIDUMP_CALLBACK_INFORMATION
1005c2c66affSColin Finck {
1006c2c66affSColin Finck     MINIDUMP_CALLBACK_ROUTINE   CallbackRoutine;
1007c2c66affSColin Finck     void*                       CallbackParam;
1008c2c66affSColin Finck } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
1009c2c66affSColin Finck typedef struct _SYMBOL_INFOW
1010c2c66affSColin Finck {
1011c2c66affSColin Finck     ULONG       SizeOfStruct;
1012c2c66affSColin Finck     ULONG       TypeIndex;
1013c2c66affSColin Finck     ULONG64     Reserved[2];
1014c2c66affSColin Finck     ULONG       Index;
1015c2c66affSColin Finck     ULONG       Size;
1016c2c66affSColin Finck     ULONG64     ModBase;
1017c2c66affSColin Finck     ULONG       Flags;
1018c2c66affSColin Finck     ULONG64     Value;
1019c2c66affSColin Finck     ULONG64     Address;
1020c2c66affSColin Finck     ULONG       Register;
1021c2c66affSColin Finck     ULONG       Scope;
1022c2c66affSColin Finck     ULONG       Tag;
1023c2c66affSColin Finck     ULONG       NameLen;
1024c2c66affSColin Finck     ULONG       MaxNameLen;
1025c2c66affSColin Finck     WCHAR       Name[1];
1026c2c66affSColin Finck } SYMBOL_INFOW, *PSYMBOL_INFOW;
1027c2c66affSColin Finck typedef struct _IMAGEHLP_STACK_FRAME
1028c2c66affSColin Finck {
1029c2c66affSColin Finck     ULONG64     InstructionOffset;
1030c2c66affSColin Finck     ULONG64     ReturnOffset;
1031c2c66affSColin Finck     ULONG64     FrameOffset;
1032c2c66affSColin Finck     ULONG64     StackOffset;
1033c2c66affSColin Finck     ULONG64     BackingStoreOffset;
1034c2c66affSColin Finck     ULONG64     FuncTableEntry;
1035c2c66affSColin Finck     ULONG64     Params[4];
1036c2c66affSColin Finck     ULONG64     Reserved[5];
1037c2c66affSColin Finck     BOOL        Virtual;
1038c2c66affSColin Finck     ULONG       Reserved2;
1039c2c66affSColin Finck } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
1040c2c66affSColin Finck typedef struct _KDHELP64
1041c2c66affSColin Finck {
1042c2c66affSColin Finck     DWORD64     Thread;
1043c2c66affSColin Finck     DWORD       ThCallbackStack;
1044c2c66affSColin Finck     DWORD       ThCallbackBStore;
1045c2c66affSColin Finck     DWORD       NextCallback;
1046c2c66affSColin Finck     DWORD       FramePointer;
1047c2c66affSColin Finck     DWORD64     KiCallUserMode;
1048c2c66affSColin Finck     DWORD64     KeUserCallbackDispatcher;
1049c2c66affSColin Finck     DWORD64     SystemRangeStart;
1050c2c66affSColin Finck     DWORD64     Reserved[8];
1051c2c66affSColin Finck } KDHELP64, *PKDHELP64;
1052c2c66affSColin Finck typedef struct _STACKFRAME64
1053c2c66affSColin Finck {
1054c2c66affSColin Finck     ADDRESS64   AddrPC;
1055c2c66affSColin Finck     ADDRESS64   AddrReturn;
1056c2c66affSColin Finck     ADDRESS64   AddrFrame;
1057c2c66affSColin Finck     ADDRESS64   AddrStack;
1058c2c66affSColin Finck     ADDRESS64   AddrBStore;
1059c2c66affSColin Finck     PVOID       FuncTableEntry;
1060c2c66affSColin Finck     DWORD64     Params[4];
1061c2c66affSColin Finck     BOOL        Far;
1062c2c66affSColin Finck     BOOL        Virtual;
1063c2c66affSColin Finck     DWORD64     Reserved[3];
1064c2c66affSColin Finck     KDHELP64    KdHelp;
1065c2c66affSColin Finck } STACKFRAME64, *LPSTACKFRAME64;
1066c2c66affSColin Finck typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
1067c2c66affSColin Finck {
1068c2c66affSColin Finck     TI_GET_SYMTAG,
1069c2c66affSColin Finck     TI_GET_SYMNAME,
1070c2c66affSColin Finck     TI_GET_LENGTH,
1071c2c66affSColin Finck     TI_GET_TYPE,
1072c2c66affSColin Finck     TI_GET_TYPEID,
1073c2c66affSColin Finck     TI_GET_BASETYPE,
1074c2c66affSColin Finck     TI_GET_ARRAYINDEXTYPEID,
1075c2c66affSColin Finck     TI_FINDCHILDREN,
1076c2c66affSColin Finck     TI_GET_DATAKIND,
1077c2c66affSColin Finck     TI_GET_ADDRESSOFFSET,
1078c2c66affSColin Finck     TI_GET_OFFSET,
1079c2c66affSColin Finck     TI_GET_VALUE,
1080c2c66affSColin Finck     TI_GET_COUNT,
1081c2c66affSColin Finck     TI_GET_CHILDRENCOUNT,
1082c2c66affSColin Finck     TI_GET_BITPOSITION,
1083c2c66affSColin Finck     TI_GET_VIRTUALBASECLASS,
1084c2c66affSColin Finck     TI_GET_VIRTUALTABLESHAPEID,
1085c2c66affSColin Finck     TI_GET_VIRTUALBASEPOINTEROFFSET,
1086c2c66affSColin Finck     TI_GET_CLASSPARENTID,
1087c2c66affSColin Finck     TI_GET_NESTED,
1088c2c66affSColin Finck     TI_GET_SYMINDEX,
1089c2c66affSColin Finck     TI_GET_LEXICALPARENT,
1090c2c66affSColin Finck     TI_GET_ADDRESS,
1091c2c66affSColin Finck     TI_GET_THISADJUST,
1092c2c66affSColin Finck     TI_GET_UDTKIND,
1093c2c66affSColin Finck     TI_IS_EQUIV_TO,
1094c2c66affSColin Finck     TI_GET_CALLING_CONVENTION,
1095c2c66affSColin Finck } IMAGEHLP_SYMBOL_TYPE_INFO;
1096c2c66affSColin Finck typedef struct _SOURCEFILE
1097c2c66affSColin Finck {
1098c2c66affSColin Finck     DWORD64                     ModBase;
1099c2c66affSColin Finck     PCHAR                       FileName;
1100c2c66affSColin Finck } SOURCEFILE, *PSOURCEFILE;
1101c2c66affSColin Finck typedef struct _SOURCEFILEW
1102c2c66affSColin Finck {
1103c2c66affSColin Finck     DWORD64                     ModBase;
1104c2c66affSColin Finck     PWSTR                       FileName;
1105c2c66affSColin Finck } SOURCEFILEW, *PSOURCEFILEW;
1106c2c66affSColin Finck typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);
1107c2c66affSColin Finck typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID);
1108c2c66affSColin Finck typedef struct _SRCCODEINFOW
1109c2c66affSColin Finck {
1110c2c66affSColin Finck     DWORD       SizeOfStruct;
1111c2c66affSColin Finck     PVOID       Key;
1112c2c66affSColin Finck     DWORD64     ModBase;
1113c2c66affSColin Finck     WCHAR       Obj[MAX_PATH+1];
1114c2c66affSColin Finck     WCHAR       FileName[MAX_PATH+1];
1115c2c66affSColin Finck     DWORD       LineNumber;
1116c2c66affSColin Finck     DWORD64     Address;
1117c2c66affSColin Finck } SRCCODEINFOW, *PSRCCODEINFOW;
1118c2c66affSColin Finck typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID);
1119c2c66affSColin Finck typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);
1120c2c66affSColin Finck #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1121c2c66affSColin Finck #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
1122c2c66affSColin Finck #define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64
1123c2c66affSColin Finck #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
1124c2c66affSColin Finck #define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64
1125c2c66affSColin Finck #else
1126c2c66affSColin Finck typedef struct _IMAGEHLP_SYMBOL
1127c2c66affSColin Finck {
1128c2c66affSColin Finck     DWORD                       SizeOfStruct;
1129c2c66affSColin Finck     DWORD                       Address;
1130c2c66affSColin Finck     DWORD                       Size;
1131c2c66affSColin Finck     DWORD                       Flags;
1132c2c66affSColin Finck     DWORD                       MaxNameLength;
1133c2c66affSColin Finck     CHAR                        Name[1];
1134c2c66affSColin Finck } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
1135c2c66affSColin Finck 
1136c2c66affSColin Finck typedef struct _IMAGEHLP_SYMBOLW
1137c2c66affSColin Finck {
1138c2c66affSColin Finck     DWORD                       SizeOfStruct;
1139c2c66affSColin Finck     DWORD                       Address;
1140c2c66affSColin Finck     DWORD                       Size;
1141c2c66affSColin Finck     DWORD                       Flags;
1142c2c66affSColin Finck     DWORD                       MaxNameLength;
1143c2c66affSColin Finck     WCHAR                       Name[1];
1144c2c66affSColin Finck } IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;
1145c2c66affSColin Finck #endif
1146c2c66affSColin Finck typedef struct _IMAGEHLP_SYMBOL64
1147c2c66affSColin Finck {
1148c2c66affSColin Finck     DWORD                       SizeOfStruct;
1149c2c66affSColin Finck     DWORD64                     Address;
1150c2c66affSColin Finck     DWORD                       Size;
1151c2c66affSColin Finck     DWORD                       Flags;
1152c2c66affSColin Finck     DWORD                       MaxNameLength;
1153c2c66affSColin Finck     CHAR                        Name[1];
1154c2c66affSColin Finck } IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
1155c2c66affSColin Finck typedef struct _IMAGEHLP_SYMBOLW64
1156c2c66affSColin Finck {
1157c2c66affSColin Finck     DWORD                       SizeOfStruct;
1158c2c66affSColin Finck     DWORD64                     Address;
1159c2c66affSColin Finck     DWORD                       Size;
1160c2c66affSColin Finck     DWORD                       Flags;
1161c2c66affSColin Finck     DWORD                       MaxNameLength;
1162c2c66affSColin Finck     WCHAR                       Name[1];
1163c2c66affSColin Finck } IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
1164c2c66affSColin Finck #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1165c2c66affSColin Finck #define IMAGEHLP_LINE IMAGEHLP_LINE64
1166c2c66affSColin Finck #define PIMAGEHLP_LINE PIMAGEHLP_LINE64
1167c2c66affSColin Finck #define IMAGEHLP_LINEW IMAGEHLP_LINEW64
1168c2c66affSColin Finck #define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64
1169c2c66affSColin Finck #else
1170c2c66affSColin Finck typedef struct _IMAGEHLP_LINE
1171c2c66affSColin Finck {
1172c2c66affSColin Finck     DWORD                       SizeOfStruct;
1173c2c66affSColin Finck     PVOID                       Key;
1174c2c66affSColin Finck     DWORD                       LineNumber;
1175c2c66affSColin Finck     PCHAR                       FileName;
1176c2c66affSColin Finck     DWORD                       Address;
1177c2c66affSColin Finck } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
1178c2c66affSColin Finck 
1179c2c66affSColin Finck typedef struct _IMAGEHLP_LINEW
1180c2c66affSColin Finck {
1181c2c66affSColin Finck     DWORD                       SizeOfStruct;
1182c2c66affSColin Finck     PVOID                       Key;
1183c2c66affSColin Finck     DWORD                       LineNumber;
1184c2c66affSColin Finck     PWSTR                       FileName;
1185c2c66affSColin Finck     DWORD                       Address;
1186c2c66affSColin Finck } IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
1187c2c66affSColin Finck #endif
1188c2c66affSColin Finck typedef struct _IMAGEHLP_LINEW64
1189c2c66affSColin Finck {
1190c2c66affSColin Finck     DWORD                       SizeOfStruct;
1191c2c66affSColin Finck     PVOID                       Key;
1192c2c66affSColin Finck     DWORD                       LineNumber;
1193c2c66affSColin Finck     PWSTR                       FileName;
1194c2c66affSColin Finck     DWORD64                     Address;
1195c2c66affSColin Finck } IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
1196c2c66affSColin Finck #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1197c2c66affSColin Finck #define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
1198c2c66affSColin Finck #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
1199c2c66affSColin Finck #else
1200c2c66affSColin Finck typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
1201c2c66affSColin Finck {
1202c2c66affSColin Finck     DWORD                       SizeOfStruct;
1203c2c66affSColin Finck     DWORD                       BaseOfImage;
1204c2c66affSColin Finck     DWORD                       CheckSum;
1205c2c66affSColin Finck     DWORD                       TimeDateStamp;
1206c2c66affSColin Finck     CHAR                        FileName[MAX_PATH];
1207c2c66affSColin Finck     BOOLEAN                     Reparse;
1208c2c66affSColin Finck     HANDLE                      hFile;
1209c2c66affSColin Finck } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
1210c2c66affSColin Finck #endif
1211c2c66affSColin Finck typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64
1212c2c66affSColin Finck {
1213c2c66affSColin Finck     DWORD                       SizeOfStruct;
1214c2c66affSColin Finck     DWORD64                     BaseOfImage;
1215c2c66affSColin Finck     DWORD                       CheckSum;
1216c2c66affSColin Finck     DWORD                       TimeDateStamp;
1217c2c66affSColin Finck     CHAR                        FileName[MAX_PATH];
1218c2c66affSColin Finck     BOOLEAN                     Reparse;
1219c2c66affSColin Finck     HANDLE                      hFile;
1220c2c66affSColin Finck     DWORD                       Flags;
1221c2c66affSColin Finck } IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
1222c2c66affSColin Finck typedef struct API_VERSION
1223c2c66affSColin Finck {
1224c2c66affSColin Finck     USHORT  MajorVersion;
1225c2c66affSColin Finck     USHORT  MinorVersion;
1226c2c66affSColin Finck     USHORT  Revision;
1227c2c66affSColin Finck     USHORT  Reserved;
1228c2c66affSColin Finck } API_VERSION, *LPAPI_VERSION;
1229c2c66affSColin Finck 
1230c2c66affSColin Finck // cvconst.h
1231c2c66affSColin Finck /* symbols & types enumeration */
1232c2c66affSColin Finck enum SymTagEnum
1233c2c66affSColin Finck {
1234c2c66affSColin Finck    SymTagNull,
1235c2c66affSColin Finck    SymTagExe,
1236c2c66affSColin Finck    SymTagCompiland,
1237c2c66affSColin Finck    SymTagCompilandDetails,
1238c2c66affSColin Finck    SymTagCompilandEnv,
1239c2c66affSColin Finck    SymTagFunction,
1240c2c66affSColin Finck    SymTagBlock,
1241c2c66affSColin Finck    SymTagData,
1242c2c66affSColin Finck    SymTagAnnotation,
1243c2c66affSColin Finck    SymTagLabel,
1244c2c66affSColin Finck    SymTagPublicSymbol,
1245c2c66affSColin Finck    SymTagUDT,
1246c2c66affSColin Finck    SymTagEnum,
1247c2c66affSColin Finck    SymTagFunctionType,
1248c2c66affSColin Finck    SymTagPointerType,
1249c2c66affSColin Finck    SymTagArrayType,
1250c2c66affSColin Finck    SymTagBaseType,
1251c2c66affSColin Finck    SymTagTypedef,
1252c2c66affSColin Finck    SymTagBaseClass,
1253c2c66affSColin Finck    SymTagFriend,
1254c2c66affSColin Finck    SymTagFunctionArgType,
1255c2c66affSColin Finck    SymTagFuncDebugStart,
1256c2c66affSColin Finck    SymTagFuncDebugEnd,
1257c2c66affSColin Finck    SymTagUsingNamespace,
1258c2c66affSColin Finck    SymTagVTableShape,
1259c2c66affSColin Finck    SymTagVTable,
1260c2c66affSColin Finck    SymTagCustom,
1261c2c66affSColin Finck    SymTagThunk,
1262c2c66affSColin Finck    SymTagCustomType,
1263c2c66affSColin Finck    SymTagManagedType,
1264c2c66affSColin Finck    SymTagDimension,
1265c2c66affSColin Finck    SymTagMax
1266c2c66affSColin Finck };
1267c2c66affSColin Finck 
1268c2c66affSColin Finck enum BasicType
1269c2c66affSColin Finck {
1270c2c66affSColin Finck     btNoType = 0,
1271c2c66affSColin Finck     btVoid = 1,
1272c2c66affSColin Finck     btChar = 2,
1273c2c66affSColin Finck     btWChar = 3,
1274c2c66affSColin Finck     btInt = 6,
1275c2c66affSColin Finck     btUInt = 7,
1276c2c66affSColin Finck     btFloat = 8,
1277c2c66affSColin Finck     btBCD = 9,
1278c2c66affSColin Finck     btBool = 10,
1279c2c66affSColin Finck     btLong = 13,
1280c2c66affSColin Finck     btULong = 14,
1281c2c66affSColin Finck     btCurrency = 25,
1282c2c66affSColin Finck     btDate = 26,
1283c2c66affSColin Finck     btVariant = 27,
1284c2c66affSColin Finck     btComplex = 28,
1285c2c66affSColin Finck     btBit = 29,
1286c2c66affSColin Finck     btBSTR = 30,
1287c2c66affSColin Finck     btHresult = 31,
1288c2c66affSColin Finck };
1289c2c66affSColin Finck 
1290c2c66affSColin Finck /* kind of UDT */
1291c2c66affSColin Finck enum UdtKind
1292c2c66affSColin Finck {
1293c2c66affSColin Finck     UdtStruct,
1294c2c66affSColin Finck     UdtClass,
1295c2c66affSColin Finck     UdtUnion
1296c2c66affSColin Finck };
1297c2c66affSColin Finck 
1298c2c66affSColin Finck /* kind of SymTagData */
1299c2c66affSColin Finck enum DataKind
1300c2c66affSColin Finck {
1301c2c66affSColin Finck     DataIsUnknown,
1302c2c66affSColin Finck     DataIsLocal,
1303c2c66affSColin Finck     DataIsStaticLocal,
1304c2c66affSColin Finck     DataIsParam,
1305c2c66affSColin Finck     DataIsObjectPtr,
1306c2c66affSColin Finck     DataIsFileStatic,
1307c2c66affSColin Finck     DataIsGlobal,
1308c2c66affSColin Finck     DataIsMember,
1309c2c66affSColin Finck     DataIsStaticMember,
1310c2c66affSColin Finck     DataIsConstant
1311c2c66affSColin Finck };
1312c2c66affSColin Finck 
1313c2c66affSColin Finck /* values for registers (on different CPUs) */
1314c2c66affSColin Finck enum CV_HREG_e
1315c2c66affSColin Finck {
1316c2c66affSColin Finck     /* those values are common to all supported CPUs (and CPU independent) */
1317c2c66affSColin Finck     CV_ALLREG_ERR       = 30000,
1318c2c66affSColin Finck     CV_ALLREG_TEB       = 30001,
1319c2c66affSColin Finck     CV_ALLREG_TIMER     = 30002,
1320c2c66affSColin Finck     CV_ALLREG_EFAD1     = 30003,
1321c2c66affSColin Finck     CV_ALLREG_EFAD2     = 30004,
1322c2c66affSColin Finck     CV_ALLREG_EFAD3     = 30005,
1323c2c66affSColin Finck     CV_ALLREG_VFRAME    = 30006,
1324c2c66affSColin Finck     CV_ALLREG_HANDLE    = 30007,
1325c2c66affSColin Finck     CV_ALLREG_PARAMS    = 30008,
1326c2c66affSColin Finck     CV_ALLREG_LOCALS    = 30009,
1327c2c66affSColin Finck     CV_ALLREG_TID       = 30010,
1328c2c66affSColin Finck     CV_ALLREG_ENV       = 30011,
1329c2c66affSColin Finck     CV_ALLREG_CMDLN     = 30012,
1330c2c66affSColin Finck 
1331c2c66affSColin Finck     /* Intel x86 CPU */
1332c2c66affSColin Finck     CV_REG_NONE         = 0,
1333c2c66affSColin Finck     CV_REG_AL           = 1,
1334c2c66affSColin Finck     CV_REG_CL           = 2,
1335c2c66affSColin Finck     CV_REG_DL           = 3,
1336c2c66affSColin Finck     CV_REG_BL           = 4,
1337c2c66affSColin Finck     CV_REG_AH           = 5,
1338c2c66affSColin Finck     CV_REG_CH           = 6,
1339c2c66affSColin Finck     CV_REG_DH           = 7,
1340c2c66affSColin Finck     CV_REG_BH           = 8,
1341c2c66affSColin Finck     CV_REG_AX           = 9,
1342c2c66affSColin Finck     CV_REG_CX           = 10,
1343c2c66affSColin Finck     CV_REG_DX           = 11,
1344c2c66affSColin Finck     CV_REG_BX           = 12,
1345c2c66affSColin Finck     CV_REG_SP           = 13,
1346c2c66affSColin Finck     CV_REG_BP           = 14,
1347c2c66affSColin Finck     CV_REG_SI           = 15,
1348c2c66affSColin Finck     CV_REG_DI           = 16,
1349c2c66affSColin Finck     CV_REG_EAX          = 17,
1350c2c66affSColin Finck     CV_REG_ECX          = 18,
1351c2c66affSColin Finck     CV_REG_EDX          = 19,
1352c2c66affSColin Finck     CV_REG_EBX          = 20,
1353c2c66affSColin Finck     CV_REG_ESP          = 21,
1354c2c66affSColin Finck     CV_REG_EBP          = 22,
1355c2c66affSColin Finck     CV_REG_ESI          = 23,
1356c2c66affSColin Finck     CV_REG_EDI          = 24,
1357c2c66affSColin Finck     CV_REG_ES           = 25,
1358c2c66affSColin Finck     CV_REG_CS           = 26,
1359c2c66affSColin Finck     CV_REG_SS           = 27,
1360c2c66affSColin Finck     CV_REG_DS           = 28,
1361c2c66affSColin Finck     CV_REG_FS           = 29,
1362c2c66affSColin Finck     CV_REG_GS           = 30,
1363c2c66affSColin Finck     CV_REG_IP           = 31,
1364c2c66affSColin Finck     CV_REG_FLAGS        = 32,
1365c2c66affSColin Finck     CV_REG_EIP          = 33,
1366c2c66affSColin Finck     CV_REG_EFLAGS       = 34,
1367c2c66affSColin Finck 
1368c2c66affSColin Finck     /* <pcode> */
1369c2c66affSColin Finck     CV_REG_TEMP         = 40,
1370c2c66affSColin Finck     CV_REG_TEMPH        = 41,
1371c2c66affSColin Finck     CV_REG_QUOTE        = 42,
1372c2c66affSColin Finck     CV_REG_PCDR3        = 43,   /* this includes PCDR4 to PCDR7 */
1373c2c66affSColin Finck     CV_REG_CR0          = 80,   /* this includes CR1 to CR4 */
1374c2c66affSColin Finck     CV_REG_DR0          = 90,   /* this includes DR1 to DR7 */
1375c2c66affSColin Finck     /* </pcode> */
1376c2c66affSColin Finck 
1377c2c66affSColin Finck     CV_REG_GDTR         = 110,
1378c2c66affSColin Finck     CV_REG_GDTL         = 111,
1379c2c66affSColin Finck     CV_REG_IDTR         = 112,
1380c2c66affSColin Finck     CV_REG_IDTL         = 113,
1381c2c66affSColin Finck     CV_REG_LDTR         = 114,
1382c2c66affSColin Finck     CV_REG_TR           = 115,
1383c2c66affSColin Finck 
1384c2c66affSColin Finck     CV_REG_PSEUDO1      = 116, /* this includes Pseudo02 to Pseudo09 */
1385c2c66affSColin Finck     CV_REG_ST0          = 128, /* this includes ST1 to ST7 */
1386c2c66affSColin Finck     CV_REG_CTRL         = 136,
1387c2c66affSColin Finck     CV_REG_STAT         = 137,
1388c2c66affSColin Finck     CV_REG_TAG          = 138,
1389c2c66affSColin Finck     CV_REG_FPIP         = 139,
1390c2c66affSColin Finck     CV_REG_FPCS         = 140,
1391c2c66affSColin Finck     CV_REG_FPDO         = 141,
1392c2c66affSColin Finck     CV_REG_FPDS         = 142,
1393c2c66affSColin Finck     CV_REG_ISEM         = 143,
1394c2c66affSColin Finck     CV_REG_FPEIP        = 144,
1395c2c66affSColin Finck     CV_REG_FPEDO        = 145,
1396c2c66affSColin Finck     CV_REG_MM0          = 146, /* this includes MM1 to MM7 */
1397c2c66affSColin Finck     CV_REG_XMM0         = 154, /* this includes XMM1 to XMM7 */
1398c2c66affSColin Finck     CV_REG_XMM00        = 162,
1399c2c66affSColin Finck     CV_REG_XMM0L        = 194, /* this includes XMM1L to XMM7L */
1400c2c66affSColin Finck     CV_REG_XMM0H        = 202, /* this includes XMM1H to XMM7H */
1401c2c66affSColin Finck     CV_REG_MXCSR        = 211,
1402c2c66affSColin Finck     CV_REG_EDXEAX       = 212,
1403c2c66affSColin Finck     CV_REG_EMM0L        = 220,
1404c2c66affSColin Finck     CV_REG_EMM0H        = 228,
1405c2c66affSColin Finck     CV_REG_MM00         = 236,
1406c2c66affSColin Finck     CV_REG_MM01         = 237,
1407c2c66affSColin Finck     CV_REG_MM10         = 238,
1408c2c66affSColin Finck     CV_REG_MM11         = 239,
1409c2c66affSColin Finck     CV_REG_MM20         = 240,
1410c2c66affSColin Finck     CV_REG_MM21         = 241,
1411c2c66affSColin Finck     CV_REG_MM30         = 242,
1412c2c66affSColin Finck     CV_REG_MM31         = 243,
1413c2c66affSColin Finck     CV_REG_MM40         = 244,
1414c2c66affSColin Finck     CV_REG_MM41         = 245,
1415c2c66affSColin Finck     CV_REG_MM50         = 246,
1416c2c66affSColin Finck     CV_REG_MM51         = 247,
1417c2c66affSColin Finck     CV_REG_MM60         = 248,
1418c2c66affSColin Finck     CV_REG_MM61         = 249,
1419c2c66affSColin Finck     CV_REG_MM70         = 250,
1420c2c66affSColin Finck     CV_REG_MM71         = 251,
1421c2c66affSColin Finck 
1422c2c66affSColin Finck     CV_REG_YMM0         = 252, /* this includes YMM1 to YMM7 */
1423c2c66affSColin Finck     CV_REG_YMM0H        = 260, /* this includes YMM1H to YMM7H */
1424c2c66affSColin Finck     CV_REG_YMM0I0       = 268, /* this includes YMM0I1 to YMM0I3 */
1425c2c66affSColin Finck     CV_REG_YMM1I0       = 272, /* this includes YMM1I1 to YMM1I3 */
1426c2c66affSColin Finck     CV_REG_YMM2I0       = 276, /* this includes YMM2I1 to YMM2I3 */
1427c2c66affSColin Finck     CV_REG_YMM3I0       = 280, /* this includes YMM3I1 to YMM3I3 */
1428c2c66affSColin Finck     CV_REG_YMM4I0       = 284, /* this includes YMM4I1 to YMM4I3 */
1429c2c66affSColin Finck     CV_REG_YMM5I0       = 288, /* this includes YMM5I1 to YMM5I3 */
1430c2c66affSColin Finck     CV_REG_YMM6I0       = 292, /* this includes YMM6I1 to YMM6I3 */
1431c2c66affSColin Finck     CV_REG_YMM7I0       = 296, /* this includes YMM7I1 to YMM7I3 */
1432c2c66affSColin Finck     CV_REG_YMM0F0       = 300, /* this includes YMM0F1 to YMM0F7 */
1433c2c66affSColin Finck     CV_REG_YMM1F0       = 308, /* this includes YMM1F1 to YMM1F7 */
1434c2c66affSColin Finck     CV_REG_YMM2F0       = 316, /* this includes YMM2F1 to YMM2F7 */
1435c2c66affSColin Finck     CV_REG_YMM3F0       = 324, /* this includes YMM3F1 to YMM3F7 */
1436c2c66affSColin Finck     CV_REG_YMM4F0       = 332, /* this includes YMM4F1 to YMM4F7 */
1437c2c66affSColin Finck     CV_REG_YMM5F0       = 340, /* this includes YMM5F1 to YMM5F7 */
1438c2c66affSColin Finck     CV_REG_YMM6F0       = 348, /* this includes YMM6F1 to YMM6F7 */
1439c2c66affSColin Finck     CV_REG_YMM7F0       = 356, /* this includes YMM7F1 to YMM7F7 */
1440c2c66affSColin Finck     CV_REG_YMM0D0       = 364, /* this includes YMM0D1 to YMM0D3 */
1441c2c66affSColin Finck     CV_REG_YMM1D0       = 368, /* this includes YMM1D1 to YMM1D3 */
1442c2c66affSColin Finck     CV_REG_YMM2D0       = 372, /* this includes YMM2D1 to YMM2D3 */
1443c2c66affSColin Finck     CV_REG_YMM3D0       = 376, /* this includes YMM3D1 to YMM3D3 */
1444c2c66affSColin Finck     CV_REG_YMM4D0       = 380, /* this includes YMM4D1 to YMM4D3 */
1445c2c66affSColin Finck     CV_REG_YMM5D0       = 384, /* this includes YMM5D1 to YMM5D3 */
1446c2c66affSColin Finck     CV_REG_YMM6D0       = 388, /* this includes YMM6D1 to YMM6D3 */
1447c2c66affSColin Finck     CV_REG_YMM7D0       = 392, /* this includes YMM7D1 to YMM7D3 */
1448c2c66affSColin Finck 
1449c2c66affSColin Finck     /* Motorola 68K CPU */
1450c2c66affSColin Finck     CV_R68_D0           = 0, /* this includes D1 to D7 too */
1451c2c66affSColin Finck     CV_R68_A0           = 8, /* this includes A1 to A7 too */
1452c2c66affSColin Finck     CV_R68_CCR          = 16,
1453c2c66affSColin Finck     CV_R68_SR           = 17,
1454c2c66affSColin Finck     CV_R68_USP          = 18,
1455c2c66affSColin Finck     CV_R68_MSP          = 19,
1456c2c66affSColin Finck     CV_R68_SFC          = 20,
1457c2c66affSColin Finck     CV_R68_DFC          = 21,
1458c2c66affSColin Finck     CV_R68_CACR         = 22,
1459c2c66affSColin Finck     CV_R68_VBR          = 23,
1460c2c66affSColin Finck     CV_R68_CAAR         = 24,
1461c2c66affSColin Finck     CV_R68_ISP          = 25,
1462c2c66affSColin Finck     CV_R68_PC           = 26,
1463c2c66affSColin Finck     CV_R68_FPCR         = 28,
1464c2c66affSColin Finck     CV_R68_FPSR         = 29,
1465c2c66affSColin Finck     CV_R68_FPIAR        = 30,
1466c2c66affSColin Finck     CV_R68_FP0          = 32, /* this includes FP1 to FP7 */
1467c2c66affSColin Finck     CV_R68_MMUSR030     = 41,
1468c2c66affSColin Finck     CV_R68_MMUSR        = 42,
1469c2c66affSColin Finck     CV_R68_URP          = 43,
1470c2c66affSColin Finck     CV_R68_DTT0         = 44,
1471c2c66affSColin Finck     CV_R68_DTT1         = 45,
1472c2c66affSColin Finck     CV_R68_ITT0         = 46,
1473c2c66affSColin Finck     CV_R68_ITT1         = 47,
1474c2c66affSColin Finck     CV_R68_PSR          = 51,
1475c2c66affSColin Finck     CV_R68_PCSR         = 52,
1476c2c66affSColin Finck     CV_R68_VAL          = 53,
1477c2c66affSColin Finck     CV_R68_CRP          = 54,
1478c2c66affSColin Finck     CV_R68_SRP          = 55,
1479c2c66affSColin Finck     CV_R68_DRP          = 56,
1480c2c66affSColin Finck     CV_R68_TC           = 57,
1481c2c66affSColin Finck     CV_R68_AC           = 58,
1482c2c66affSColin Finck     CV_R68_SCC          = 59,
1483c2c66affSColin Finck     CV_R68_CAL          = 60,
1484c2c66affSColin Finck     CV_R68_TT0          = 61,
1485c2c66affSColin Finck     CV_R68_TT1          = 62,
1486c2c66affSColin Finck     CV_R68_BAD0         = 64, /* this includes BAD1 to BAD7 */
1487c2c66affSColin Finck     CV_R68_BAC0         = 72, /* this includes BAC1 to BAC7 */
1488c2c66affSColin Finck 
1489c2c66affSColin Finck     /* MIPS 4000 CPU */
1490c2c66affSColin Finck     CV_M4_NOREG         = CV_REG_NONE,
1491c2c66affSColin Finck     CV_M4_IntZERO       = 10,
1492c2c66affSColin Finck     CV_M4_IntAT         = 11,
1493c2c66affSColin Finck     CV_M4_IntV0         = 12,
1494c2c66affSColin Finck     CV_M4_IntV1         = 13,
1495c2c66affSColin Finck     CV_M4_IntA0         = 14, /* this includes IntA1 to IntA3 */
1496c2c66affSColin Finck     CV_M4_IntT0         = 18, /* this includes IntT1 to IntT7 */
1497c2c66affSColin Finck     CV_M4_IntS0         = 26, /* this includes IntS1 to IntS7 */
1498c2c66affSColin Finck     CV_M4_IntT8         = 34,
1499c2c66affSColin Finck     CV_M4_IntT9         = 35,
1500c2c66affSColin Finck     CV_M4_IntKT0        = 36,
1501c2c66affSColin Finck     CV_M4_IntKT1        = 37,
1502c2c66affSColin Finck     CV_M4_IntGP         = 38,
1503c2c66affSColin Finck     CV_M4_IntSP         = 39,
1504c2c66affSColin Finck     CV_M4_IntS8         = 40,
1505c2c66affSColin Finck     CV_M4_IntRA         = 41,
1506c2c66affSColin Finck     CV_M4_IntLO         = 42,
1507c2c66affSColin Finck     CV_M4_IntHI         = 43,
1508c2c66affSColin Finck     CV_M4_Fir           = 50,
1509c2c66affSColin Finck     CV_M4_Psr           = 51,
1510c2c66affSColin Finck     CV_M4_FltF0         = 60, /* this includes FltF1 to Flt31 */
1511c2c66affSColin Finck     CV_M4_FltFsr        = 92,
1512c2c66affSColin Finck 
1513c2c66affSColin Finck     /* Alpha AXP CPU */
1514c2c66affSColin Finck     CV_ALPHA_NOREG      = CV_REG_NONE,
1515c2c66affSColin Finck     CV_ALPHA_FltF0      = 10, /* this includes FltF1 to FltF31 */
1516c2c66affSColin Finck     CV_ALPHA_IntV0      = 42,
1517c2c66affSColin Finck     CV_ALPHA_IntT0      = 43, /* this includes T1 to T7 */
1518c2c66affSColin Finck     CV_ALPHA_IntS0      = 51, /* this includes S1 to S5 */
1519c2c66affSColin Finck     CV_ALPHA_IntFP      = 57,
1520c2c66affSColin Finck     CV_ALPHA_IntA0      = 58, /* this includes A1 to A5 */
1521c2c66affSColin Finck     CV_ALPHA_IntT8      = 64,
1522c2c66affSColin Finck     CV_ALPHA_IntT9      = 65,
1523c2c66affSColin Finck     CV_ALPHA_IntT10     = 66,
1524c2c66affSColin Finck     CV_ALPHA_IntT11     = 67,
1525c2c66affSColin Finck     CV_ALPHA_IntRA      = 68,
1526c2c66affSColin Finck     CV_ALPHA_IntT12     = 69,
1527c2c66affSColin Finck     CV_ALPHA_IntAT      = 70,
1528c2c66affSColin Finck     CV_ALPHA_IntGP      = 71,
1529c2c66affSColin Finck     CV_ALPHA_IntSP      = 72,
1530c2c66affSColin Finck     CV_ALPHA_IntZERO    = 73,
1531c2c66affSColin Finck     CV_ALPHA_Fpcr       = 74,
1532c2c66affSColin Finck     CV_ALPHA_Fir        = 75,
1533c2c66affSColin Finck     CV_ALPHA_Psr        = 76,
1534c2c66affSColin Finck     CV_ALPHA_FltFsr     = 77,
1535c2c66affSColin Finck     CV_ALPHA_SoftFpcr   = 78,
1536c2c66affSColin Finck 
1537c2c66affSColin Finck     /* Motorola & IBM PowerPC CPU */
1538c2c66affSColin Finck     CV_PPC_GPR0         = 1, /* this includes GPR1 to GPR31 */
1539c2c66affSColin Finck     CV_PPC_CR           = 33,
1540c2c66affSColin Finck     CV_PPC_CR0          = 34, /* this includes CR1 to CR7 */
1541c2c66affSColin Finck     CV_PPC_FPR0         = 42, /* this includes FPR1 to FPR31 */
1542c2c66affSColin Finck 
1543c2c66affSColin Finck     CV_PPC_FPSCR        = 74,
1544c2c66affSColin Finck     CV_PPC_MSR          = 75,
1545c2c66affSColin Finck     CV_PPC_SR0          = 76, /* this includes SR1 to SR15 */
1546c2c66affSColin Finck     CV_PPC_PC           = 99,
1547c2c66affSColin Finck     CV_PPC_MQ           = 100,
1548c2c66affSColin Finck     CV_PPC_XER          = 101,
1549c2c66affSColin Finck     CV_PPC_RTCU         = 104,
1550c2c66affSColin Finck     CV_PPC_RTCL         = 105,
1551c2c66affSColin Finck     CV_PPC_LR           = 108,
1552c2c66affSColin Finck     CV_PPC_CTR          = 109,
1553c2c66affSColin Finck     CV_PPC_COMPARE      = 110,
1554c2c66affSColin Finck     CV_PPC_COUNT        = 111,
1555c2c66affSColin Finck     CV_PPC_DSISR        = 118,
1556c2c66affSColin Finck     CV_PPC_DAR          = 119,
1557c2c66affSColin Finck     CV_PPC_DEC          = 122,
1558c2c66affSColin Finck     CV_PPC_SDR1         = 125,
1559c2c66affSColin Finck     CV_PPC_SRR0         = 126,
1560c2c66affSColin Finck     CV_PPC_SRR1         = 127,
1561c2c66affSColin Finck     CV_PPC_SPRG0        = 372, /* this includes SPRG1 to SPRG3 */
1562c2c66affSColin Finck     CV_PPC_ASR          = 280,
1563c2c66affSColin Finck     CV_PPC_EAR          = 382,
1564c2c66affSColin Finck     CV_PPC_PVR          = 287,
1565c2c66affSColin Finck     CV_PPC_BAT0U        = 628,
1566c2c66affSColin Finck     CV_PPC_BAT0L        = 629,
1567c2c66affSColin Finck     CV_PPC_BAT1U        = 630,
1568c2c66affSColin Finck     CV_PPC_BAT1L        = 631,
1569c2c66affSColin Finck     CV_PPC_BAT2U        = 632,
1570c2c66affSColin Finck     CV_PPC_BAT2L        = 633,
1571c2c66affSColin Finck     CV_PPC_BAT3U        = 634,
1572c2c66affSColin Finck     CV_PPC_BAT3L        = 635,
1573c2c66affSColin Finck     CV_PPC_DBAT0U       = 636,
1574c2c66affSColin Finck     CV_PPC_DBAT0L       = 637,
1575c2c66affSColin Finck     CV_PPC_DBAT1U       = 638,
1576c2c66affSColin Finck     CV_PPC_DBAT1L       = 639,
1577c2c66affSColin Finck     CV_PPC_DBAT2U       = 640,
1578c2c66affSColin Finck     CV_PPC_DBAT2L       = 641,
1579c2c66affSColin Finck     CV_PPC_DBAT3U       = 642,
1580c2c66affSColin Finck     CV_PPC_DBAT3L       = 643,
1581c2c66affSColin Finck     CV_PPC_PMR0         = 1044, /* this includes PMR1 to PMR15 */
1582c2c66affSColin Finck     CV_PPC_DMISS        = 1076,
1583c2c66affSColin Finck     CV_PPC_DCMP         = 1077,
1584c2c66affSColin Finck     CV_PPC_HASH1        = 1078,
1585c2c66affSColin Finck     CV_PPC_HASH2        = 1079,
1586c2c66affSColin Finck     CV_PPC_IMISS        = 1080,
1587c2c66affSColin Finck     CV_PPC_ICMP         = 1081,
1588c2c66affSColin Finck     CV_PPC_RPA          = 1082,
1589c2c66affSColin Finck     CV_PPC_HID0         = 1108, /* this includes HID1 to HID15 */
1590c2c66affSColin Finck 
1591c2c66affSColin Finck     /* Java */
1592c2c66affSColin Finck     CV_JAVA_PC          = 1,
1593c2c66affSColin Finck 
1594c2c66affSColin Finck     /* Hitachi SH3 CPU */
1595c2c66affSColin Finck     CV_SH3_NOREG        = CV_REG_NONE,
1596c2c66affSColin Finck     CV_SH3_IntR0        = 10, /* this include R1 to R13 */
1597c2c66affSColin Finck     CV_SH3_IntFp        = 24,
1598c2c66affSColin Finck     CV_SH3_IntSp        = 25,
1599c2c66affSColin Finck     CV_SH3_Gbr          = 38,
1600c2c66affSColin Finck     CV_SH3_Pr           = 39,
1601c2c66affSColin Finck     CV_SH3_Mach         = 40,
1602c2c66affSColin Finck     CV_SH3_Macl         = 41,
1603c2c66affSColin Finck     CV_SH3_Pc           = 50,
1604c2c66affSColin Finck     CV_SH3_Sr           = 51,
1605c2c66affSColin Finck     CV_SH3_BarA         = 60,
1606c2c66affSColin Finck     CV_SH3_BasrA        = 61,
1607c2c66affSColin Finck     CV_SH3_BamrA        = 62,
1608c2c66affSColin Finck     CV_SH3_BbrA         = 63,
1609c2c66affSColin Finck     CV_SH3_BarB         = 64,
1610c2c66affSColin Finck     CV_SH3_BasrB        = 65,
1611c2c66affSColin Finck     CV_SH3_BamrB        = 66,
1612c2c66affSColin Finck     CV_SH3_BbrB         = 67,
1613c2c66affSColin Finck     CV_SH3_BdrB         = 68,
1614c2c66affSColin Finck     CV_SH3_BdmrB        = 69,
1615c2c66affSColin Finck     CV_SH3_Brcr         = 70,
1616c2c66affSColin Finck     CV_SH_Fpscr         = 75,
1617c2c66affSColin Finck     CV_SH_Fpul          = 76,
1618c2c66affSColin Finck     CV_SH_FpR0          = 80, /* this includes FpR1 to FpR15 */
1619c2c66affSColin Finck     CV_SH_XFpR0         = 96, /* this includes XFpR1 to XXFpR15 */
1620c2c66affSColin Finck 
1621c2c66affSColin Finck     /* ARM CPU */
1622c2c66affSColin Finck     CV_ARM_NOREG        = CV_REG_NONE,
1623c2c66affSColin Finck     CV_ARM_R0           = 10, /* this includes R1 to R12 */
1624c2c66affSColin Finck     CV_ARM_SP           = 23,
1625c2c66affSColin Finck     CV_ARM_LR           = 24,
1626c2c66affSColin Finck     CV_ARM_PC           = 25,
1627c2c66affSColin Finck     CV_ARM_CPSR         = 26,
1628c2c66affSColin Finck     CV_ARM_ACC0         = 27,
1629c2c66affSColin Finck     CV_ARM_FPSCR        = 40,
1630c2c66affSColin Finck     CV_ARM_FPEXC        = 41,
1631c2c66affSColin Finck     CV_ARM_FS0          = 50, /* this includes FS1 to FS31 */
1632c2c66affSColin Finck     CV_ARM_FPEXTRA0     = 90, /* this includes FPEXTRA1 to FPEXTRA7 */
1633c2c66affSColin Finck     CV_ARM_WR0          = 128, /* this includes WR1 to WR15 */
1634c2c66affSColin Finck     CV_ARM_WCID         = 144,
1635c2c66affSColin Finck     CV_ARM_WCON         = 145,
1636c2c66affSColin Finck     CV_ARM_WCSSF        = 146,
1637c2c66affSColin Finck     CV_ARM_WCASF        = 147,
1638c2c66affSColin Finck     CV_ARM_WC4          = 148,
1639c2c66affSColin Finck     CV_ARM_WC5          = 149,
1640c2c66affSColin Finck     CV_ARM_WC6          = 150,
1641c2c66affSColin Finck     CV_ARM_WC7          = 151,
1642c2c66affSColin Finck     CV_ARM_WCGR0        = 152, /* this includes WCGR1 to WCGR3 */
1643c2c66affSColin Finck     CV_ARM_WC12         = 156,
1644c2c66affSColin Finck     CV_ARM_WC13         = 157,
1645c2c66affSColin Finck     CV_ARM_WC14         = 158,
1646c2c66affSColin Finck     CV_ARM_WC15         = 159,
1647c2c66affSColin Finck     CV_ARM_FS32         = 200, /* this includes FS33 to FS63 */
1648c2c66affSColin Finck     CV_ARM_ND0          = 300, /* this includes ND1 to ND31 */
1649c2c66affSColin Finck     CV_ARM_NQ0          = 400, /* this includes NQ1 to NQ15 */
1650c2c66affSColin Finck 
1651c2c66affSColin Finck     /* Intel IA64 CPU */
1652c2c66affSColin Finck     CV_IA64_NOREG       = CV_REG_NONE,
1653c2c66affSColin Finck     CV_IA64_Br0         = 512, /* this includes Br1 to Br7 */
1654c2c66affSColin Finck     CV_IA64_P0          = 704, /* this includes P1 to P63 */
1655c2c66affSColin Finck     CV_IA64_Preds       = 768,
1656c2c66affSColin Finck     CV_IA64_IntH0       = 832, /* this includes H1 to H15 */
1657c2c66affSColin Finck     CV_IA64_Ip          = 1016,
1658c2c66affSColin Finck     CV_IA64_Umask       = 1017,
1659c2c66affSColin Finck     CV_IA64_Cfm         = 1018,
1660c2c66affSColin Finck     CV_IA64_Psr         = 1019,
1661c2c66affSColin Finck     CV_IA64_Nats        = 1020,
1662c2c66affSColin Finck     CV_IA64_Nats2       = 1021,
1663c2c66affSColin Finck     CV_IA64_Nats3       = 1022,
1664c2c66affSColin Finck     CV_IA64_IntR0       = 1024, /* this includes R1 to R127 */
1665c2c66affSColin Finck     CV_IA64_FltF0       = 2048, /* this includes FltF1 to FltF127 */
1666c2c66affSColin Finck     /* some IA64 registers missing */
1667c2c66affSColin Finck 
1668c2c66affSColin Finck     /* TriCore CPU */
1669c2c66affSColin Finck     CV_TRI_NOREG        = CV_REG_NONE,
1670c2c66affSColin Finck     CV_TRI_D0           = 10, /* includes D1 to D15 */
1671c2c66affSColin Finck     CV_TRI_A0           = 26, /* includes A1 to A15 */
1672c2c66affSColin Finck     CV_TRI_E0           = 42,
1673c2c66affSColin Finck     CV_TRI_E2           = 43,
1674c2c66affSColin Finck     CV_TRI_E4           = 44,
1675c2c66affSColin Finck     CV_TRI_E6           = 45,
1676c2c66affSColin Finck     CV_TRI_E8           = 46,
1677c2c66affSColin Finck     CV_TRI_E10          = 47,
1678c2c66affSColin Finck     CV_TRI_E12          = 48,
1679c2c66affSColin Finck     CV_TRI_E14          = 49,
1680c2c66affSColin Finck     CV_TRI_EA0          = 50,
1681c2c66affSColin Finck     CV_TRI_EA2          = 51,
1682c2c66affSColin Finck     CV_TRI_EA4          = 52,
1683c2c66affSColin Finck     CV_TRI_EA6          = 53,
1684c2c66affSColin Finck     CV_TRI_EA8          = 54,
1685c2c66affSColin Finck     CV_TRI_EA10         = 55,
1686c2c66affSColin Finck     CV_TRI_EA12         = 56,
1687c2c66affSColin Finck     CV_TRI_EA14         = 57,
1688c2c66affSColin Finck     CV_TRI_PSW          = 58,
1689c2c66affSColin Finck     CV_TRI_PCXI         = 59,
1690c2c66affSColin Finck     CV_TRI_PC           = 60,
1691c2c66affSColin Finck     CV_TRI_FCX          = 61,
1692c2c66affSColin Finck     CV_TRI_LCX          = 62,
1693c2c66affSColin Finck     CV_TRI_ISP          = 63,
1694c2c66affSColin Finck     CV_TRI_ICR          = 64,
1695c2c66affSColin Finck     CV_TRI_BIV          = 65,
1696c2c66affSColin Finck     CV_TRI_BTV          = 66,
1697c2c66affSColin Finck     CV_TRI_SYSCON       = 67,
1698c2c66affSColin Finck     CV_TRI_DPRx_0       = 68, /* includes DPRx_1 to DPRx_3 */
1699c2c66affSColin Finck     CV_TRI_CPRx_0       = 68, /* includes CPRx_1 to CPRx_3 */
1700c2c66affSColin Finck     CV_TRI_DPMx_0       = 68, /* includes DPMx_1 to DPMx_3 */
1701c2c66affSColin Finck     CV_TRI_CPMx_0       = 68, /* includes CPMx_1 to CPMx_3 */
1702c2c66affSColin Finck     CV_TRI_DBGSSR       = 72,
1703c2c66affSColin Finck     CV_TRI_EXEVT        = 73,
1704c2c66affSColin Finck     CV_TRI_SWEVT        = 74,
1705c2c66affSColin Finck     CV_TRI_CREVT        = 75,
1706c2c66affSColin Finck     CV_TRI_TRnEVT       = 76,
1707c2c66affSColin Finck     CV_TRI_MMUCON       = 77,
1708c2c66affSColin Finck     CV_TRI_ASI          = 78,
1709c2c66affSColin Finck     CV_TRI_TVA          = 79,
1710c2c66affSColin Finck     CV_TRI_TPA          = 80,
1711c2c66affSColin Finck     CV_TRI_TPX          = 81,
1712c2c66affSColin Finck     CV_TRI_TFA          = 82,
1713c2c66affSColin Finck 
1714c2c66affSColin Finck     /* AM33 (and the likes) CPU */
1715c2c66affSColin Finck     CV_AM33_NOREG       = CV_REG_NONE,
1716c2c66affSColin Finck     CV_AM33_E0          = 10, /* this includes E1 to E7 */
1717c2c66affSColin Finck     CV_AM33_A0          = 20, /* this includes A1 to A3 */
1718c2c66affSColin Finck     CV_AM33_D0          = 30, /* this includes D1 to D3 */
1719c2c66affSColin Finck     CV_AM33_FS0         = 40, /* this includes FS1 to FS31 */
1720c2c66affSColin Finck     CV_AM33_SP          = 80,
1721c2c66affSColin Finck     CV_AM33_PC          = 81,
1722c2c66affSColin Finck     CV_AM33_MDR         = 82,
1723c2c66affSColin Finck     CV_AM33_MDRQ        = 83,
1724c2c66affSColin Finck     CV_AM33_MCRH        = 84,
1725c2c66affSColin Finck     CV_AM33_MCRL        = 85,
1726c2c66affSColin Finck     CV_AM33_MCVF        = 86,
1727c2c66affSColin Finck     CV_AM33_EPSW        = 87,
1728c2c66affSColin Finck     CV_AM33_FPCR        = 88,
1729c2c66affSColin Finck     CV_AM33_LIR         = 89,
1730c2c66affSColin Finck     CV_AM33_LAR         = 90,
1731c2c66affSColin Finck 
1732c2c66affSColin Finck     /* Mitsubishi M32R CPU */
1733c2c66affSColin Finck     CV_M32R_NOREG       = CV_REG_NONE,
1734c2c66affSColin Finck     CV_M32R_R0          = 10, /* this includes R1 to R11 */
1735c2c66affSColin Finck     CV_M32R_R12         = 22,
1736c2c66affSColin Finck     CV_M32R_R13         = 23,
1737c2c66affSColin Finck     CV_M32R_R14         = 24,
1738c2c66affSColin Finck     CV_M32R_R15         = 25,
1739c2c66affSColin Finck     CV_M32R_PSW         = 26,
1740c2c66affSColin Finck     CV_M32R_CBR         = 27,
1741c2c66affSColin Finck     CV_M32R_SPI         = 28,
1742c2c66affSColin Finck     CV_M32R_SPU         = 29,
1743c2c66affSColin Finck     CV_M32R_SPO         = 30,
1744c2c66affSColin Finck     CV_M32R_BPC         = 31,
1745c2c66affSColin Finck     CV_M32R_ACHI        = 32,
1746c2c66affSColin Finck     CV_M32R_ACLO        = 33,
1747c2c66affSColin Finck     CV_M32R_PC          = 34,
1748c2c66affSColin Finck 
1749c2c66affSColin Finck     /* AMD/Intel x86_64 CPU */
1750c2c66affSColin Finck     CV_AMD64_NONE       = CV_REG_NONE,
1751c2c66affSColin Finck     CV_AMD64_AL         = CV_REG_AL,
1752c2c66affSColin Finck     CV_AMD64_CL         = CV_REG_CL,
1753c2c66affSColin Finck     CV_AMD64_DL         = CV_REG_DL,
1754c2c66affSColin Finck     CV_AMD64_BL         = CV_REG_BL,
1755c2c66affSColin Finck     CV_AMD64_AH         = CV_REG_AH,
1756c2c66affSColin Finck     CV_AMD64_CH         = CV_REG_CH,
1757c2c66affSColin Finck     CV_AMD64_DH         = CV_REG_DH,
1758c2c66affSColin Finck     CV_AMD64_BH         = CV_REG_BH,
1759c2c66affSColin Finck     CV_AMD64_AX         = CV_REG_AX,
1760c2c66affSColin Finck     CV_AMD64_CX         = CV_REG_CX,
1761c2c66affSColin Finck     CV_AMD64_DX         = CV_REG_DX,
1762c2c66affSColin Finck     CV_AMD64_BX         = CV_REG_BX,
1763c2c66affSColin Finck     CV_AMD64_SP         = CV_REG_SP,
1764c2c66affSColin Finck     CV_AMD64_BP         = CV_REG_BP,
1765c2c66affSColin Finck     CV_AMD64_SI         = CV_REG_SI,
1766c2c66affSColin Finck     CV_AMD64_DI         = CV_REG_DI,
1767c2c66affSColin Finck     CV_AMD64_EAX        = CV_REG_EAX,
1768c2c66affSColin Finck     CV_AMD64_ECX        = CV_REG_ECX,
1769c2c66affSColin Finck     CV_AMD64_EDX        = CV_REG_EDX,
1770c2c66affSColin Finck     CV_AMD64_EBX        = CV_REG_EBX,
1771c2c66affSColin Finck     CV_AMD64_ESP        = CV_REG_ESP,
1772c2c66affSColin Finck     CV_AMD64_EBP        = CV_REG_EBP,
1773c2c66affSColin Finck     CV_AMD64_ESI        = CV_REG_ESI,
1774c2c66affSColin Finck     CV_AMD64_EDI        = CV_REG_EDI,
1775c2c66affSColin Finck     CV_AMD64_ES         = CV_REG_ES,
1776c2c66affSColin Finck     CV_AMD64_CS         = CV_REG_CS,
1777c2c66affSColin Finck     CV_AMD64_SS         = CV_REG_SS,
1778c2c66affSColin Finck     CV_AMD64_DS         = CV_REG_DS,
1779c2c66affSColin Finck     CV_AMD64_FS         = CV_REG_FS,
1780c2c66affSColin Finck     CV_AMD64_GS         = CV_REG_GS,
1781c2c66affSColin Finck     CV_AMD64_FLAGS      = CV_REG_FLAGS,
1782c2c66affSColin Finck     CV_AMD64_RIP        = CV_REG_EIP,
1783c2c66affSColin Finck     CV_AMD64_EFLAGS     = CV_REG_EFLAGS,
1784c2c66affSColin Finck 
1785c2c66affSColin Finck     /* <pcode> */
1786c2c66affSColin Finck     CV_AMD64_TEMP       = CV_REG_TEMP,
1787c2c66affSColin Finck     CV_AMD64_TEMPH      = CV_REG_TEMPH,
1788c2c66affSColin Finck     CV_AMD64_QUOTE      = CV_REG_QUOTE,
1789c2c66affSColin Finck     CV_AMD64_PCDR3      = CV_REG_PCDR3, /* this includes PCDR4 to PCDR7 */
1790c2c66affSColin Finck     CV_AMD64_CR0        = CV_REG_CR0,   /* this includes CR1 to CR4 */
1791c2c66affSColin Finck     CV_AMD64_DR0        = CV_REG_DR0,   /* this includes DR1 to DR7 */
1792c2c66affSColin Finck     /* </pcode> */
1793c2c66affSColin Finck 
1794c2c66affSColin Finck     CV_AMD64_GDTR       = CV_REG_GDTR,
1795c2c66affSColin Finck     CV_AMD64_GDTL       = CV_REG_GDTL,
1796c2c66affSColin Finck     CV_AMD64_IDTR       = CV_REG_IDTR,
1797c2c66affSColin Finck     CV_AMD64_IDTL       = CV_REG_IDTL,
1798c2c66affSColin Finck     CV_AMD64_LDTR       = CV_REG_LDTR,
1799c2c66affSColin Finck     CV_AMD64_TR         = CV_REG_TR,
1800c2c66affSColin Finck 
1801c2c66affSColin Finck     CV_AMD64_PSEUDO1    = CV_REG_PSEUDO1, /* this includes Pseudo02 to Pseudo09 */
1802c2c66affSColin Finck     CV_AMD64_ST0        = CV_REG_ST0,     /* this includes ST1 to ST7 */
1803c2c66affSColin Finck     CV_AMD64_CTRL       = CV_REG_CTRL,
1804c2c66affSColin Finck     CV_AMD64_STAT       = CV_REG_STAT,
1805c2c66affSColin Finck     CV_AMD64_TAG        = CV_REG_TAG,
1806c2c66affSColin Finck     CV_AMD64_FPIP       = CV_REG_FPIP,
1807c2c66affSColin Finck     CV_AMD64_FPCS       = CV_REG_FPCS,
1808c2c66affSColin Finck     CV_AMD64_FPDO       = CV_REG_FPDO,
1809c2c66affSColin Finck     CV_AMD64_FPDS       = CV_REG_FPDS,
1810c2c66affSColin Finck     CV_AMD64_ISEM       = CV_REG_ISEM,
1811c2c66affSColin Finck     CV_AMD64_FPEIP      = CV_REG_FPEIP,
1812c2c66affSColin Finck     CV_AMD64_FPEDO      = CV_REG_FPEDO,
1813c2c66affSColin Finck     CV_AMD64_MM0        = CV_REG_MM0,     /* this includes MM1 to MM7 */
1814c2c66affSColin Finck     CV_AMD64_XMM0       = CV_REG_XMM0,    /* this includes XMM1 to XMM7 */
1815c2c66affSColin Finck     CV_AMD64_XMM00      = CV_REG_XMM00,
1816c2c66affSColin Finck     CV_AMD64_XMM0L      = CV_REG_XMM0L,   /* this includes XMM1L to XMM7L */
1817c2c66affSColin Finck     CV_AMD64_XMM0H      = CV_REG_XMM0H,   /* this includes XMM1H to XMM7H */
1818c2c66affSColin Finck     CV_AMD64_MXCSR      = CV_REG_MXCSR,
1819c2c66affSColin Finck     CV_AMD64_EDXEAX     = CV_REG_EDXEAX,
1820c2c66affSColin Finck     CV_AMD64_EMM0L      = CV_REG_EMM0L,
1821c2c66affSColin Finck     CV_AMD64_EMM0H      = CV_REG_EMM0H,
1822c2c66affSColin Finck     CV_AMD64_MM00       = CV_REG_MM00,
1823c2c66affSColin Finck     CV_AMD64_MM01       = CV_REG_MM01,
1824c2c66affSColin Finck     CV_AMD64_MM10       = CV_REG_MM10,
1825c2c66affSColin Finck     CV_AMD64_MM11       = CV_REG_MM11,
1826c2c66affSColin Finck     CV_AMD64_MM20       = CV_REG_MM20,
1827c2c66affSColin Finck     CV_AMD64_MM21       = CV_REG_MM21,
1828c2c66affSColin Finck     CV_AMD64_MM30       = CV_REG_MM30,
1829c2c66affSColin Finck     CV_AMD64_MM31       = CV_REG_MM31,
1830c2c66affSColin Finck     CV_AMD64_MM40       = CV_REG_MM40,
1831c2c66affSColin Finck     CV_AMD64_MM41       = CV_REG_MM41,
1832c2c66affSColin Finck     CV_AMD64_MM50       = CV_REG_MM50,
1833c2c66affSColin Finck     CV_AMD64_MM51       = CV_REG_MM51,
1834c2c66affSColin Finck     CV_AMD64_MM60       = CV_REG_MM60,
1835c2c66affSColin Finck     CV_AMD64_MM61       = CV_REG_MM61,
1836c2c66affSColin Finck     CV_AMD64_MM70       = CV_REG_MM70,
1837c2c66affSColin Finck     CV_AMD64_MM71       = CV_REG_MM71,
1838c2c66affSColin Finck 
1839c2c66affSColin Finck     CV_AMD64_XMM8       = 252,           /* this includes XMM9 to XMM15 */
1840c2c66affSColin Finck 
1841c2c66affSColin Finck     CV_AMD64_RAX        = 328,
1842c2c66affSColin Finck     CV_AMD64_RBX        = 329,
1843c2c66affSColin Finck     CV_AMD64_RCX        = 330,
1844c2c66affSColin Finck     CV_AMD64_RDX        = 331,
1845c2c66affSColin Finck     CV_AMD64_RSI        = 332,
1846c2c66affSColin Finck     CV_AMD64_RDI        = 333,
1847c2c66affSColin Finck     CV_AMD64_RBP        = 334,
1848c2c66affSColin Finck     CV_AMD64_RSP        = 335,
1849c2c66affSColin Finck 
1850c2c66affSColin Finck     CV_AMD64_R8         = 336,
1851c2c66affSColin Finck     CV_AMD64_R9         = 337,
1852c2c66affSColin Finck     CV_AMD64_R10        = 338,
1853c2c66affSColin Finck     CV_AMD64_R11        = 339,
1854c2c66affSColin Finck     CV_AMD64_R12        = 340,
1855c2c66affSColin Finck     CV_AMD64_R13        = 341,
1856c2c66affSColin Finck     CV_AMD64_R14        = 342,
1857c2c66affSColin Finck     CV_AMD64_R15        = 343,
1858c2c66affSColin Finck 
1859c2c66affSColin Finck     /* Wine extension */
1860c2c66affSColin Finck     CV_ARM64_NOREG        = CV_REG_NONE,
1861c2c66affSColin Finck     CV_ARM64_X0           = 10, /* this includes X0 to X30 */
1862c2c66affSColin Finck     CV_ARM64_SP           = 41,
1863c2c66affSColin Finck     CV_ARM64_PC           = 42,
1864c2c66affSColin Finck     CV_ARM64_PSTATE       = 43,
1865c2c66affSColin Finck };
1866c2c66affSColin Finck 
1867c2c66affSColin Finck typedef enum
1868c2c66affSColin Finck {
1869c2c66affSColin Finck    THUNK_ORDINAL_NOTYPE,
1870c2c66affSColin Finck    THUNK_ORDINAL_ADJUSTOR,
1871c2c66affSColin Finck    THUNK_ORDINAL_VCALL,
1872c2c66affSColin Finck    THUNK_ORDINAL_PCODE,
1873c2c66affSColin Finck    THUNK_ORDINAL_LOAD
1874c2c66affSColin Finck } THUNK_ORDINAL;
1875c2c66affSColin Finck 
1876c2c66affSColin Finck typedef enum CV_call_e
1877c2c66affSColin Finck {
1878c2c66affSColin Finck     CV_CALL_NEAR_C,
1879c2c66affSColin Finck     CV_CALL_FAR_C,
1880c2c66affSColin Finck     CV_CALL_NEAR_PASCAL,
1881c2c66affSColin Finck     CV_CALL_FAR_PASCAL,
1882c2c66affSColin Finck     CV_CALL_NEAR_FAST,
1883c2c66affSColin Finck     CV_CALL_FAR_FAST,
1884c2c66affSColin Finck     CV_CALL_SKIPPED,
1885c2c66affSColin Finck     CV_CALL_NEAR_STD,
1886c2c66affSColin Finck     CV_CALL_FAR_STD,
1887c2c66affSColin Finck     CV_CALL_NEAR_SYS,
1888c2c66affSColin Finck     CV_CALL_FAR_SYS,
1889c2c66affSColin Finck     CV_CALL_THISCALL,
1890c2c66affSColin Finck     CV_CALL_MIPSCALL,
1891c2c66affSColin Finck     CV_CALL_GENERIC,
1892c2c66affSColin Finck     CV_CALL_ALPHACALL,
1893c2c66affSColin Finck     CV_CALL_PPCCALL,
1894c2c66affSColin Finck     CV_CALL_SHCALL,
1895c2c66affSColin Finck     CV_CALL_ARMCALL,
1896c2c66affSColin Finck     CV_CALL_AM33CALL,
1897c2c66affSColin Finck     CV_CALL_TRICALL,
1898c2c66affSColin Finck     CV_CALL_SH5CALL,
1899c2c66affSColin Finck     CV_CALL_M32RCALL,
1900c2c66affSColin Finck     CV_CALL_RESERVED,
1901c2c66affSColin Finck } CV_call_e;
1902c2c66affSColin Finck 
1903c2c66affSColin Finck 
1904c2c66affSColin Finck // wtypes.h
1905c2c66affSColin Finck typedef LONG SCODE;
1906c2c66affSColin Finck typedef double DATE;
1907c2c66affSColin Finck typedef unsigned short VARTYPE;
1908c2c66affSColin Finck typedef union tagCY {
1909c2c66affSColin Finck     struct {
1910c2c66affSColin Finck #ifdef WORDS_BIGENDIAN
1911c2c66affSColin Finck         LONG  Hi;
1912c2c66affSColin Finck         ULONG Lo;
1913c2c66affSColin Finck #else
1914c2c66affSColin Finck         ULONG Lo;
1915c2c66affSColin Finck         LONG  Hi;
1916c2c66affSColin Finck #endif
1917c2c66affSColin Finck     } DUMMYSTRUCTNAME;
1918c2c66affSColin Finck     LONGLONG int64;
1919c2c66affSColin Finck } CY;
1920c2c66affSColin Finck typedef struct tagDEC {
1921c2c66affSColin Finck   USHORT wReserved;
1922c2c66affSColin Finck   union {
1923c2c66affSColin Finck     struct {
1924c2c66affSColin Finck       BYTE scale;
1925c2c66affSColin Finck       BYTE sign;
1926c2c66affSColin Finck     } DUMMYSTRUCTNAME;
1927c2c66affSColin Finck     USHORT signscale;
1928c2c66affSColin Finck   } DUMMYUNIONNAME;
1929c2c66affSColin Finck   ULONG Hi32;
1930c2c66affSColin Finck   union {
1931c2c66affSColin Finck     struct {
1932c2c66affSColin Finck #ifdef WORDS_BIGENDIAN
1933c2c66affSColin Finck       ULONG Mid32;
1934c2c66affSColin Finck       ULONG Lo32;
1935c2c66affSColin Finck #else
1936c2c66affSColin Finck       ULONG Lo32;
1937c2c66affSColin Finck       ULONG Mid32;
1938c2c66affSColin Finck #endif
1939c2c66affSColin Finck     } DUMMYSTRUCTNAME1;
1940c2c66affSColin Finck     ULONGLONG Lo64;
1941c2c66affSColin Finck   } DUMMYUNIONNAME1;
1942c2c66affSColin Finck } DECIMAL;
1943c2c66affSColin Finck typedef short VARIANT_BOOL;
1944c2c66affSColin Finck typedef VARIANT_BOOL _VARIANT_BOOL;
1945c2c66affSColin Finck typedef WCHAR OLECHAR;
1946c2c66affSColin Finck typedef OLECHAR *BSTR;
1947c2c66affSColin Finck enum VARENUM {
1948c2c66affSColin Finck     VT_EMPTY = 0,
1949c2c66affSColin Finck     VT_NULL = 1,
1950c2c66affSColin Finck     VT_I2 = 2,
1951c2c66affSColin Finck     VT_I4 = 3,
1952c2c66affSColin Finck     VT_R4 = 4,
1953c2c66affSColin Finck     VT_R8 = 5,
1954c2c66affSColin Finck     VT_CY = 6,
1955c2c66affSColin Finck     VT_DATE = 7,
1956c2c66affSColin Finck     VT_BSTR = 8,
1957c2c66affSColin Finck     VT_DISPATCH = 9,
1958c2c66affSColin Finck     VT_ERROR = 10,
1959c2c66affSColin Finck     VT_BOOL = 11,
1960c2c66affSColin Finck     VT_VARIANT = 12,
1961c2c66affSColin Finck     VT_UNKNOWN = 13,
1962c2c66affSColin Finck     VT_DECIMAL = 14,
1963c2c66affSColin Finck     VT_I1 = 16,
1964c2c66affSColin Finck     VT_UI1 = 17,
1965c2c66affSColin Finck     VT_UI2 = 18,
1966c2c66affSColin Finck     VT_UI4 = 19,
1967c2c66affSColin Finck     VT_I8 = 20,
1968c2c66affSColin Finck     VT_UI8 = 21,
1969c2c66affSColin Finck     VT_INT = 22,
1970c2c66affSColin Finck     VT_UINT = 23,
1971c2c66affSColin Finck     VT_VOID = 24,
1972c2c66affSColin Finck     VT_HRESULT = 25,
1973c2c66affSColin Finck     VT_PTR = 26,
1974c2c66affSColin Finck     VT_SAFEARRAY = 27,
1975c2c66affSColin Finck     VT_CARRAY = 28,
1976c2c66affSColin Finck     VT_USERDEFINED = 29,
1977c2c66affSColin Finck     VT_LPSTR = 30,
1978c2c66affSColin Finck     VT_LPWSTR = 31,
1979c2c66affSColin Finck     VT_RECORD = 36,
1980c2c66affSColin Finck     VT_INT_PTR = 37,
1981c2c66affSColin Finck     VT_UINT_PTR = 38,
1982c2c66affSColin Finck     VT_FILETIME = 64,
1983c2c66affSColin Finck     VT_BLOB = 65,
1984c2c66affSColin Finck     VT_STREAM = 66,
1985c2c66affSColin Finck     VT_STORAGE = 67,
1986c2c66affSColin Finck     VT_STREAMED_OBJECT = 68,
1987c2c66affSColin Finck     VT_STORED_OBJECT = 69,
1988c2c66affSColin Finck     VT_BLOB_OBJECT = 70,
1989c2c66affSColin Finck     VT_CF = 71,
1990c2c66affSColin Finck     VT_CLSID = 72,
1991c2c66affSColin Finck     VT_VERSIONED_STREAM = 73,
1992c2c66affSColin Finck     VT_BSTR_BLOB = 0xfff,
1993c2c66affSColin Finck     VT_VECTOR = 0x1000,
1994c2c66affSColin Finck     VT_ARRAY = 0x2000,
1995c2c66affSColin Finck     VT_BYREF = 0x4000,
1996c2c66affSColin Finck     VT_RESERVED = 0x8000,
1997c2c66affSColin Finck     VT_ILLEGAL = 0xffff,
1998c2c66affSColin Finck     VT_ILLEGALMASKED = 0xfff,
1999c2c66affSColin Finck     VT_TYPEMASK = 0xfff
2000c2c66affSColin Finck };
2001c2c66affSColin Finck 
2002c2c66affSColin Finck // oaidl.h
2003c2c66affSColin Finck typedef struct tagSAFEARRAYBOUND {
2004c2c66affSColin Finck     ULONG cElements;
2005c2c66affSColin Finck     LONG lLbound;
2006c2c66affSColin Finck } SAFEARRAYBOUND;
2007c2c66affSColin Finck typedef struct tagSAFEARRAY {
2008c2c66affSColin Finck     USHORT cDims;
2009c2c66affSColin Finck     USHORT fFeatures;
2010c2c66affSColin Finck     ULONG cbElements;
2011c2c66affSColin Finck     ULONG cLocks;
2012c2c66affSColin Finck     PVOID pvData;
2013c2c66affSColin Finck     SAFEARRAYBOUND rgsabound[1];
2014c2c66affSColin Finck } SAFEARRAY;
2015c2c66affSColin Finck typedef SAFEARRAY *LPSAFEARRAY;
2016c2c66affSColin Finck 
2017c2c66affSColin Finck #if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
2018c2c66affSColin Finck #define __VARIANT_NAME_1 n1
2019c2c66affSColin Finck #define __VARIANT_NAME_2 n2
2020c2c66affSColin Finck #define __VARIANT_NAME_3 n3
2021c2c66affSColin Finck #define __VARIANT_NAME_4 brecVal
2022c2c66affSColin Finck #else
2023c2c66affSColin Finck #define __tagVARIANT
2024c2c66affSColin Finck #define __VARIANT_NAME_1
2025c2c66affSColin Finck #define __VARIANT_NAME_2
2026c2c66affSColin Finck #define __VARIANT_NAME_3
2027c2c66affSColin Finck #define __tagBRECORD
2028c2c66affSColin Finck #define __VARIANT_NAME_4
2029c2c66affSColin Finck #endif
2030c2c66affSColin Finck typedef struct tagVARIANT VARIANT;
2031c2c66affSColin Finck struct tagVARIANT {
2032c2c66affSColin Finck     union {
2033c2c66affSColin Finck         struct __tagVARIANT {
2034c2c66affSColin Finck             VARTYPE vt;
2035c2c66affSColin Finck             WORD wReserved1;
2036c2c66affSColin Finck             WORD wReserved2;
2037c2c66affSColin Finck             WORD wReserved3;
2038c2c66affSColin Finck             union {
2039c2c66affSColin Finck                 signed char cVal;
2040c2c66affSColin Finck                 USHORT uiVal;
2041c2c66affSColin Finck                 ULONG ulVal;
2042c2c66affSColin Finck                 INT intVal;
2043c2c66affSColin Finck                 UINT uintVal;
2044c2c66affSColin Finck                 BYTE bVal;
2045c2c66affSColin Finck                 SHORT iVal;
2046c2c66affSColin Finck                 LONG lVal;
2047c2c66affSColin Finck                 FLOAT fltVal;
2048c2c66affSColin Finck                 DOUBLE dblVal;
2049c2c66affSColin Finck                 VARIANT_BOOL boolVal;
2050c2c66affSColin Finck                 SCODE scode;
2051c2c66affSColin Finck                 DATE date;
2052c2c66affSColin Finck                 BSTR bstrVal;
2053c2c66affSColin Finck                 CY cyVal;
2054c2c66affSColin Finck                 IUnknown *punkVal;
2055c2c66affSColin Finck                 IDispatch *pdispVal;
2056c2c66affSColin Finck                 SAFEARRAY *parray;
2057c2c66affSColin Finck                 LONGLONG llVal;
2058c2c66affSColin Finck                 ULONGLONG ullVal;
2059c2c66affSColin Finck                 signed char *pcVal;
2060c2c66affSColin Finck                 USHORT *puiVal;
2061c2c66affSColin Finck                 ULONG *pulVal;
2062c2c66affSColin Finck                 INT *pintVal;
2063c2c66affSColin Finck                 UINT *puintVal;
2064c2c66affSColin Finck                 BYTE *pbVal;
2065c2c66affSColin Finck                 SHORT *piVal;
2066c2c66affSColin Finck                 LONG *plVal;
2067c2c66affSColin Finck                 FLOAT *pfltVal;
2068c2c66affSColin Finck                 DOUBLE *pdblVal;
2069c2c66affSColin Finck                 VARIANT_BOOL *pboolVal;
2070c2c66affSColin Finck                 SCODE *pscode;
2071c2c66affSColin Finck                 DATE *pdate;
2072c2c66affSColin Finck                 BSTR *pbstrVal;
2073c2c66affSColin Finck                 VARIANT *pvarVal;
2074c2c66affSColin Finck                 PVOID byref;
2075c2c66affSColin Finck                 CY *pcyVal;
2076c2c66affSColin Finck                 DECIMAL *pdecVal;
2077c2c66affSColin Finck                 IUnknown **ppunkVal;
2078c2c66affSColin Finck                 IDispatch **ppdispVal;
2079c2c66affSColin Finck                 SAFEARRAY **pparray;
2080c2c66affSColin Finck                 LONGLONG *pllVal;
2081c2c66affSColin Finck                 ULONGLONG *pullVal;
2082c2c66affSColin Finck                 struct __tagBRECORD {
2083c2c66affSColin Finck                     PVOID pvRecord;
2084c2c66affSColin Finck                     IRecordInfo *pRecInfo;
2085c2c66affSColin Finck                 } __VARIANT_NAME_4;
2086c2c66affSColin Finck             } __VARIANT_NAME_3;
2087c2c66affSColin Finck         } __VARIANT_NAME_2;
2088c2c66affSColin Finck         DECIMAL decVal;
2089c2c66affSColin Finck     } __VARIANT_NAME_1;
2090c2c66affSColin Finck };
2091c2c66affSColin Finck 
2092c2c66affSColin Finck typedef VARIANT *LPVARIANT;
2093c2c66affSColin Finck typedef VARIANT VARIANTARG;
2094c2c66affSColin Finck typedef VARIANTARG *LPVARIANTARG;
2095c2c66affSColin Finck 
2096c2c66affSColin Finck // wine/windef16.h
2097c2c66affSColin Finck typedef DWORD SEGPTR;
2098c2c66affSColin Finck 
2099c2c66affSColin Finck // wine/winbase16.h
2100c2c66affSColin Finck typedef struct _STACK32FRAME
2101c2c66affSColin Finck {
2102c2c66affSColin Finck     DWORD   restore_addr;   /* 00 return address for restoring code selector */
2103c2c66affSColin Finck     DWORD   codeselector;   /* 04 code selector to restore */
2104c2c66affSColin Finck     EXCEPTION_REGISTRATION_RECORD frame;  /* 08 Exception frame */
2105c2c66affSColin Finck     SEGPTR  frame16;        /* 10 16-bit frame from last CallFrom16() */
2106c2c66affSColin Finck     DWORD   edi;            /* 14 saved registers */
2107c2c66affSColin Finck     DWORD   esi;            /* 18 */
2108c2c66affSColin Finck     DWORD   ebx;            /* 1c */
2109c2c66affSColin Finck     DWORD   ebp;            /* 20 saved 32-bit frame pointer */
2110c2c66affSColin Finck     DWORD   retaddr;        /* 24 return address */
2111c2c66affSColin Finck     DWORD   target;         /* 28 target address / CONTEXT86 pointer */
2112c2c66affSColin Finck     DWORD   nb_args;        /* 2c number of 16-bit argument bytes */
2113c2c66affSColin Finck } STACK32FRAME;
2114c2c66affSColin Finck 
2115c2c66affSColin Finck /* 16-bit stack layout after __wine_call_from_16() */
2116c2c66affSColin Finck typedef struct _STACK16FRAME
2117c2c66affSColin Finck {
2118c2c66affSColin Finck     STACK32FRAME *frame32;        /* 00 32-bit frame from last CallTo16() */
2119c2c66affSColin Finck     DWORD         edx;            /* 04 saved registers */
2120c2c66affSColin Finck     DWORD         ecx;            /* 08 */
2121c2c66affSColin Finck     DWORD         ebp;            /* 0c */
2122c2c66affSColin Finck     WORD          ds;             /* 10 */
2123c2c66affSColin Finck     WORD          es;             /* 12 */
2124c2c66affSColin Finck     WORD          fs;             /* 14 */
2125c2c66affSColin Finck     WORD          gs;             /* 16 */
2126c2c66affSColin Finck     DWORD         callfrom_ip;    /* 18 callfrom tail IP */
2127c2c66affSColin Finck     DWORD         module_cs;      /* 1c module code segment */
2128c2c66affSColin Finck     DWORD         relay;          /* 20 relay function address */
2129c2c66affSColin Finck     WORD          entry_ip;       /* 22 entry point IP */
2130c2c66affSColin Finck     DWORD         entry_point;    /* 26 API entry point to call, reused as mutex count */
2131c2c66affSColin Finck     WORD          bp;             /* 2a 16-bit stack frame chain */
2132c2c66affSColin Finck     WORD          ip;             /* 2c return address */
2133c2c66affSColin Finck     WORD          cs;             /* 2e */
2134c2c66affSColin Finck } STACK16FRAME;
2135