annotate dbg/symbol/CodeView.d @ 0:10317f0c89a5

Initial commit
author korDen
date Sat, 24 Oct 2009 08:42:06 +0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2 This module is used to extract CodeView symbolic debugging information and to
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
3 perform queries upon that information.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 TODO:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 * Add support for CodeView 5.0 and PDB formats.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 * Add support to extract type information.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 Authors:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 Jeremie Pelletier
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
12 References:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 $(LINK http://www.x86.org/ftp/manuals/tools/sym.pdf)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 $(LINK http://undocumented.rawol.com/sbs-w2k-1-windows-2000-debugging-support.pdf)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 $(LINK http://www.microsoft.com/msj/0399/hood/hood0399.aspx)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 $(LINK http://source.winehq.org/source/include/wine/mscvpdb.h)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 $(LINK http://www.digitalmars.com/d/2.0/abi.html)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 License:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 Public Domain
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 module dbg.symbol.CodeView;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
23
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 import dbg.Debug;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26 class CodeViewDebugInfo : ISymbolicDebugInfo {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 Load CodeView data from the given memory view.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30 this(in void[] view)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
31 in {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
32 assert(view.length && view.ptr);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
34 body {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35 _view = view;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
36
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
37 auto header = cast(CV_HEADER*)_view.ptr;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 CheckOffset(header.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 // TODO: Only supporting NB09 (CodeView 4.10) right now
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41 if(!header.signature == CV_SIGNATURE_NB09)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42 throw new CodeViewUnsupportedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44 auto dir = cast(CV_DIRECTORY*)(view.ptr + header.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
45 if(dir.dirSize != CV_DIRECTORY.sizeof || dir.entrySize != CV_ENTRY.sizeof)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
46 throw new CodeViewCorruptedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48 CvModule globalModule;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
49 _modules ~= globalModule;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51 foreach(ref e; dir.entries) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
52 CheckOffset(e.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
53
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
54 switch(e.sst) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55 case sstModule: ParseModule(&e); break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
56 case sstLibraries: ParseLibraries(&e); break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57 case sstAlignSym: ParseAlignSymbols(&e); break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58 case sstSrcModule: ParseSrcModule(&e); break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 case sstGlobalPub:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
60 case sstStaticSym:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61 case sstGlobalSym: ParseHashSymbols(&e); break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 case sstGlobalTypes: ParseGlobalTypes(&e); break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
63
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
64 // TODO:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
65 /*case sstFileIndex:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
66 case sstSegMap:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
67 case sstSegName:*/
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
68
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
69 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
70 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
71 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
72 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
73
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
74 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
75 Get the procedure symbol matching the given address.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
76 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
77 SymbolInfo ResolveSymbol(size_t rva) const
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
78 in {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
79 assert(rva);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
80 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
81 body {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
82 SymbolInfo symbol;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
83
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
84 foreach(ref m; _modules[0 .. _maxSymModule + 1])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
85 if(m.symbols.QueryProc(rva, &symbol))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
86 goto Found;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
87
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
88 foreach(ref m; _modules[0 .. _maxSymModule + 1])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
89 if(m.symbols.QueryCodeData(rva, &symbol))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
90 goto Found;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
92 Found:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 return symbol;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 Get the file/line mapping corresponding to the given relative address.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
98 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 FileLineInfo ResolveFileLine(size_t rva) const
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100 in {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 assert(rva);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103 body {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104 FileLineInfo fileLine;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 if(_maxSrcModule)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107 foreach(m; _modules[1 .. _maxSrcModule + 1])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108 if(m.src.Query(rva, &fileLine))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
109 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
111 return fileLine;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
112 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
113
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
114 private:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
115
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
116 void ParseModule(in CV_ENTRY* e) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
117 auto mod = cast(CV_MODULE*)(_view.ptr + e.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
118
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
119 if(e.modIndex != _modules.length || mod.style != CV_MOD_STYLE)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
120 throw new CodeViewCorruptedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
121
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
122 with(*mod)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
123 _modules ~= CvModule(overlay, lib, segments, name.name);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
124 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
125
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
126 void ParseLibraries(in CV_ENTRY* e) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
127 if(e.modIndex != ushort.max) throw new CodeViewCorruptedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
128
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
129 auto name = cast(OMF_NAME*)(_view.ptr + e.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
130 auto end = cast(const(void)*)name + e.size;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
131
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
132 while(name < end) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
133 if(name.len) _libraries ~= name.name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
134
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
135 name = cast(OMF_NAME*)(cast(void*)name + 1 + name.len);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
136 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
137 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
138
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
139 void ParseAlignSymbols(in CV_ENTRY* e) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
140 if(e.modIndex == ushort.max || e.modIndex <= 0 || e.modIndex >= _modules.length)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
141 throw new CodeViewCorruptedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
142
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
143 if(e.modIndex > _maxSymModule) _maxSymModule = e.modIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
144
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
145 auto sym = cast(CV_SYMBOL*)(_view.ptr + e.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
146
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
147 if(sym.header.type == 0) sym = cast(CV_SYMBOL*)(cast(void*)sym + 4);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
148
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
149 _modules[e.modIndex].symbols.Init(sym, cast(void*)sym + e.size);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
150 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
151
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
152 void ParseHashSymbols(in CV_ENTRY* e) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
153 if(e.modIndex != ushort.max) throw new CodeViewCorruptedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
154
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
155 auto hash = cast(CV_SYMHASH*)(_view.ptr + e.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
156 auto p = cast(void*)hash + CV_SYMHASH.sizeof;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
157
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
158 _modules[0].symbols.Init(cast(CV_SYMBOL*)p, p + hash.symInfoSize);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
159 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
160
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
161 void ParseSrcModule(in CV_ENTRY* e) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
162 if(e.modIndex == ushort.max || e.modIndex <= 0 || e.modIndex >= _modules.length)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
163 throw new CodeViewCorruptedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
164
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
165 if(e.modIndex > _maxSrcModule) _maxSrcModule = e.modIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
166
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
167 auto src = cast(CV_SRCMODULE*)(_view.ptr + e.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
168
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
169 with(_modules[e.modIndex].src) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
170 data = src;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
171 fileOffsets = src.fileOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
172 codeOffsets = src.codeOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
173 segmentIds = src.segmentIds;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
174 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
175 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
176
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
177 void ParseGlobalTypes(in CV_ENTRY* e) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
178 if(e.modIndex != ushort.max) throw new CodeViewCorruptedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
179
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
180 // TODO: this currently crash stuff randomly
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
181 /*auto header = cast(CV_GLOBALTYPES*)(_view.ptr + e.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
182 _types.Init(header, cast(void*)header + e.size);*/
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
183 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
184
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
185 void CheckOffset(int offset) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
186 if(offset > _view.length) throw new CodeViewCorruptedException(this);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
187 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
188
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
189 const(void)[] _view;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
190
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
191 CvModule[] _modules;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
192 uint _maxSymModule;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
193 uint _maxSrcModule;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
194 string[] _libraries;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
195 CvTypes _types;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
196 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
197
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
198 abstract class CodeViewException : Exception {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
199 this(string msg) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
200 super(msg);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
201 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
202 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
203
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
204 class CodeViewUnsupportedException : CodeViewException {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
205 this(in CodeViewDebugInfo cv) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
206 super("CodeView version unsupported.");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
207 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
208 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
209
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
210 class CodeViewCorruptedException : CodeViewException {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
211 this(in CodeViewDebugInfo cv) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
212 super("Corrupted CodeView data.");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
213 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
214 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
215
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
216 private:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
217 alias int cmp_t;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
218 uint BinarySearch(scope cmp_t delegate(uint i) dg, uint low, uint high) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
219 if(high < low) return uint.max;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
220
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
221 uint mid = low + ((high - low) / 2);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
222 cmp_t cmp = dg(mid);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
223
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
224 if(cmp > 0) return BinarySearch(dg, low, mid - 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
225 if(cmp < 0) return BinarySearch(dg, mid + 1, high);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
226 return mid;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
227 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
228
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
229 uint BinarySearch(in uint[] a, uint value, uint low, uint high) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
230 if(high < low) return uint.max;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
231
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
232 uint mid = low + ((high - low) / 2);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
233
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
234 if(a[mid] > value) return BinarySearch(a, value, low, mid - 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
235 if(a[mid] < value) return BinarySearch(a, value, mid + 1, high);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
236 return mid;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
237 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
238
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
239 struct CvModule {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
240 ushort overlay;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
241 ushort lib;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
242 CV_SEGMENT[] segments;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
243 string name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
244
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
245 CvSymbols symbols;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
246 CvSrcModule src;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
247 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
248
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
249 struct CvSymbols {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
250 ubyte compileMachine;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
251 ubyte compileLanguage;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
252 ushort compileFlags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
253 string compileName;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
254 ushort segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
255
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
256 CvProc[] procSymbols;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
257 CvData[] codeSymbols;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
258
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
259 void Init(const(CV_SYMBOL)* sym, in void* end) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
260 int i = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
261 while(sym < end && i < 100) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
262 ++i;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
263 switch(sym.header.type) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
264 case S_COMPILE_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
265 with(sym.compile_v1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
266 compileMachine = machine;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
267 compileLanguage = language;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
268 compileFlags = flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
269 compileName = name.name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
270 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
271 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
272
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
273 case S_SSEARCH_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
274 if(!segment) segment = sym.ssearch.segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
275 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
276
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
277 case S_UDT_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
278 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
279
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
280 case S_BPREL_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
281 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
282
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
283 case S_LDATA_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
284 case S_GDATA_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
285 case S_PUB_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
286 CvData data = void;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
287
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
288 with(sym.data_v1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
289 // TODO: its bad to assume 2 to always be the only code segment!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
290 if(segment != 2) break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
291
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
292 data.offset = offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
293 data.name = name.name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
294 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
295
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
296 codeSymbols ~= data;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
297 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
298
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
299 case S_LPROC_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
300 case S_GPROC_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
301 CvProc proc = void;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
302
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
303 with(sym.proc_v1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
304 proc.offset = offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
305 proc.length = procLength;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
306 proc.name = name.name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
307 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
308
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
309 procSymbols ~= proc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
310 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
311
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
312 case S_PROCREF_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
313 case S_DATAREF_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
314 case S_ALIGN_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
315 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
316
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
317 case S_END_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
318 case S_ENDARG_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
319 case S_RETURN_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
320 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
321
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
322 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
323 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
324
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
325 sym = cast(CV_SYMBOL*)(cast(void*)sym + sym.header.size + 2);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
326 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
327
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
328 codeSymbols.sort;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
329 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
330
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
331 bool QueryProc(uint rva, SymbolInfo* symbol) const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
332 if(!procSymbols.length) return false;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
333
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
334 cmp_t CmpProc(uint i) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
335 if(i >= procSymbols.length) return 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
336
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
337 uint offset = procSymbols[i].offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
338 if(offset > rva) return 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
339 if(offset + procSymbols[i].length < rva) return -1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
340 return 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
341 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
342
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
343 uint index = BinarySearch(&CmpProc, 0, procSymbols.length - 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
344
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
345 if(index < procSymbols.length) with(procSymbols[index]) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
346 symbol.name = name.idup;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
347 symbol.offset = rva - offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
348 return true;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
349 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
350
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
351 return false;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
352 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
353
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
354 bool QueryCodeData(uint rva, SymbolInfo* symbol) const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
355 if(!codeSymbols.length) return false;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
356
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
357 cmp_t CmpData(uint i) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
358 if(i >= codeSymbols.length) return 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
359
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
360 if(codeSymbols[i].offset > rva) return 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
361 if(i + 1 != codeSymbols.length && codeSymbols[i + 1].offset < rva) return -1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
362 return 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
363 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
364
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
365 uint index = BinarySearch(&CmpData, 0, codeSymbols.length - 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
366
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
367 if(index < codeSymbols.length) with(codeSymbols[index]) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
368 symbol.name = name.idup;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
369 symbol.offset = rva - offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
370 return true;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
371 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
372
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
373 return false;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
374 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
375 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
376
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
377 struct CvProc {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
378 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
379 uint length;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
380 string name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
381 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
382
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
383 struct CvData {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
384 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
385 string name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
386
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
387 cmp_t opCmp(ref const CvData data) const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
388 if(data.offset < offset) return -1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
389 return data.offset > offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
390 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
391 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
392
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
393 struct CvSrcModule {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
394 bool Query(uint rva, FileLineInfo* fileLine) const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
395 if(!codeOffsets.length || rva < codeOffsets[0][0] || rva > codeOffsets[$ - 1][1])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
396 return false;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
397
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
398 uint fIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
399
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
400 // Get the next CV_SRCFILE record having rva within it's code range
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
401 // The code offsets here may overlap over file records, we have to walk
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
402 // through them and possibly keep walking if the next section doesn't
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
403 // find a matching line record.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
404 NextFile:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
405 if(fIndex == fileOffsets.length) return false;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
406
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
407 CV_SRCFILE* srcFile = cast(CV_SRCFILE*)(data + fileOffsets[fIndex++]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
408 uint[2][] offsets = srcFile.codeOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
409
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
410 if(rva < offsets[0][0] || rva > offsets[$ - 1][1])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
411 goto NextFile;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
412
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
413 CV_SRCSEGMENT* srcSeg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
414
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
415 // Address is possibly within this file, now get the CV_SEGMENT record.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
416 cmp_t CmpFile(uint i) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
417 if(i >= offsets.length) return 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
418
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
419 if(offsets[i][0] > rva) return 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
420 if(offsets[i][1] < rva) return -1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
421
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
422 srcSeg = cast(CV_SRCSEGMENT*)(data + srcFile.lineOffsets[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
423 return 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
424 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
425
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
426 // Ignore the return value from BinarySearch, if CmpSegment matched, we
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
427 // already have srcSeg set. In some rare cases there may not be a
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
428 // matching segment record even if the file's segment range said so.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
429 BinarySearch(&CmpFile, 0, offsets.length - 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
430 if(!srcSeg) goto NextFile;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
431
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
432 // Finally look within the segment's offsets for a matching record.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
433 uint[] segOffsets = srcSeg.offsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
434 ushort[] lineNumbers = srcSeg.lineNumbers;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
435
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
436 cmp_t CmpSegment(uint i) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
437 if(i >= segOffsets.length) return 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
438
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
439 if(segOffsets[i] > rva) return 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
440 if(i + 1 < segOffsets.length && segOffsets[i + 1] < rva) return -1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
441
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
442 return 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
443 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
444
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
445 uint sIndex = BinarySearch(&CmpSegment, 0, segOffsets.length - 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
446 if(sIndex >= lineNumbers.length) goto NextFile;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
447
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
448 // Found our record
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
449 fileLine.file = srcFile.name.name.idup;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
450 fileLine.line = srcSeg.lineNumbers[sIndex];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
451
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
452 return true;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
453 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
454
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
455 const(void)* data;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
456 const(uint)[] fileOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
457 const(uint[2])[] codeOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
458 const(ushort)[] segmentIds;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
459 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
460
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
461 // TODO!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
462 struct CvTypes {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
463 void Init(in CV_GLOBALTYPES* gtypes, in void* end) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
464 debug(CodeView) TraceA("CvTypes[%p].Init(gtypes=%p, end=%p)",
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
465 &this, gtypes, end);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
466
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
467 offsets = gtypes.typeOffsets[0 .. gtypes.nTypes].idup;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
468
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
469 void* dataStart = gtypes.types;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
470 data = dataStart[0 .. end - dataStart].idup;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
471 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
472
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
473 void GetType(ushort index) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
474 /+
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
475 CheckOffset(typeOffsets[index]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
476
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
477 CV_TYPE* type = cast(CV_TYPE*)(p + typeOffsets[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
478
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
479 switch(type.header.type) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
480 case LF_MODIFIER_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
481 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
482
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
483 case LF_POINTER_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
484 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
485
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
486 case LF_ARRAY_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
487 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
488
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
489 case LF_CLASS_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
490 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
491
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
492 case LF_STRUCTURE_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
493 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
494
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
495 case LF_UNION_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
496 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
497
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
498 case LF_ENUM_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
499 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
500
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
501 case LF_PROCEDURE_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
502 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
503
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
504 case LF_MFUNCTION_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
505 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
506
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
507 case LF_VTSHAPE_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
508 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
509
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
510 case LF_OEM_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
511 with(type.oem_v1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
512 // Ignore unknown OEMs
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
513 if(oem != OEM_DIGITALMARS || nIndices != 2) break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
514
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
515 switch(rec) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
516 case D_DYN_ARRAY:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
517 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
518
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
519 case D_ASSOC_ARRAY:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
520 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
521
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
522 case D_DELEGATE:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
523 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
524
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
525 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
526 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
527 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
528 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
529
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
530 case LF_ARGLIST_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
531 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
532
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
533 case LF_FIELDLIST_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
534 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
535
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
536 case LF_DERIVED_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
537 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
538
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
539 case LF_METHODLIST_V1:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
540 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
541
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
542 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
543 TraceA("New leaf %x", cast(uint)type.header.type);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
544 Pause;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
545 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
546 +/
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
547 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
548
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
549 const(uint)[] offsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
550 const(void)[] data;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
551 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
552
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
553 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
554 // O M F S t r u c t u r e s
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
555 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
556
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
557 align(1):
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
558
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
559 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
560 Packed variant header
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
561 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
562 struct OMF_HEADER {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
563 short size;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
564 short type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
565 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
566
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
567 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
568 Packed name, may be 0 padded to maintain alignment
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
569 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
570 struct OMF_NAME {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
571 ubyte len;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
572 //char[1] name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
573
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
574 string name() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
575 return (cast(immutable(char)*)(&len + 1))[0 .. len];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
576 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
577 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
578
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
579 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
580 // C o d e V i e w C o m m o n S t r u c t u r e s
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
581 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
582
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
583 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
584 Version signatures
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
585 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
586 enum : uint {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
587 CV_SIGNATURE_NB09 = 0x3930424E, /// CodeView 4.10
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
588 CV_SIGNATURE_NB11 = 0x3131424E, /// CodeView 5.0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
589 CV_SIGNATURE_NB10 = 0x3130424E, /// CodeView PDB 2.0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
590 CV_SIGNATURE_RSDS = 0x53445352 /// CodeView PDB 7.0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
591 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
592
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
593 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
594 SubSection Types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
595 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
596 enum : ushort {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
597 sstModule = 0x0120,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
598 sstTypes = 0x0121,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
599 sstPublic = 0x0122,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
600 sstPublicSym = 0x0123,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
601 sstSymbols = 0x0124,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
602 sstAlignSym = 0x0125,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
603 sstSrcLnSeg = 0x0126,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
604 sstSrcModule = 0x0127,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
605 sstLibraries = 0x0128,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
606 sstGlobalSym = 0x0129,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
607 sstGlobalPub = 0x012A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
608 sstGlobalTypes = 0x012B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
609 sstMPC = 0x012C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
610 sstSegMap = 0x012D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
611 sstSegName = 0x012E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
612 sstPreComp = 0x012F,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
613 sstPreCompMap = 0x0130,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
614 sstOffsetMap16 = 0x0131,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
615 sstOffsetMap32 = 0x0132,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
616 sstFileIndex = 0x0133,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
617 sstStaticSym = 0x0134
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
618 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
619
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
620 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
621 Header used with "NB09" and "NB11"
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
622 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
623 struct CV_HEADER {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
624 uint signature;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
625 int offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
626 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
627
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
628 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
629 Header used with "NB10"
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
630 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
631 struct CV_HEADER_NB10 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
632 uint signature;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
633 int offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
634 uint timestamp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
635 uint age;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
636 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
637 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
638
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
639 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
640 Header used with "RSDS"
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
641 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
642 /*struct CV_HEADER_RSDS {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
643 uint signature;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
644 GUID guid;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
645 uint age;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
646 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
647 }*/
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
648
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
649 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
650 Directory header
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
651 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
652 struct CV_DIRECTORY {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
653 ushort dirSize;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
654 ushort entrySize;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
655 uint nEntries;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
656 int offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
657 uint flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
658 //CV_ENTRY[1] entries;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
659
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
660 CV_ENTRY[] entries() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
661 return (cast(CV_ENTRY*)(&this + 1))[0 .. nEntries];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
662 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
663 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
664
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
665 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
666 Subsection record
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
667 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
668 struct CV_ENTRY {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
669 ushort sst;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
670 ushort modIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
671 int offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
672 uint size;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
673 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
674
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
675 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
676 // sstModule
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
677 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
678
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
679 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
680 Module style, always "CV"
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
681 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
682 enum CV_MOD_STYLE = 0x5643;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
683
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
684 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
685 Module
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
686 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
687 struct CV_MODULE {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
688 ushort overlay;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
689 ushort lib;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
690 ushort nSegments;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
691 ushort style;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
692 //CV_SEGMENT[1] segments;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
693 //OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
694
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
695 CV_SEGMENT[] segments() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
696 return (cast(CV_SEGMENT*)(&style + 1))[0 .. nSegments];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
697 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
698
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
699 OMF_NAME name() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
700 return *cast(OMF_NAME*)(cast(void*)segments + nSegments * CV_SEGMENT.sizeof);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
701 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
702 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
703
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
704 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
705 Module segment
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
706 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
707 struct CV_SEGMENT {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
708 ushort segIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
709 ushort padding;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
710 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
711 uint size;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
712 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
713
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
714 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
715 // sstGlobalPub, sstStaticSym, sstGlobalSym, sstAlignSym
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
716 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
717
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
718 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
719 Symbol IDs, used by CV_SYMBOL.header.type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
720 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
721 enum : ushort {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
722 S_COMPILE_V1 = 0x0001,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
723 S_REGISTER_V1 = 0x0002,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
724 S_CONSTANT_V1 = 0x0003,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
725 S_UDT_V1 = 0x0004,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
726 S_SSEARCH_V1 = 0x0005,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
727 S_END_V1 = 0x0006,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
728 S_SKIP_V1 = 0x0007,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
729 S_CVRESERVE_V1 = 0x0008,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
730 S_OBJNAME_V1 = 0x0009,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
731 S_ENDARG_V1 = 0x000A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
732 S_COBOLUDT_V1 = 0x000B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
733 S_MANYREG_V1 = 0x000C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
734 S_RETURN_V1 = 0x000D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
735 S_ENTRYTHIS_V1 = 0x000E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
736
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
737 S_BPREL_V1 = 0x0200,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
738 S_LDATA_V1 = 0x0201,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
739 S_GDATA_V1 = 0x0202,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
740 S_PUB_V1 = 0x0203,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
741 S_LPROC_V1 = 0x0204,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
742 S_GPROC_V1 = 0x0205,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
743 S_THUNK_V1 = 0x0206,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
744 S_BLOCK_V1 = 0x0207,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
745 S_WITH_V1 = 0x0208,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
746 S_LABEL_V1 = 0x0209,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
747 S_CEXMODEL_V1 = 0x020A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
748 S_VFTPATH_V1 = 0x020B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
749 S_REGREL_V1 = 0x020C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
750 S_LTHREAD_V1 = 0x020D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
751 S_GTHREAD_V1 = 0x020E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
752
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
753 S_PROCREF_V1 = 0x0400,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
754 S_DATAREF_V1 = 0x0401,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
755 S_ALIGN_V1 = 0x0402,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
756 S_LPROCREF_V1 = 0x0403,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
757
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
758 // Variants with 32bit type indices
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
759 S_REGISTER_V2 = 0x1001, /// CV_REGISTER_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
760 S_CONSTANT_V2 = 0x1002, /// CV_CONSTANT_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
761 S_UDT_V2 = 0x1003, /// CV_UDT_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
762 S_COBOLUDT_V2 = 0x1004,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
763 S_MANYREG_V2 = 0x1005,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
764 S_BPREL_V2 = 0x1006, /// CV_BPREL_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
765 S_LDATA_V2 = 0x1007, /// CV_DATA_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
766 S_GDATA_V2 = 0x1008, /// CV_DATA_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
767 S_PUB_V2 = 0x1009, /// CV_DATA_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
768 S_LPROC_V2 = 0x100A, /// CV_PROC_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
769 S_GPROC_V2 = 0x100B, /// CV_PROC_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
770 S_VFTTABLE_V2 = 0x100C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
771 S_REGREL_V2 = 0x100D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
772 S_LTHREAD_V2 = 0x100E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
773 S_GTHREAD_V2 = 0x100F,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
774 S_FUNCINFO_V2 = 0x1012,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
775 S_COMPILAND_V2 = 0x1013, /// CV_COMPILE_V2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
776
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
777 S_COMPILAND_V3 = 0x1101,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
778 S_THUNK_V3 = 0x1102,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
779 S_BLOCK_V3 = 0x1103,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
780 S_LABEL_V3 = 0x1105,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
781 S_REGISTER_V3 = 0x1106,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
782 S_CONSTANT_V3 = 0x1107,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
783 S_UDT_V3 = 0x1108,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
784 S_BPREL_V3 = 0x110B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
785 S_LDATA_V3 = 0x110C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
786 S_GDATA_V3 = 0x110D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
787 S_PUB_V3 = 0x110E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
788 S_LPROC_V3 = 0x110F,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
789 S_GPROC_V3 = 0x1110,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
790 S_BPREL_XXXX_V3 = 0x1111, /* not really understood, but looks like bprel... */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
791 S_MSTOOL_V3 = 0x1116, /* compiler command line options and build information */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
792 S_PUB_FUNC1_V3 = 0x1125, /* didn't get the difference between the two */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
793 S_PUB_FUNC2_V3 = 0x1127,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
794 S_SECTINFO_V3 = 0x1136,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
795 S_SUBSECTINFO_V3= 0x1137,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
796 S_ENTRYPOINT_V3 = 0x1138,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
797 S_SECUCOOKIE_V3 = 0x113A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
798 S_MSTOOLINFO_V3 = 0x113C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
799 S_MSTOOLENV_V3 = 0x113D
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
800 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
801
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
802 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
803 Packed symbols header
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
804 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
805 struct CV_SYMHASH {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
806 ushort symIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
807 ushort addrIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
808 uint symInfoSize;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
809 uint symHashSize;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
810 uint addrHashSize;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
811 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
812
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
813 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
814 Symbol variant record
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
815 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
816 struct CV_SYMBOL {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
817 OMF_HEADER header;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
818 union {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
819 CV_COMPILE_V1 compile_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
820 CV_COMPILE_V2 compile_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
821 CV_REGISTER_V1 register_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
822 CV_REGISTER_V2 register_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
823 CV_CONSTANT_V1 constant_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
824 CV_CONSTANT_V2 constant_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
825 CV_UDT_V1 udt_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
826 CV_UDT_V2 udt_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
827 CV_SSEARCH ssearch;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
828 CV_STACK_V1 stack_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
829 CV_STACK_V2 stack_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
830 CV_DATA_V1 data_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
831 CV_DATA_V2 data_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
832 CV_PROC_V1 proc_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
833 CV_PROC_V2 proc_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
834 CV_THUNK thunk;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
835 CV_BLOCK block;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
836 CV_LABEL label;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
837 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
838 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
839
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
840 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
841 Compiler information symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
842 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
843 struct CV_COMPILE_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
844 ubyte machine;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
845 ubyte language;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
846 ushort flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
847 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
848 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
849 struct CV_COMPILE_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
850 uint[4] unknown1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
851 ushort unknown2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
852 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
853 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
854
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
855 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
856 Register data symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
857 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
858 struct CV_REGISTER_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
859 ushort typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
860 ushort reg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
861 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
862 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
863 struct CV_REGISTER_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
864 uint typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
865 ushort reg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
866 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
867 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
868
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
869 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
870 Constant data symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
871 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
872 struct CV_CONSTANT_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
873 ushort typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
874 ushort value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
875 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
876 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
877 struct CV_CONSTANT_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
878 uint typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
879 ushort value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
880 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
881 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
882
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
883 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
884 User defined type Symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
885 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
886 struct CV_UDT_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
887 ushort typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
888 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
889 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
890 struct CV_UDT_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
891 uint typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
892 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
893 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
894
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
895 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
896 Start of Search symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
897 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
898 struct CV_SSEARCH {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
899 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
900 ushort segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
901 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
902
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
903 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
904 Object name symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
905 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
906 struct CV_OBJNAME {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
907 uint signature;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
908 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
909 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
910
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
911 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
912 Stack data symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
913 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
914 struct CV_STACK_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
915 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
916 ushort typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
917 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
918 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
919 struct CV_STACK_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
920 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
921 uint typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
922 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
923 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
924
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
925 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
926 Data symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
927 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
928 struct CV_DATA_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
929 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
930 short segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
931 short typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
932 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
933 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
934 struct CV_DATA_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
935 uint typeIndex;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
936 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
937 short segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
938 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
939 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
940
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
941 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
942 Procedure symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
943 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
944 struct CV_PROC_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
945 uint parent;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
946 uint end;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
947 uint next;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
948 uint procLength;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
949 uint dbgStart;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
950 uint dbgEnd;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
951 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
952 ushort segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
953 ushort procType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
954 ubyte flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
955 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
956 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
957 struct CV_PROC_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
958 uint parent;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
959 uint end;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
960 uint next;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
961 uint procLength;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
962 uint dbgStart;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
963 uint dbgEnd;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
964 uint procType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
965 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
966 ushort segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
967 ubyte flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
968 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
969 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
970
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
971 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
972 Thunk symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
973 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
974 struct CV_THUNK {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
975 uint parent;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
976 uint end;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
977 uint next;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
978 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
979 ushort segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
980 ushort size;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
981 ubyte type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
982 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
983 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
984
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
985 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
986 Block symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
987 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
988 struct CV_BLOCK {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
989 uint parent;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
990 uint end;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
991 uint length;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
992 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
993 ushort segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
994 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
995 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
996
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
997 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
998 Label symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
999 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1000 struct CV_LABEL {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1001 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1002 ushort segment;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1003 ubyte flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1004 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1005 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1006
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1007 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1008 // sstSrcModule
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1009 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1010
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1011 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1012 Source module header
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1013 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1014 struct CV_SRCMODULE {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1015 ushort nFiles; /// number of CV_SRCFILE records
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1016 ushort nSegments; /// number of segments in module
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1017 //uint[] fileOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1018 //uint[2][] codeOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1019 //ushort[] segmentIds;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1020
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1021 /// array of offsets to every CV_SRCFILE record
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1022 uint[] fileOffsets() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1023 return (cast(uint*)(&nSegments + 1))[0 .. nFiles];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1024 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1025
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1026 /// array of segment start/end pairs, length = nSegments
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1027 uint[2][] codeOffsets() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1028 return (cast(uint[2]*)(cast(void*)fileOffsets + nFiles * uint.sizeof))[0 .. nSegments];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1029 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1030
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1031 /// array of linker indices, length = nSegments
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1032 ushort[] segmentIds() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1033 return (cast(ushort*)(cast(void*)codeOffsets + nSegments * (uint[2]).sizeof))[0 .. nSegments];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1034 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1035 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1036
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1037 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1038 Source file record
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1039 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1040 struct CV_SRCFILE {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1041 ushort nSegments; /// number of CV_SRCSEGMENT records
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1042 ushort reserved;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1043 //uint[] lineOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1044 //uint[2][] codeOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1045 //OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1046
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1047 // array of offsets to every CV_SRCSEGMENT record, length = nSegments
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1048 uint[] lineOffsets() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1049 return (cast(uint*)(&reserved + 1))[0 .. nSegments];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1050 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1051
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1052 /// array of segment start/end pairs, length = nSegments
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1053 uint[2][] codeOffsets() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1054 return (cast(uint[2]*)(cast(void*)lineOffsets + nSegments * uint.sizeof))[0 .. nSegments];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1055 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1056
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1057 /// name of file padded to long boundary
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1058 OMF_NAME* name() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1059 return cast(OMF_NAME*)(cast(void*)codeOffsets + nSegments * (uint[2]).sizeof);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1060 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1061 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1062
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1063 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1064 Source segment record
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1065 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1066 struct CV_SRCSEGMENT {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1067 ushort segment; /// linker segment index
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1068 ushort nPairs; /// count of line/offset pairs
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1069 //uint[] offsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1070 //ushort[] lineNumbers;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1071
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1072 /// array of offsets in segment, length = nPairs
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1073 uint[] offsets() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1074 return (cast(uint*)(&nPairs + 1))[0 .. nPairs];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1075 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1076
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1077 /// array of line lumber in source, length = nPairs
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1078 ushort[] lineNumbers() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1079 return (cast(ushort*)(cast(void*)offsets + nPairs * uint.sizeof))[0 .. nPairs];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1080 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1081 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1082
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1083 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1084 // sstGlobalTypes
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1085 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1086
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1087 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1088 Basic types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1089
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1090 Official MS documentation says that type (< 0x4000, so 12 bits) is made of:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1091
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1092 +----------+------+------+----------+------+
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1093 | 11 | 10-8 | 7-4 | 3 | 2-0 |
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1094 +----------+------+------+----------+------+
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1095 | reserved | mode | type | reserved | size |
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1096 +----------+------+------+----------+------+
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1097 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1098
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1099 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1100 Basic type: Type bits
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1101 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1102 enum : ubyte {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1103 T_SPECIAL_BITS = 0x00, /// Special
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1104 T_SIGNED_BITS = 0x10, /// Signed integral value
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1105 T_UNSIGNED_BITS = 0x20, /// Unsigned integral value
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1106 T_BOOLEAN_BITS = 0x30, /// Boolean
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1107 T_REAL_BITS = 0x40, /// Real
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1108 T_COMPLEX_BITS = 0x50, /// Complex
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1109 T_SPECIAL2_BITS = 0x60, /// Special2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1110 T_INT_BITS = 0x70, /// Real int value
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1111 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1112
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1113 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1114 Basic type: Size bits
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1115 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1116 enum : ubyte {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1117 // Special types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1118 T_NOTYPE_BITS = 0x00, /// No type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1119 T_ABS_BITS = 0x01, /// Absolute symbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1120 T_SEGMENT_BITS = 0x02, /// Segment
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1121 T_VOID_BITS = 0x03, /// Void
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1122 T_CURRENCY_BITS = 0x04, /// Basic 8-byte currency value
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1123 T_NBASICSTR_BITS = 0x05, /// Near Basic string
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1124 T_FBASICSTR_BITS = 0x06, /// Far Basic string
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1125 T_NOTRANS_BITS = 0x07, /// Untranslated type from previous Microsoft symbol formats
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1126
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1127 // Signed/Unsigned/Boolean types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1128 T_INT08_BITS = 0x00, /// 1 byte
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1129 T_INT16_BITS = 0x01, /// 2 byte
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1130 T_INT32_BITS = 0x02, /// 4 byte
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1131 T_INT64_BITS = 0x03, /// 8 byte
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1132
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1133 // Real/Complex types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1134 T_REAL32_BITS = 0x00, /// 32 bit
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1135 T_REAL64_BITS = 0x01, /// 64 bit
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1136 T_REAL80_BITS = 0x02, /// 80 bit
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1137 T_REAL128_BITS = 0x03, /// 128 bit
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1138 T_REAL48_BITS = 0x04, /// 48 bit
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1139
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1140 // Special2 types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1141 T_BIT_BITS = 0x00, /// Bit
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1142 T_PASCHAR_BITS = 0x01, /// Pascal CHAR
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1143
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1144 // Real Int types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1145 T_CHAR_BITS = 0x00, /// Char
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1146 T_WCHAR_BITS = 0x01, /// Wide character
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1147 T_INT2_BITS = 0x02, /// 2-byte signed integer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1148 T_UINT2_BITS = 0x03, /// 2-byte unsigned integer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1149 T_INT4_BITS = 0x04, /// 4-byte signed integer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1150 T_UINT4_BITS = 0x05, /// 4-byte unsigned integer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1151 T_INT8_BITS = 0x06, /// 8-byte signed integer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1152 T_UINT8_BITS = 0x07, /// 8-byte unsigned integer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1153 T_DCHAR_BITS = 0x08, /// dchar, DigitalMars D extension
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1154 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1155
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1156 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1157 Basic type: Mode bits
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1158 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1159 enum : ushort {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1160 T_DIRECT_BITS = 0x0000, /// Direct; not a pointer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1161 T_NEARPTR_BITS = 0x0100, /// Near pointer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1162 T_FARPTR_BITS = 0x0200, /// Far pointer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1163 T_HUGEPTR_BITS = 0x0300, /// Huge pointer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1164 T_NEAR32PTR_BITS = 0x0400, /// 32-bit near pointer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1165 T_FAR32PTR_BITS = 0x0500, /// 32-bit far pointer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1166 T_NEAR64PTR_BITS = 0x0600, /// 64-bit near pointer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1167 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1168
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1169 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1170 Basic type bit masks
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1171 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1172 enum : ushort {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1173 T_TYPE_MASK = 0x00F0, /// type type mask (data treatment mode)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1174 T_SIZE_MASK = 0x000F, /// type size mask (depends on 'type' value)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1175 T_MODE_MASK = 0x0700, /// type mode mask (ptr/non-ptr)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1176 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1177
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1178 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1179 Leaf types, used by CV_TYPE.header.type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1180 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1181 enum : ushort {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1182 // Can be referenced from symbols
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1183 LF_MODIFIER_V1 = 0x0001,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1184 LF_POINTER_V1 = 0x0002,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1185 LF_ARRAY_V1 = 0x0003,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1186 LF_CLASS_V1 = 0x0004,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1187 LF_STRUCTURE_V1 = 0x0005,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1188 LF_UNION_V1 = 0x0006,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1189 LF_ENUM_V1 = 0x0007,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1190 LF_PROCEDURE_V1 = 0x0008,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1191 LF_MFUNCTION_V1 = 0x0009,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1192 LF_VTSHAPE_V1 = 0x000A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1193 LF_COBOL0_V1 = 0x000B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1194 LF_COBOL1_V1 = 0x000C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1195 LF_BARRAY_V1 = 0x000D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1196 LF_LABEL_V1 = 0x000E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1197 LF_NULL_V1 = 0x000F,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1198 LF_NOTTRAN_V1 = 0x0010,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1199 LF_DIMARRAY_V1 = 0x0011,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1200 LF_VFTPATH_V1 = 0x0012,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1201 LF_PRECOMP_V1 = 0x0013,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1202 LF_ENDPRECOMP_V1 = 0x0014,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1203 LF_OEM_V1 = 0x0015,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1204 LF_TYPESERVER_V1 = 0x0016,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1205
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1206 LF_MODIFIER_V2 = 0x1001,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1207 LF_POINTER_V2 = 0x1002,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1208 LF_ARRAY_V2 = 0x1003,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1209 LF_CLASS_V2 = 0x1004,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1210 LF_STRUCTURE_V2 = 0x1005,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1211 LF_UNION_V2 = 0x1006,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1212 LF_ENUM_V2 = 0x1007,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1213 LF_PROCEDURE_V2 = 0x1008,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1214 LF_MFUNCTION_V2 = 0x1009,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1215 LF_COBOL0_V2 = 0x100A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1216 LF_BARRAY_V2 = 0x100B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1217 LF_DIMARRAY_V2 = 0x100C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1218 LF_VFTPATH_V2 = 0x100D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1219 LF_PRECOMP_V2 = 0x100E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1220 LF_OEM_V2 = 0x100F,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1221
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1222 // Can be referenced from other type records
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1223 LF_SKIP_V1 = 0x0200,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1224 LF_ARGLIST_V1 = 0x0201,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1225 LF_DEFARG_V1 = 0x0202,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1226 LF_LIST_V1 = 0x0203,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1227 LF_FIELDLIST_V1 = 0x0204,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1228 LF_DERIVED_V1 = 0x0205,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1229 LF_BITFIELD_V1 = 0x0206,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1230 LF_METHODLIST_V1 = 0x0207,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1231 LF_DIMCONU_V1 = 0x0208,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1232 LF_DIMCONLU_V1 = 0x0209,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1233 LF_DIMVARU_V1 = 0x020A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1234 LF_DIMVARLU_V1 = 0x020B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1235 LF_REFSYM_V1 = 0x020C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1236
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1237 LF_SKIP_V2 = 0x1200,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1238 LF_ARGLIST_V2 = 0x1201,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1239 LF_DEFARG_V2 = 0x1202,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1240 LF_FIELDLIST_V2 = 0x1203,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1241 LF_DERIVED_V2 = 0x1204,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1242 LF_BITFIELD_V2 = 0x1205,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1243 LF_METHODLIST_V2 = 0x1206,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1244 LF_DIMCONU_V2 = 0x1207,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1245 LF_DIMCONLU_V2 = 0x1208,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1246 LF_DIMVARU_V2 = 0x1209,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1247 LF_DIMVARLU_V2 = 0x120A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1248
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1249 // Field lists
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1250 LF_BCLASS_V1 = 0x0400,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1251 LF_VBCLASS_V1 = 0x0401,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1252 LF_IVBCLASS_V1 = 0x0402,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1253 LF_ENUMERATE_V1 = 0x0403,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1254 LF_FRIENDFCN_V1 = 0x0404,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1255 LF_INDEX_V1 = 0x0405,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1256 LF_MEMBER_V1 = 0x0406,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1257 LF_STMEMBER_V1 = 0x0407,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1258 LF_METHOD_V1 = 0x0408,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1259 LF_NESTTYPE_V1 = 0x0409,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1260 LF_VFUNCTAB_V1 = 0x040A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1261 LF_FRIENDCLS_V1 = 0x040B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1262 LF_ONEMETHOD_V1 = 0x040C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1263 LF_VFUNCOFF_V1 = 0x040D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1264 LF_NESTTYPEEX_V1 = 0x040E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1265 LF_MEMBERMODIFY_V1 = 0x040F,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1266
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1267 LF_BCLASS_V2 = 0x1400,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1268 LF_VBCLASS_V2 = 0x1401,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1269 LF_IVBCLASS_V2 = 0x1402,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1270 LF_FRIENDFCN_V2 = 0x1403,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1271 LF_INDEX_V2 = 0x1404,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1272 LF_MEMBER_V2 = 0x1405,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1273 LF_STMEMBER_V2 = 0x1406,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1274 LF_METHOD_V2 = 0x1407,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1275 LF_NESTTYPE_V2 = 0x1408,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1276 LF_VFUNCTAB_V2 = 0x1409,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1277 LF_FRIENDCLS_V2 = 0x140A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1278 LF_ONEMETHOD_V2 = 0x140B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1279 LF_VFUNCOFF_V2 = 0x140C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1280 LF_NESTTYPEEX_V2 = 0x140D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1281
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1282 LF_ENUMERATE_V3 = 0x1502,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1283 LF_ARRAY_V3 = 0x1503,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1284 LF_CLASS_V3 = 0x1504,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1285 LF_STRUCTURE_V3 = 0x1505,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1286 LF_UNION_V3 = 0x1506,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1287 LF_ENUM_V3 = 0x1507,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1288 LF_MEMBER_V3 = 0x150D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1289 LF_STMEMBER_V3 = 0x150E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1290 LF_METHOD_V3 = 0x150F,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1291 LF_NESTTYPE_V3 = 0x1510,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1292 LF_ONEMETHOD_V3 = 0x1511,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1293
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1294 // Numeric leaf types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1295 LF_NUMERIC = 0x8000,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1296 LF_CHAR = 0x8000,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1297 LF_SHORT = 0x8001,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1298 LF_USHORT = 0x8002,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1299 LF_LONG = 0x8003,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1300 LF_ULONG = 0x8004,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1301 LF_REAL32 = 0x8005,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1302 LF_REAL64 = 0x8006,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1303 LF_REAL80 = 0x8007,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1304 LF_REAL128 = 0x8008,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1305 LF_QUADWORD = 0x8009,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1306 LF_UQUADWORD = 0x800A,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1307 LF_REAL48 = 0x800B,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1308 LF_COMPLEX32 = 0x800C,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1309 LF_COMPLEX64 = 0x800D,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1310 LF_COMPLEX80 = 0x800E,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1311 LF_COMPLEX128 = 0x800F,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1312 LF_VARSTRING = 0x8010,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1313 LF_DCHAR = 0x8011
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1314 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1315
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1316 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1317 Global types header
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1318 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1319 struct CV_GLOBALTYPES {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1320 ubyte[3] unused;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1321 ubyte flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1322 uint nTypes;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1323 //uint[1] typeOffsets;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1324 //CV_TYPE[1] types;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1325
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1326 /// array of offsets to CV_TYPE records
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1327 uint* typeOffsets() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1328 return cast(uint*)(&nTypes + 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1329 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1330
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1331 // Get the first CV_TYPE record
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1332 CV_TYPE* types() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1333 return cast(CV_TYPE*)(cast(void*)(&nTypes + 1) + nTypes * uint.sizeof);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1334 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1335 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1336
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1337 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1338 Type variant record
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1339 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1340 struct CV_TYPE {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1341 OMF_HEADER header;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1342 union {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1343 // Types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1344 CV_MODIFIER_V1 modifier_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1345 CV_MODIFIER_V2 modifier_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1346 CV_POINTER_V1 pointer_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1347 CV_POINTER_V2 pointer_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1348 CV_ARRAY_V1 array_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1349 CV_ARRAY_V2 array_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1350 CV_STRUCT_V1 struct_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1351 CV_STRUCT_V2 struct_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1352 CV_UNION_V1 union_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1353 CV_UNION_V2 union_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1354 CV_ENUM_V1 enum_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1355 CV_ENUM_V2 enum_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1356 CV_PROCEDURE_V1 proc_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1357 CV_PROCEDURE_V2 proc_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1358 CV_MFUNCTION_V1 method_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1359 CV_MFUNCTION_V2 method_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1360 CV_OEM_V1 oem_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1361 CV_OEM_V2 oem_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1362
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1363 // Referenced types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1364 CV_FIELDLIST fieldlist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1365 CV_BITFIELD_V1 bitfield_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1366 CV_BITFIELD_V2 bitfield_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1367 CV_ARGLIST_V1 arglist_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1368 CV_ARGLIST_V2 arglist_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1369 CV_DERIVED_V1 derived_v1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1370 CV_DERIVED_V2 derived_v2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1371
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1372 // Field types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1373 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1374 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1375
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1376 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1377 Modifier type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1378 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1379 struct CV_MODIFIER_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1380 ushort attribute;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1381 ushort type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1382 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1383 struct CV_MODIFIER_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1384 uint type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1385 ushort attribute;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1386 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1387
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1388 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1389 Pointer type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1390 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1391 struct CV_POINTER_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1392 ushort attribute;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1393 ushort type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1394 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1395 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1396 struct CV_POINTER_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1397 uint type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1398 uint attribute;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1399 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1400 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1401
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1402 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1403 Array type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1404 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1405 struct CV_ARRAY_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1406 ushort elemType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1407 ushort indexType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1408 ushort length; /// numeric leaf
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1409 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1410 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1411 struct CV_ARRAY_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1412 uint elemType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1413 uint indexType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1414 ushort length; /// numeric leaf
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1415 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1416 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1417
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1418 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1419 Struct type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1420 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1421 struct CV_STRUCT_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1422 ushort nElement;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1423 ushort fieldlist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1424 ushort property;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1425 ushort derived;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1426 ushort vshape;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1427 ushort length; /// numeric leaf
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1428 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1429 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1430 struct CV_STRUCT_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1431 ushort nElement;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1432 ushort property;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1433 uint fieldlist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1434 uint derived;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1435 uint vshape;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1436 ushort length; /// numeric leaf
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1437 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1438 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1439
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1440 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1441 Union type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1442 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1443 struct CV_UNION_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1444 ushort count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1445 ushort fieldlist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1446 ushort property;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1447 ushort length; /// numeric leaf
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1448 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1449 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1450 struct CV_UNION_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1451 ushort count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1452 ushort property;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1453 uint fieldlist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1454 ushort length; /// numeric leaf
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1455 OMF_NAME name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1456 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1457
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1458 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1459 Enumeration type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1460 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1461 struct CV_ENUM_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1462 ushort length;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1463 ushort id;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1464 ushort count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1465 ushort type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1466 ushort fieldlist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1467 ushort property;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1468 OMF_NAME p_name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1469 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1470 struct CV_ENUM_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1471 ushort length;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1472 ushort id;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1473 ushort count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1474 ushort property;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1475 uint type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1476 uint fieldlist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1477 OMF_NAME p_name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1478 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1479
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1480 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1481 Procedure type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1482 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1483 struct CV_PROCEDURE_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1484 ushort retType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1485 ubyte call;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1486 ubyte reserved;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1487 ushort nParams;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1488 ushort argList;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1489 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1490 struct CV_PROCEDURE_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1491 uint retType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1492 ubyte call;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1493 ubyte reserved;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1494 ushort nParams;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1495 uint argList;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1496 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1497
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1498 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1499 Method type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1500 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1501 struct CV_MFUNCTION_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1502 ushort retType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1503 ushort classType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1504 ushort thisType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1505 ubyte call;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1506 ubyte reserved;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1507 ushort nParams;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1508 ushort arglist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1509 uint thisAdjust;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1510 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1511 struct CV_MFUNCTION_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1512 uint retType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1513 uint classType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1514 uint thisType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1515 ubyte call;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1516 ubyte reserved;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1517 ushort nParams;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1518 uint arglist;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1519 uint thisAdjust;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1520 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1521
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1522 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1523 OEM type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1524 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1525 struct CV_OEM_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1526 ushort oem;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1527 ushort rec;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1528 ushort nIndices;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1529 //ushort[1] indices;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1530
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1531 ushort* indices() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1532 return cast(ushort*)(&nIndices + 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1533 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1534 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1535 struct CV_OEM_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1536 // UNKNOWN!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1537 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1538
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1539 enum {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1540 OEM_DIGITALMARS = 0x0042,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1541 D_DYN_ARRAY = 0x0001,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1542 D_ASSOC_ARRAY = 0x0002,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1543 D_DELEGATE = 0x0003
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1544 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1545
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1546 struct CV_D_DYNARRAY {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1547 ushort indexType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1548 ushort elemType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1549 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1550
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1551 struct CV_D_ASSOCARRAY {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1552 ushort keyType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1553 ushort elemType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1554 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1555
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1556 struct CV_D_DELEGATE {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1557 ushort thisType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1558 ushort funcType;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1559 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1560
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1561 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1562 Field list
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1563 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1564 struct CV_FIELDLIST {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1565 ubyte[1] list;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1566 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1567
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1568 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1569 Bit field
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1570 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1571 struct CV_BITFIELD_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1572 ubyte nBits;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1573 ubyte bitOffset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1574 ushort type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1575 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1576 struct CV_BITFIELD_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1577 uint type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1578 ubyte nBits;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1579 ubyte bitOffset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1580 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1581
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1582 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1583 Arguments list
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1584 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1585 struct CV_ARGLIST_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1586 ushort count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1587 ushort[1] args;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1588 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1589 struct CV_ARGLIST_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1590 uint count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1591 uint[1] args;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1592 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1593
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1594 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1595 Derived
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1596 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1597 struct CV_DERIVED_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1598 ushort count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1599 ushort[1] derivedClasses;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1600 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1601 struct CV_DERIVED_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1602 uint count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1603 uint[1] derivedClasses;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1604 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1605
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1606 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1607 Class type
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1608 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1609 struct CV_CLASS_V1 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1610 ushort type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1611 ushort attribute;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1612 ushort offset; /// numeric leaf
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1613 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1614 struct CV_CLASS_V2 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1615 ushort attribute;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1616 uint type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1617 ushort offset; /// numeric leaf
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1618 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1619
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1620 struct CvTypeClass {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1621 ushort count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1622 ushort fieldList;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1623 ushort flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1624 ushort dList;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1625 ushort vShape;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1626 // length
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1627 // name
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1628 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1629
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1630 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1631 // sstSegMap
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1632 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1633
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1634 struct CV_SEGMAP {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1635 ushort total;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1636 ushort logical;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1637 //CV_SEGMAPDESC[1] descriptors;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1638
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1639 CV_SEGMAPDESC* descriptors() const {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1640 return cast(CV_SEGMAPDESC*)(&logical + 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1641 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1642 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1643
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1644 struct CV_SEGMAPDESC {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1645 ushort flags;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1646 ushort overlay;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1647 ushort group;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1648 ushort frame;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1649 ushort name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1650 ushort className;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1651 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1652 uint size;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1653 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1654
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1655 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1656 // sstPreCompMap
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1657 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1658
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1659 struct OMFPreCompMap {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1660 ushort FirstType; // first precompiled type index
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1661 ushort cTypes; // number of precompiled types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1662 uint signature; // precompiled types signature
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1663 ushort padding;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1664 //CV_typ_t[] map; // mapping of precompiled types
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1665 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1666
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1667 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1668 // sstOffsetMap16, sstOffsetMap32
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1669 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1670
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1671 struct OMFOffsetMap16 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1672 uint csegment; // Count of physical segments
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1673
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1674 // The next six items are repeated for each segment
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1675
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1676 //uint crangeLog; // Count of logical offset ranges
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1677 //ushort[] rgoffLog; // Array of logical offsets
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1678 //short[] rgbiasLog; // Array of logical->physical bias
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1679 //uint crangePhys; // Count of physical offset ranges
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1680 //ushort[] rgoffPhys; // Array of physical offsets
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1681 //short[] rgbiasPhys; // Array of physical->logical bias
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1682 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1683
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1684 struct OMFOffsetMap32 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1685 uint csection; // Count of physical sections
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1686
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1687 // The next six items are repeated for each section
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1688
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1689 //uint crangeLog; // Count of logical offset ranges
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1690 //uint[] rgoffLog; // Array of logical offsets
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1691 //int[] rgbiasLog; // Array of logical->physical bias
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1692 //uint crangePhys; // Count of physical offset ranges
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1693 //uint[] rgoffPhys; // Array of physical offsets
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1694 //int[] rgbiasPhys; // Array of physical->logical bias
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1695 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1696
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1697 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1698 // sstFileIndex
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1699 // ----------------------------------------------------------------------------
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1700
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1701 struct OMFFileIndex {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1702 ushort cmodules; // Number of modules
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1703 ushort cfilerefs; // Number of file references
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1704 //ushort[] modulelist; // Index to beginning of list of files
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1705 // for module i. (0 for module w/o files)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1706 //ushort[] cfiles; // Number of file names associated
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1707 // with module i.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1708 //uint[] ulNames; // Offsets from the beginning of this
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1709 // table to the file names
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1710 //char[] Names; // The length prefixed names of files
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1711 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1712
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1713 struct OMFMpcDebugInfo {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1714 ushort cSeg; // number of segments in module
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1715 //ushort[] mpSegFrame; // map seg (zero based) to frame
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1716 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1717
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1718
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1719
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1720
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1721
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1722
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1723
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1724 // Procedure flags
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1725 enum {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1726 PROC_FPO = 1 << 0, // Frame pointer omitted
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1727 PROC_INTERRUPT = 1 << 1, // Interrupt
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1728 PROC_RETURN = 1 << 2, // Far return
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1729 PROC_NEVER = 1 << 3, // Never returns
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1730 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1731
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1732 // Procedure calling conventions
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1733 enum {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1734 CALL_C_NEAR = 0x00,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1735 CALL_C_FAR = 0x01,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1736 CALL_PASCAL_NEAR = 0x02,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1737 CALL_PASCAL_FAR = 0x03,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1738 CALL_FASTCALL_NEAR = 0x04,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1739 CALL_FASTCALL_FAR = 0x05,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1740 CALL_STDCALL_NEAR = 0x07,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1741 CALL_STDCALL_FAR = 0x08,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1742 CALL_SYSCALL_NEAR = 0x09,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1743 CALL_SYSCALL_FAR = 0x10,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1744 CALL_THIS = 0x11,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1745 CALL_MIPS = 0x12,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1746 CALL_GENERIC = 0x13
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1747 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1748
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1749 enum {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1750 STRUCT_PACKED = 1 << 0,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1751 STRUCT_CTOR = 1 << 1,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1752 STRUCT_OVERLOADS = 1 << 2,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1753 STRUCT_IS_NESTED = 1 << 3,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1754 STRUCT_HAS_NESTED = 1 << 4,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1755 STRUCT_OPASSIGN = 1 << 5,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1756 STRUCT_OPCAST = 1 << 6,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1757 STRUCT_FWDREF = 1 << 7,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1758 STRUCT_SCOPED = 1 << 8
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1759 }