- Move from using include guards to pragma once.
[reactos.git] / reactos / tools / rsym / rsym64.h
1 #pragma once
2
3 //C_ASSERT(sizeof(ULONG) == 4);
4 typedef unsigned char UBYTE;
5 typedef unsigned __int64 ULONG64;
6
7 #define IMAGE_FILE_MACHINE_AMD64 0x8664
8 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
9 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
10
11 #define UWOP_PUSH_NONVOL 0
12 #define UWOP_ALLOC_LARGE 1
13 #define UWOP_ALLOC_SMALL 2
14 #define UWOP_SET_FPREG 3
15 #define UWOP_SAVE_NONVOL 4
16 #define UWOP_SAVE_NONVOL_FAR 5
17 #define UWOP_SAVE_XMM 6
18 #define UWOP_SAVE_XMM_FAR 7
19 #define UWOP_SAVE_XMM128 8
20 #define UWOP_SAVE_XMM128_FAR 9
21 #define UWOP_PUSH_MACHFRAME 10
22
23 #define REG_RAX 0
24 #define REG_RCX 1
25 #define REG_RDX 2
26 #define REG_RBX 3
27 #define REG_RSP 4
28 #define REG_RBP 5
29 #define REG_RSI 6
30 #define REG_RDI 7
31 #define REG_R8 8
32 #define REG_R9 9
33 #define REG_R10 10
34 #define REG_R11 11
35 #define REG_R12 12
36 #define REG_R13 13
37 #define REG_R14 14
38 #define REG_R15 15
39
40 #define REG_XMM0 0
41 #define REG_XMM1 1
42 #define REG_XMM2 2
43 #define REG_XMM3 3
44 #define REG_XMM4 4
45 #define REG_XMM5 5
46 #define REG_XMM6 6
47 #define REG_XMM7 7
48 #define REG_XMM8 8
49 #define REG_XMM9 9
50 #define REG_XMM10 10
51 #define REG_XMM11 11
52 #define REG_XMM12 12
53 #define REG_XMM13 13
54 #define REG_XMM14 14
55 #define REG_XMM15 15
56
57
58 typedef struct _IMAGE_IMPORT_DESCRIPTOR
59 {
60 union {
61 DWORD Characteristics;
62 DWORD OriginalFirstThunk;
63 };
64 DWORD TimeDateStamp;
65 DWORD ForwarderChain;
66 DWORD Name;
67 DWORD FirstThunk;
68 } IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR;
69
70 typedef struct _IMAGE_THUNK_DATA64
71 {
72 union {
73 ULONGLONG ForwarderString;
74 ULONGLONG Function;
75 ULONGLONG Ordinal;
76 ULONGLONG AddressOfData;
77 } u1;
78 } IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64;
79
80 typedef struct _RUNTIME_FUNCTION
81 {
82 ULONG FunctionStart;
83 ULONG FunctionEnd;
84 ULONG UnwindInfo;
85 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
86
87 typedef union _UNWIND_CODE
88 {
89 struct
90 {
91 UBYTE CodeOffset;
92 UBYTE UnwindOp:4;
93 UBYTE OpInfo:4;
94 };
95 USHORT FrameOffset;
96 } UNWIND_CODE, *PUNWIND_CODE;
97
98 enum
99 {
100 UNW_FLAG_EHANDLER = 0x01,
101 UNW_FLAG_UHANDLER = 0x02,
102 UNW_FLAG_CHAININFO = 0x03,
103 };
104
105 typedef struct _UNWIND_INFO
106 {
107 UBYTE Version:3;
108 UBYTE Flags:5;
109 UBYTE SizeOfProlog;
110 UBYTE CountOfCodes;
111 UBYTE FrameRegister:4;
112 UBYTE FrameOffset:4;
113 UNWIND_CODE UnwindCode[1];
114 /* union {
115 OPTIONAL ULONG ExceptionHandler;
116 OPTIONAL ULONG FunctionEntry;
117 };
118 OPTIONAL ULONG ExceptionData[];
119 */
120 } UNWIND_INFO, *PUNWIND_INFO;
121
122 typedef struct _C_SCOPE_TABLE_ENTRY
123 {
124 ULONG Begin;
125 ULONG End;
126 ULONG Handler;
127 ULONG Target;
128 } C_SCOPE_TABLE_ENTRY, *PC_SCOPE_TABLE_ENTRY;
129
130 typedef struct _C_SCOPE_TABLE
131 {
132 ULONG NumEntries;
133 C_SCOPE_TABLE_ENTRY Entry[1];
134 } C_SCOPE_TABLE, *PC_SCOPE_TABLE;
135
136
137 typedef struct
138 {
139 IMAGE_SECTION_HEADER *psh;
140 char *pName;
141 void *p;
142 ULONG idx;
143 } SECTION;
144
145 typedef struct
146 {
147 char* FilePtr;
148 size_t cbInFileSize;
149 size_t cbNewFileSize;
150
151 /* PE data pointers */
152 PIMAGE_DOS_HEADER DosHeader;
153 PIMAGE_FILE_HEADER FileHeader;
154 PIMAGE_OPTIONAL_HEADER64 OptionalHeader;
155 PIMAGE_SECTION_HEADER SectionHeaders;
156 PIMAGE_SECTION_HEADER NewSectionHeaders;
157 ULONG NewSectionHeaderSize;
158 PIMAGE_BASE_RELOCATION Relocations;
159 void *Symbols;
160 char *Strings;
161 ULONG64 ImageBase;
162 ULONG HeaderSize;
163 char *UseSection;
164
165 /* Sections */
166 ULONG AllSections;
167 ULONG UsedSections;
168
169 SECTION eh_frame;
170 SECTION pdata;
171 SECTION xdata;
172
173 char *AlignBuf;
174
175 ULONG cFuncs;
176 ULONG cUWOP;
177 ULONG cScopes;
178
179 } FILE_INFO, *PFILE_INFO;