0
|
1 /*
|
|
2 * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
|
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
4 *
|
|
5 * This code is free software; you can redistribute it and/or modify it
|
|
6 * under the terms of the GNU General Public License version 2 only, as
|
|
7 * published by the Free Software Foundation.
|
|
8 *
|
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT
|
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
12 * version 2 for more details (a copy is included in the LICENSE file that
|
|
13 * accompanied this code).
|
|
14 *
|
|
15 * You should have received a copy of the GNU General Public License version
|
|
16 * 2 along with this work; if not, write to the Free Software Foundation,
|
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18 *
|
|
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
|
20 * CA 95054 USA or visit www.sun.com if you need additional information or
|
|
21 * have any questions.
|
|
22 *
|
|
23 */
|
|
24
|
|
25 package sun.jvm.hotspot.debugger.win32.coff;
|
|
26
|
|
27 /** Various enumerated values used in type leaves */
|
|
28
|
|
29 public interface DebugVC50TypeEnums {
|
|
30 /** LF_MODIFIER attributes */
|
|
31 public static final int MODIFIER_CONST_MASK = 0x01;
|
|
32 public static final int MODIFIER_VOLATILE_MASK = 0x02;
|
|
33 public static final int MODIFIER_UNALIGNED_MASK = 0x04;
|
|
34
|
|
35 /** LF_POINTER bitfields */
|
|
36 // FIXME: verify these are correct
|
|
37 // ptrtype field
|
|
38 public static final int POINTER_PTRTYPE_MASK = 0x0000001F;
|
|
39 public static final int POINTER_PTRTYPE_SHIFT = 0;
|
|
40 public static final int POINTER_PTRTYPE_NEAR = 0;
|
|
41 public static final int POINTER_PTRTYPE_FAR = 1;
|
|
42 public static final int POINTER_PTRTYPE_HUGE = 2;
|
|
43 /** Obsolete */
|
|
44 public static final int POINTER_PTRTYPE_BASED_ON_SEGMENT = 3;
|
|
45 public static final int POINTER_PTRTYPE_BASED_ON_VALUE = 4;
|
|
46 /** Obsolete */
|
|
47 public static final int POINTER_PTRTYPE_BASED_ON_SEGMENT_OF_VALUE = 5;
|
|
48 /** Obsolete */
|
|
49 public static final int POINTER_PTRTYPE_BASED_ON_ADDRESS_OF_SYMBOL = 6;
|
|
50 /** Obsolete */
|
|
51 public static final int POINTER_PTRTYPE_BASED_ON_SEGMENT_OF_SYMBOL_ADDRESS = 7;
|
|
52 public static final int POINTER_PTRTYPE_BASED_ON_TYPE = 8;
|
|
53 /** Obsolete */
|
|
54 public static final int POINTER_PTRTYPE_BASED_ON_SELF = 9;
|
|
55 public static final int POINTER_PTRTYPE_NEAR_32_BIT = 10;
|
|
56 public static final int POINTER_PTRTYPE_FAR_32_BIT = 11;
|
|
57 public static final int POINTER_PTRTYPE_64_BIT = 12;
|
|
58
|
|
59 // ptrmode field
|
|
60 // FIXME: verify these are correct
|
|
61 public static final int POINTER_PTRMODE_MASK = 0x000000E0;
|
|
62 public static final int POINTER_PTRMODE_SHIFT = 5;
|
|
63 public static final int POINTER_PTRMODE_POINTER = 0;
|
|
64 public static final int POINTER_PTRMODE_REFERENCE = 1;
|
|
65 public static final int POINTER_PTRMODE_PTR_TO_DATA_MEMBER = 2;
|
|
66 public static final int POINTER_PTRMODE_PTR_TO_METHOD = 3;
|
|
67
|
|
68 // FIXME: verify this is correct
|
|
69 public static final int POINTER_ISFLAT32_MASK = 0x00000100;
|
|
70
|
|
71 // FIXME: verify this is correct
|
|
72 public static final int POINTER_VOLATILE_MASK = 0x00000200;
|
|
73
|
|
74 // FIXME: verify this is correct
|
|
75 public static final int POINTER_CONST_MASK = 0x00000400;
|
|
76
|
|
77 // FIXME: verify this is correct
|
|
78 public static final int POINTER_UNALIGNED_MASK = 0x00000800;
|
|
79
|
|
80 // FIXME: verify this is correct
|
|
81 public static final int POINTER_RESTRICT_MASK = 0x00001000;
|
|
82
|
|
83 /** <p> 16:32 data for classes with or without virtual functions and
|
|
84 no virtual bases. Pointer layout is: </p>
|
|
85
|
|
86 <p>
|
|
87 <table width = "15%">
|
|
88 <tr> <td> 4
|
|
89 <tr> <td> mdisp
|
|
90 </table>
|
|
91 </p>
|
|
92
|
|
93 <p>
|
|
94 <i>mdisp</i>: displacement to data
|
|
95 </p>
|
|
96
|
|
97 <p>
|
|
98 NULL value is 0x80000000.
|
|
99 </p>
|
|
100 */
|
|
101 public static final short PTR_FORMAT_DATA_NVF_NVB = (short) 3;
|
|
102
|
|
103 /** <p> 16:32 data for class with virtual bases. Pointer layout is:</p>
|
|
104
|
|
105 <p>
|
|
106 <table width = "45%">
|
|
107 <tr> <td> 4 <td> 4 <td> 4
|
|
108 <tr> <td> mdisp <td> pdisp> <td> vdisp
|
|
109 </table>
|
|
110 </p>
|
|
111
|
|
112 <p>
|
|
113 <i>mdisp</i>: displacement to data
|
|
114 </p>
|
|
115
|
|
116 <p>
|
|
117 <i>pdisp</i>: <b>this</b> pointer displacement to virtual base table pointer
|
|
118 </p>
|
|
119
|
|
120 <p>
|
|
121 <i>vdisp</i>: displacement within virtual base table
|
|
122 </p>
|
|
123
|
|
124 <p>
|
|
125 NULL value is (*,*,0xffffffff).
|
|
126 </p>
|
|
127 */
|
|
128 public static final short PTR_FORMAT_DATA_VB = (short) 4;
|
|
129
|
|
130 /** <p> 16:32 method nonvirtual bases with single address point.
|
|
131 Pointer layout is: </p>
|
|
132
|
|
133 <p>
|
|
134 <table width = "15%">
|
|
135 <tr> <td> 4
|
|
136 <tr> <td> off
|
|
137 </table>
|
|
138 </p>
|
|
139
|
|
140 <p>
|
|
141 <i>off</i>: offset of function
|
|
142 </p>
|
|
143
|
|
144 <p>
|
|
145 NULL value is 0L.
|
|
146 </p>
|
|
147 */
|
|
148 public static final short PTR_FORMAT_METHOD_NVB_SAP = (short) 11;
|
|
149
|
|
150 /** <p> 16:32 method nonvirtual bases with multiple address points.
|
|
151 Pointer layout is: </p>
|
|
152
|
|
153 <p>
|
|
154 <table width = "30%">
|
|
155 <tr> <td> 4 <td> 4
|
|
156 <tr> <td> off <td> disp
|
|
157 </table>
|
|
158 </p>
|
|
159
|
|
160 <p>
|
|
161 <i>off</i>: offset of function
|
|
162 </p>
|
|
163
|
|
164 <p>
|
|
165 <i>disp</i>: displacement of address point.
|
|
166 </p>
|
|
167
|
|
168 <p>
|
|
169 NULL value is (0L : 0L).
|
|
170 </p>
|
|
171 */
|
|
172 public static final short PTR_FORMAT_METHOD_NVB_MAP = (short) 12;
|
|
173
|
|
174 /** <p> 16:32 method with virtual bases. Pointer layout is: </p>
|
|
175
|
|
176 <p>
|
|
177 <table width = "60%">
|
|
178 <tr> <td> 4 <td> 4 <td> 4 <td> 4
|
|
179 <tr> <td> off <td> mdisp <td> pdisp <td> vdisp
|
|
180 </table>
|
|
181 </p>
|
|
182
|
|
183 <p>
|
|
184 <i>off</i>: offset of function
|
|
185 </p>
|
|
186
|
|
187 <p>
|
|
188 <i>mdisp</i>: displacement to data
|
|
189 </p>
|
|
190
|
|
191 <p>
|
|
192 <i>pdisp</i>: <b>this</b> pointer displacement to virtual base
|
|
193 table pointer
|
|
194 </p>
|
|
195
|
|
196 <p>
|
|
197 <i>vdisp</i>: displacement within virtual base table
|
|
198 </p>
|
|
199
|
|
200 NULL value is (0L, *, *, *).
|
|
201 */
|
|
202 public static final short PTR_FORMAT_METHOD_VB = (short) 13;
|
|
203
|
|
204 /** Class, structure, union, and enum properties */
|
|
205 // FIXME: verify these are correct
|
|
206 /** Structure is packed */
|
|
207 public static final short PROPERTY_PACKED = (short) 0x001;
|
|
208 /** Class has constructors and/or destructors */
|
|
209 public static final short PROPERTY_CTOR = (short) 0x002;
|
|
210 /** Class has overloaded operators */
|
|
211 public static final short PROPERTY_OVEROPS = (short) 0x004;
|
|
212 /** Class is a nested class */
|
|
213 public static final short PROPERTY_ISNESTED = (short) 0x008;
|
|
214 /** Class contains nested classes */
|
|
215 public static final short PROPERTY_CNESTED = (short) 0x010;
|
|
216 /** Class has overloaded assignment */
|
|
217 public static final short PROPERTY_OPASSIGN = (short) 0x020;
|
|
218 /** Class has casting methods */
|
|
219 public static final short PROPERTY_OPCAST = (short) 0x040;
|
|
220 /** Class/structure is a forward (incomplete) reference */
|
|
221 public static final short PROPERTY_FWDREF = (short) 0x080;
|
|
222 /** This is a scoped definition */
|
|
223 public static final short PROPERTY_SCOPED = (short) 0x100;
|
|
224
|
|
225 /** Calling conventions */
|
|
226 /** Arguments pushed right to left, caller pops arguments. */
|
|
227 public static final byte CALLCONV_NEAR_C = (byte) 0;
|
|
228 public static final byte CALLCONV_FAR_C = (byte) 1;
|
|
229 public static final byte CALLCONV_NEAR_PASCAL = (byte) 2;
|
|
230 /** Arguments pushed left to right, callee pops arguments. */
|
|
231 public static final byte CALLCONV_FAR_PASCAL = (byte) 3;
|
|
232 public static final byte CALLCONV_NEAR_FASTCALL = (byte) 4;
|
|
233 public static final byte CALLCONV_FAR_FASTCALL = (byte) 5;
|
|
234 public static final byte CALLCONV_RESERVED = (byte) 6;
|
|
235 public static final byte CALLCONV_NEAR_STDCALL = (byte) 7;
|
|
236 public static final byte CALLCONV_FAR_STDCALL = (byte) 8;
|
|
237 public static final byte CALLCONV_NEAR_SYSCALL = (byte) 9;
|
|
238 public static final byte CALLCONV_FAR_SYSCALL = (byte) 10;
|
|
239 public static final byte CALLCONV_THIS_CALL = (byte) 11;
|
|
240 public static final byte CALLCONV_MIPS_CALL = (byte) 12;
|
|
241 public static final byte CALLCONV_GENERIC = (byte) 13;
|
|
242
|
|
243 /** vtable entry descriptors */
|
|
244 public static final int VTENTRY_NEAR = 0;
|
|
245 public static final int VTENTRY_FAR = 1;
|
|
246 public static final int VTENTRY_THIN = 2;
|
|
247 /** Address point displacement to outermost class. This is at
|
|
248 entry[-1] from table address. */
|
|
249 public static final int VTENTRY_ADDRESS_PT_DISP = 3;
|
|
250 /** Far pointer to metaclass descriptor. This is at entry[-2] from
|
|
251 table address. */
|
|
252 public static final int VTENTRY_FAR_PTR_TO_METACLASS = 4;
|
|
253 public static final int VTENTRY_NEAR_32 = 5;
|
|
254 public static final int VTENTRY_FAR_32 = 6;
|
|
255
|
|
256 /** Label addressing modes */
|
|
257 public static final short LABEL_ADDR_MODE_NEAR = (short) 0;
|
|
258 public static final short LABEL_ADDR_MODE_FAR = (short) 4;
|
|
259
|
|
260 //
|
|
261 // Primitive/reserved type enumerations
|
|
262 //
|
|
263
|
|
264 // FIXME: verify these are correct
|
|
265 // Type field
|
|
266 public static final int RESERVED_TYPE_MASK = 0x070;
|
|
267 public static final int RESERVED_TYPE_SPECIAL = 0x000;
|
|
268 public static final int RESERVED_TYPE_SIGNED_INT = 0x010;
|
|
269 public static final int RESERVED_TYPE_UNSIGNED_INT = 0x020;
|
|
270 public static final int RESERVED_TYPE_BOOLEAN = 0x030;
|
|
271 public static final int RESERVED_TYPE_REAL = 0x040;
|
|
272 public static final int RESERVED_TYPE_COMPLEX = 0x050;
|
|
273 public static final int RESERVED_TYPE_SPECIAL2 = 0x060;
|
|
274 public static final int RESERVED_TYPE_REALLY_INT = 0x070;
|
|
275
|
|
276 // Mode field
|
|
277 public static final int RESERVED_MODE_MASK = 0x700;
|
|
278 public static final int RESERVED_MODE_DIRECT = 0x000;
|
|
279 public static final int RESERVED_MODE_NEAR_PTR = 0x100;
|
|
280 public static final int RESERVED_MODE_FAR_PTR = 0x200;
|
|
281 public static final int RESERVED_MODE_HUGE_PTR = 0x300;
|
|
282 public static final int RESERVED_MODE_NEAR_32_PTR = 0x400;
|
|
283 public static final int RESERVED_MODE_FAR_32_PTR = 0x500;
|
|
284 public static final int RESERVED_MODE_NEAR_64_PTR = 0x600;
|
|
285
|
|
286 // Size field for each of the types above.
|
|
287 // Has different meanings based on type.
|
|
288 public static final int RESERVED_SIZE_MASK = 0x7;
|
|
289 // Special type
|
|
290 public static final int RESERVED_SIZE_SPECIAL_NO_TYPE = 0x0;
|
|
291 public static final int RESERVED_SIZE_SPECIAL_ABSOLUTE_SYMBOL = 0x1;
|
|
292 public static final int RESERVED_SIZE_SPECIAL_SEGMENT = 0x2;
|
|
293 public static final int RESERVED_SIZE_SPECIAL_VOID = 0x3;
|
|
294 public static final int RESERVED_SIZE_SPECIAL_BASIC_8_BYTE = 0x4;
|
|
295 public static final int RESERVED_SIZE_SPECIAL_NEAR_BASIC_STRING = 0x5;
|
|
296 public static final int RESERVED_SIZE_SPECIAL_FAR_BASIC_STRING = 0x6;
|
|
297 public static final int RESERVED_SIZE_SPECIAL_UNTRANSLATED = 0x7;
|
|
298 // Signed, unsigned and boolean types
|
|
299 public static final int RESERVED_SIZE_INT_1_BYTE = 0x0;
|
|
300 public static final int RESERVED_SIZE_INT_2_BYTE = 0x1;
|
|
301 public static final int RESERVED_SIZE_INT_4_BYTE = 0x2;
|
|
302 public static final int RESERVED_SIZE_INT_8_BYTE = 0x3;
|
|
303 // Real and complex types
|
|
304 public static final int RESERVED_SIZE_REAL_32_BIT = 0x0;
|
|
305 public static final int RESERVED_SIZE_REAL_64_BIT = 0x1;
|
|
306 public static final int RESERVED_SIZE_REAL_80_BIT = 0x2;
|
|
307 public static final int RESERVED_SIZE_REAL_128_BIT = 0x3;
|
|
308 public static final int RESERVED_SIZE_REAL_48_BIT = 0x4;
|
|
309 // Special2 type
|
|
310 public static final int RESERVED_SIZE_SPECIAL2_BIT = 0x0;
|
|
311 public static final int RESERVED_SIZE_SPECIAL2_PASCAL_CHAR = 0x1;
|
|
312 // Really int type
|
|
313 public static final int RESERVED_SIZE_REALLY_INT_CHAR = 0x0;
|
|
314 public static final int RESERVED_SIZE_REALLY_INT_WCHAR = 0x1;
|
|
315 public static final int RESERVED_SIZE_REALLY_INT_2_BYTE = 0x2; // 2 byte signed integer
|
|
316 public static final int RESERVED_SIZE_REALLY_INT_2_BYTE_U = 0x3; // 2 byte unsigned integer
|
|
317 public static final int RESERVED_SIZE_REALLY_INT_4_BYTE = 0x4; // 4 byte signed integer
|
|
318 public static final int RESERVED_SIZE_REALLY_INT_4_BYTE_U = 0x5; // 4 byte unsigned integer
|
|
319 public static final int RESERVED_SIZE_REALLY_INT_8_BYTE = 0x6; // 8 byte signed integer
|
|
320 public static final int RESERVED_SIZE_REALLY_INT_8_BYTE_U = 0x7; // 8 byte unsigned integer
|
|
321 }
|