Mercurial > hg > truffle
annotate src/share/vm/runtime/vmStructs.cpp @ 1145:e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
Summary: Autonomic per-worker free block cache sizing, tunable coalition policies, fixes to per-size block statistics, retuned gain and bandwidth of some feedback loop filters to allow quicker reactivity to abrupt changes in ambient demand, and other heuristics to reduce fragmentation of the CMS old gen. Also tightened some assertions, including those related to locking.
Reviewed-by: jmasa
author | ysr |
---|---|
date | Wed, 23 Dec 2009 09:23:54 -0800 |
parents | 873ec3787992 |
children | 547f81740344 4ce7240d622c |
rev | line source |
---|---|
0 | 1 /* |
844 | 2 * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. |
0 | 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 # include "incls/_precompiled.incl" | |
26 # include "incls/_vmStructs.cpp.incl" | |
27 | |
28 // Note: the cross-product of (c1, c2, product, nonproduct, ...), | |
29 // (nonstatic, static), and (unchecked, checked) has not been taken. | |
30 // Only the macros currently needed have been defined. | |
31 | |
32 // A field whose type is not checked is given a null string as the | |
33 // type name, indicating an "opaque" type to the serviceability agent. | |
34 | |
35 // NOTE: there is an interdependency between this file and | |
36 // HotSpotTypeDataBase.java, which parses the type strings. | |
37 | |
38 #ifndef REG_COUNT | |
39 #define REG_COUNT 0 | |
40 #endif | |
41 | |
42 // whole purpose of this function is to work around bug c++/27724 in gcc 4.1.1 | |
43 // with optimization turned on it doesn't affect produced code | |
44 static inline uint64_t cast_uint64_t(size_t x) | |
45 { | |
46 return x; | |
47 } | |
48 | |
49 | |
50 //-------------------------------------------------------------------------------- | |
51 // VM_STRUCTS | |
52 // | |
53 // This list enumerates all of the fields the serviceability agent | |
54 // needs to know about. Be sure to see also the type table below this one. | |
55 // NOTE that there are platform-specific additions to this table in | |
56 // vmStructs_<os>_<cpu>.hpp. | |
57 | |
58 #define VM_STRUCTS(nonstatic_field, \ | |
59 static_field, \ | |
60 unchecked_nonstatic_field, \ | |
61 volatile_nonstatic_field, \ | |
62 nonproduct_nonstatic_field, \ | |
63 c1_nonstatic_field, \ | |
64 c2_nonstatic_field, \ | |
65 unchecked_c1_static_field, \ | |
66 unchecked_c2_static_field, \ | |
67 last_entry) \ | |
68 \ | |
69 /******************************************************************/ \ | |
70 /* OopDesc and Klass hierarchies (NOTE: methodDataOop incomplete) */ \ | |
71 /******************************************************************/ \ | |
72 \ | |
73 volatile_nonstatic_field(oopDesc, _mark, markOop) \ | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
74 volatile_nonstatic_field(oopDesc, _metadata._klass, wideKlassOop) \ |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
75 volatile_nonstatic_field(oopDesc, _metadata._compressed_klass, narrowOop) \ |
0 | 76 static_field(oopDesc, _bs, BarrierSet*) \ |
77 nonstatic_field(arrayKlass, _dimension, int) \ | |
78 nonstatic_field(arrayKlass, _higher_dimension, klassOop) \ | |
79 nonstatic_field(arrayKlass, _lower_dimension, klassOop) \ | |
80 nonstatic_field(arrayKlass, _vtable_len, int) \ | |
81 nonstatic_field(arrayKlass, _alloc_size, juint) \ | |
82 nonstatic_field(arrayKlass, _component_mirror, oop) \ | |
83 nonstatic_field(compiledICHolderKlass, _alloc_size, juint) \ | |
84 nonstatic_field(compiledICHolderOopDesc, _holder_method, methodOop) \ | |
85 nonstatic_field(compiledICHolderOopDesc, _holder_klass, klassOop) \ | |
86 nonstatic_field(constantPoolOopDesc, _tags, typeArrayOop) \ | |
87 nonstatic_field(constantPoolOopDesc, _cache, constantPoolCacheOop) \ | |
88 nonstatic_field(constantPoolOopDesc, _pool_holder, klassOop) \ | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
89 nonstatic_field(constantPoolOopDesc, _length, int) \ |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
90 nonstatic_field(constantPoolCacheOopDesc, _length, int) \ |
0 | 91 nonstatic_field(constantPoolCacheOopDesc, _constant_pool, constantPoolOop) \ |
92 nonstatic_field(instanceKlass, _array_klasses, klassOop) \ | |
93 nonstatic_field(instanceKlass, _methods, objArrayOop) \ | |
94 nonstatic_field(instanceKlass, _method_ordering, typeArrayOop) \ | |
95 nonstatic_field(instanceKlass, _local_interfaces, objArrayOop) \ | |
96 nonstatic_field(instanceKlass, _transitive_interfaces, objArrayOop) \ | |
97 nonstatic_field(instanceKlass, _nof_implementors, int) \ | |
98 nonstatic_field(instanceKlass, _implementors[0], klassOop) \ | |
99 nonstatic_field(instanceKlass, _fields, typeArrayOop) \ | |
100 nonstatic_field(instanceKlass, _constants, constantPoolOop) \ | |
101 nonstatic_field(instanceKlass, _class_loader, oop) \ | |
102 nonstatic_field(instanceKlass, _protection_domain, oop) \ | |
103 nonstatic_field(instanceKlass, _signers, objArrayOop) \ | |
104 nonstatic_field(instanceKlass, _source_file_name, symbolOop) \ | |
105 nonstatic_field(instanceKlass, _source_debug_extension, symbolOop) \ | |
106 nonstatic_field(instanceKlass, _inner_classes, typeArrayOop) \ | |
107 nonstatic_field(instanceKlass, _nonstatic_field_size, int) \ | |
108 nonstatic_field(instanceKlass, _static_field_size, int) \ | |
109 nonstatic_field(instanceKlass, _static_oop_field_size, int) \ | |
110 nonstatic_field(instanceKlass, _nonstatic_oop_map_size, int) \ | |
975 | 111 nonstatic_field(instanceKlass, _is_marked_dependent, bool) \ |
0 | 112 nonstatic_field(instanceKlass, _minor_version, u2) \ |
113 nonstatic_field(instanceKlass, _major_version, u2) \ | |
114 nonstatic_field(instanceKlass, _init_state, instanceKlass::ClassState) \ | |
115 nonstatic_field(instanceKlass, _init_thread, Thread*) \ | |
116 nonstatic_field(instanceKlass, _vtable_len, int) \ | |
117 nonstatic_field(instanceKlass, _itable_len, int) \ | |
118 nonstatic_field(instanceKlass, _reference_type, ReferenceType) \ | |
119 volatile_nonstatic_field(instanceKlass, _oop_map_cache, OopMapCache*) \ | |
120 nonstatic_field(instanceKlass, _jni_ids, JNIid*) \ | |
121 nonstatic_field(instanceKlass, _osr_nmethods_head, nmethod*) \ | |
122 nonstatic_field(instanceKlass, _breakpoints, BreakpointInfo*) \ | |
123 nonstatic_field(instanceKlass, _generic_signature, symbolOop) \ | |
124 nonstatic_field(instanceKlass, _methods_jmethod_ids, jmethodID*) \ | |
125 nonstatic_field(instanceKlass, _methods_cached_itable_indices, int*) \ | |
126 volatile_nonstatic_field(instanceKlass, _idnum_allocated_count, u2) \ | |
127 nonstatic_field(instanceKlass, _class_annotations, typeArrayOop) \ | |
128 nonstatic_field(instanceKlass, _fields_annotations, objArrayOop) \ | |
129 nonstatic_field(instanceKlass, _methods_annotations, objArrayOop) \ | |
130 nonstatic_field(instanceKlass, _methods_parameter_annotations, objArrayOop) \ | |
131 nonstatic_field(instanceKlass, _methods_default_annotations, objArrayOop) \ | |
132 nonstatic_field(Klass, _super_check_offset, juint) \ | |
133 nonstatic_field(Klass, _secondary_super_cache, klassOop) \ | |
134 nonstatic_field(Klass, _secondary_supers, objArrayOop) \ | |
135 nonstatic_field(Klass, _primary_supers[0], klassOop) \ | |
136 nonstatic_field(Klass, _java_mirror, oop) \ | |
137 nonstatic_field(Klass, _modifier_flags, jint) \ | |
138 nonstatic_field(Klass, _super, klassOop) \ | |
139 nonstatic_field(Klass, _layout_helper, jint) \ | |
140 nonstatic_field(Klass, _name, symbolOop) \ | |
141 nonstatic_field(Klass, _access_flags, AccessFlags) \ | |
142 nonstatic_field(Klass, _subklass, klassOop) \ | |
143 nonstatic_field(Klass, _next_sibling, klassOop) \ | |
144 nonproduct_nonstatic_field(Klass, _verify_count, int) \ | |
145 nonstatic_field(Klass, _alloc_count, juint) \ | |
146 nonstatic_field(klassKlass, _alloc_size, juint) \ | |
147 nonstatic_field(methodKlass, _alloc_size, juint) \ | |
148 nonstatic_field(methodDataOopDesc, _size, int) \ | |
149 nonstatic_field(methodDataOopDesc, _method, methodOop) \ | |
150 nonstatic_field(methodOopDesc, _constMethod, constMethodOop) \ | |
151 nonstatic_field(methodOopDesc, _constants, constantPoolOop) \ | |
152 c2_nonstatic_field(methodOopDesc, _method_data, methodDataOop) \ | |
153 c2_nonstatic_field(methodOopDesc, _interpreter_invocation_count, int) \ | |
154 nonstatic_field(methodOopDesc, _access_flags, AccessFlags) \ | |
155 nonstatic_field(methodOopDesc, _vtable_index, int) \ | |
156 nonstatic_field(methodOopDesc, _method_size, u2) \ | |
157 nonstatic_field(methodOopDesc, _max_stack, u2) \ | |
158 nonstatic_field(methodOopDesc, _max_locals, u2) \ | |
159 nonstatic_field(methodOopDesc, _size_of_parameters, u2) \ | |
160 c2_nonstatic_field(methodOopDesc, _interpreter_throwout_count, u2) \ | |
161 nonstatic_field(methodOopDesc, _number_of_breakpoints, u2) \ | |
162 nonstatic_field(methodOopDesc, _invocation_counter, InvocationCounter) \ | |
163 nonstatic_field(methodOopDesc, _backedge_counter, InvocationCounter) \ | |
164 nonproduct_nonstatic_field(methodOopDesc, _compiled_invocation_count, int) \ | |
165 volatile_nonstatic_field(methodOopDesc, _code, nmethod*) \ | |
166 nonstatic_field(methodOopDesc, _i2i_entry, address) \ | |
167 nonstatic_field(methodOopDesc, _adapter, AdapterHandlerEntry*) \ | |
168 volatile_nonstatic_field(methodOopDesc, _from_compiled_entry, address) \ | |
169 volatile_nonstatic_field(methodOopDesc, _from_interpreted_entry, address) \ | |
170 volatile_nonstatic_field(constMethodOopDesc, _fingerprint, uint64_t) \ | |
171 nonstatic_field(constMethodOopDesc, _method, methodOop) \ | |
172 nonstatic_field(constMethodOopDesc, _stackmap_data, typeArrayOop) \ | |
173 nonstatic_field(constMethodOopDesc, _exception_table, typeArrayOop) \ | |
174 nonstatic_field(constMethodOopDesc, _constMethod_size, int) \ | |
175 nonstatic_field(constMethodOopDesc, _interpreter_kind, jbyte) \ | |
176 nonstatic_field(constMethodOopDesc, _flags, jbyte) \ | |
177 nonstatic_field(constMethodOopDesc, _code_size, u2) \ | |
178 nonstatic_field(constMethodOopDesc, _name_index, u2) \ | |
179 nonstatic_field(constMethodOopDesc, _signature_index, u2) \ | |
180 nonstatic_field(constMethodOopDesc, _method_idnum, u2) \ | |
181 nonstatic_field(constMethodOopDesc, _generic_signature_index, u2) \ | |
182 nonstatic_field(objArrayKlass, _element_klass, klassOop) \ | |
183 nonstatic_field(objArrayKlass, _bottom_klass, klassOop) \ | |
184 nonstatic_field(symbolKlass, _alloc_size, juint) \ | |
185 nonstatic_field(symbolOopDesc, _length, unsigned short) \ | |
186 unchecked_nonstatic_field(symbolOopDesc, _body, sizeof(jbyte)) /* NOTE: no type */ \ | |
187 nonstatic_field(typeArrayKlass, _max_length, int) \ | |
188 \ | |
189 /***********************/ \ | |
190 /* Constant Pool Cache */ \ | |
191 /***********************/ \ | |
192 \ | |
193 volatile_nonstatic_field(ConstantPoolCacheEntry, _indices, intx) \ | |
194 volatile_nonstatic_field(ConstantPoolCacheEntry, _f1, oop) \ | |
195 volatile_nonstatic_field(ConstantPoolCacheEntry, _f2, intx) \ | |
196 volatile_nonstatic_field(ConstantPoolCacheEntry, _flags, intx) \ | |
197 \ | |
198 /********************************/ \ | |
199 /* MethodOop-related structures */ \ | |
200 /********************************/ \ | |
201 \ | |
202 nonstatic_field(CheckedExceptionElement, class_cp_index, u2) \ | |
203 nonstatic_field(LocalVariableTableElement, start_bci, u2) \ | |
204 nonstatic_field(LocalVariableTableElement, length, u2) \ | |
205 nonstatic_field(LocalVariableTableElement, name_cp_index, u2) \ | |
206 nonstatic_field(LocalVariableTableElement, descriptor_cp_index, u2) \ | |
207 nonstatic_field(LocalVariableTableElement, signature_cp_index, u2) \ | |
208 nonstatic_field(LocalVariableTableElement, slot, u2) \ | |
209 nonstatic_field(BreakpointInfo, _orig_bytecode, Bytecodes::Code) \ | |
210 nonstatic_field(BreakpointInfo, _bci, int) \ | |
211 nonstatic_field(BreakpointInfo, _name_index, u2) \ | |
212 nonstatic_field(BreakpointInfo, _signature_index, u2) \ | |
213 nonstatic_field(BreakpointInfo, _next, BreakpointInfo*) \ | |
214 /***********/ \ | |
215 /* JNI IDs */ \ | |
216 /***********/ \ | |
217 \ | |
218 nonstatic_field(JNIid, _holder, klassOop) \ | |
219 nonstatic_field(JNIid, _next, JNIid*) \ | |
220 nonstatic_field(JNIid, _offset, int) \ | |
221 /************/ \ | |
222 /* Universe */ \ | |
223 /************/ \ | |
224 \ | |
225 static_field(Universe, _boolArrayKlassObj, klassOop) \ | |
226 static_field(Universe, _byteArrayKlassObj, klassOop) \ | |
227 static_field(Universe, _charArrayKlassObj, klassOop) \ | |
228 static_field(Universe, _intArrayKlassObj, klassOop) \ | |
229 static_field(Universe, _shortArrayKlassObj, klassOop) \ | |
230 static_field(Universe, _longArrayKlassObj, klassOop) \ | |
231 static_field(Universe, _singleArrayKlassObj, klassOop) \ | |
232 static_field(Universe, _doubleArrayKlassObj, klassOop) \ | |
233 static_field(Universe, _symbolKlassObj, klassOop) \ | |
234 static_field(Universe, _methodKlassObj, klassOop) \ | |
235 static_field(Universe, _constMethodKlassObj, klassOop) \ | |
236 static_field(Universe, _methodDataKlassObj, klassOop) \ | |
237 static_field(Universe, _klassKlassObj, klassOop) \ | |
238 static_field(Universe, _arrayKlassKlassObj, klassOop) \ | |
239 static_field(Universe, _objArrayKlassKlassObj, klassOop) \ | |
240 static_field(Universe, _typeArrayKlassKlassObj, klassOop) \ | |
241 static_field(Universe, _instanceKlassKlassObj, klassOop) \ | |
242 static_field(Universe, _constantPoolKlassObj, klassOop) \ | |
243 static_field(Universe, _constantPoolCacheKlassObj, klassOop) \ | |
244 static_field(Universe, _compiledICHolderKlassObj, klassOop) \ | |
245 static_field(Universe, _systemObjArrayKlassObj, klassOop) \ | |
246 static_field(Universe, _mirrors[0], oop) \ | |
247 static_field(Universe, _main_thread_group, oop) \ | |
248 static_field(Universe, _system_thread_group, oop) \ | |
249 static_field(Universe, _the_empty_byte_array, typeArrayOop) \ | |
250 static_field(Universe, _the_empty_short_array, typeArrayOop) \ | |
251 static_field(Universe, _the_empty_int_array, typeArrayOop) \ | |
252 static_field(Universe, _the_empty_system_obj_array, objArrayOop) \ | |
253 static_field(Universe, _the_empty_class_klass_array, objArrayOop) \ | |
254 static_field(Universe, _out_of_memory_error_java_heap, oop) \ | |
255 static_field(Universe, _out_of_memory_error_perm_gen, oop) \ | |
256 static_field(Universe, _out_of_memory_error_array_size, oop) \ | |
257 static_field(Universe, _out_of_memory_error_gc_overhead_limit, oop) \ | |
258 static_field(Universe, _null_ptr_exception_instance, oop) \ | |
259 static_field(Universe, _arithmetic_exception_instance, oop) \ | |
260 static_field(Universe, _vm_exception, oop) \ | |
261 static_field(Universe, _collectedHeap, CollectedHeap*) \ | |
262 static_field(Universe, _base_vtable_size, int) \ | |
263 static_field(Universe, _bootstrapping, bool) \ | |
264 static_field(Universe, _fully_initialized, bool) \ | |
265 static_field(Universe, _verify_count, int) \ | |
642
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
365
diff
changeset
|
266 static_field(Universe, _narrow_oop._base, address) \ |
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
365
diff
changeset
|
267 static_field(Universe, _narrow_oop._shift, int) \ |
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
365
diff
changeset
|
268 static_field(Universe, _narrow_oop._use_implicit_null_checks, bool) \ |
0 | 269 \ |
270 /**********************************************************************************/ \ | |
271 /* Generation and Space hierarchies */ \ | |
272 /**********************************************************************************/ \ | |
273 \ | |
274 unchecked_nonstatic_field(ageTable, sizes, sizeof(ageTable::sizes)) \ | |
275 \ | |
276 nonstatic_field(BarrierSet, _max_covered_regions, int) \ | |
277 nonstatic_field(BlockOffsetTable, _bottom, HeapWord*) \ | |
278 nonstatic_field(BlockOffsetTable, _end, HeapWord*) \ | |
279 \ | |
280 nonstatic_field(BlockOffsetSharedArray, _reserved, MemRegion) \ | |
281 nonstatic_field(BlockOffsetSharedArray, _end, HeapWord*) \ | |
282 nonstatic_field(BlockOffsetSharedArray, _vs, VirtualSpace) \ | |
283 nonstatic_field(BlockOffsetSharedArray, _offset_array, u_char*) \ | |
284 \ | |
285 nonstatic_field(BlockOffsetArray, _array, BlockOffsetSharedArray*) \ | |
286 nonstatic_field(BlockOffsetArray, _sp, Space*) \ | |
287 nonstatic_field(BlockOffsetArrayContigSpace, _next_offset_threshold, HeapWord*) \ | |
288 nonstatic_field(BlockOffsetArrayContigSpace, _next_offset_index, size_t) \ | |
289 \ | |
290 nonstatic_field(BlockOffsetArrayNonContigSpace, _unallocated_block, HeapWord*) \ | |
291 \ | |
292 nonstatic_field(CardGeneration, _rs, GenRemSet*) \ | |
293 nonstatic_field(CardGeneration, _bts, BlockOffsetSharedArray*) \ | |
294 \ | |
295 nonstatic_field(CardTableModRefBS, _whole_heap, const MemRegion) \ | |
296 nonstatic_field(CardTableModRefBS, _guard_index, const size_t) \ | |
297 nonstatic_field(CardTableModRefBS, _last_valid_index, const size_t) \ | |
298 nonstatic_field(CardTableModRefBS, _page_size, const size_t) \ | |
299 nonstatic_field(CardTableModRefBS, _byte_map_size, const size_t) \ | |
300 nonstatic_field(CardTableModRefBS, _byte_map, jbyte*) \ | |
301 nonstatic_field(CardTableModRefBS, _cur_covered_regions, int) \ | |
302 nonstatic_field(CardTableModRefBS, _covered, MemRegion*) \ | |
303 nonstatic_field(CardTableModRefBS, _committed, MemRegion*) \ | |
304 nonstatic_field(CardTableModRefBS, _guard_region, MemRegion) \ | |
305 nonstatic_field(CardTableModRefBS, byte_map_base, jbyte*) \ | |
306 \ | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
147
diff
changeset
|
307 nonstatic_field(CardTableRS, _ct_bs, CardTableModRefBSForCTRS*) \ |
0 | 308 \ |
309 nonstatic_field(CollectedHeap, _reserved, MemRegion) \ | |
310 nonstatic_field(SharedHeap, _perm_gen, PermGen*) \ | |
311 nonstatic_field(CollectedHeap, _barrier_set, BarrierSet*) \ | |
312 nonstatic_field(CollectedHeap, _is_gc_active, bool) \ | |
313 nonstatic_field(CompactibleSpace, _compaction_top, HeapWord*) \ | |
314 nonstatic_field(CompactibleSpace, _first_dead, HeapWord*) \ | |
315 nonstatic_field(CompactibleSpace, _end_of_live, HeapWord*) \ | |
316 \ | |
317 nonstatic_field(CompactingPermGen, _gen, OneContigSpaceCardGeneration*) \ | |
318 \ | |
319 nonstatic_field(ContiguousSpace, _top, HeapWord*) \ | |
320 nonstatic_field(ContiguousSpace, _concurrent_iteration_safe_limit, HeapWord*) \ | |
321 nonstatic_field(ContiguousSpace, _saved_mark_word, HeapWord*) \ | |
322 \ | |
323 nonstatic_field(DefNewGeneration, _next_gen, Generation*) \ | |
324 nonstatic_field(DefNewGeneration, _tenuring_threshold, int) \ | |
325 nonstatic_field(DefNewGeneration, _age_table, ageTable) \ | |
326 nonstatic_field(DefNewGeneration, _eden_space, EdenSpace*) \ | |
327 nonstatic_field(DefNewGeneration, _from_space, ContiguousSpace*) \ | |
328 nonstatic_field(DefNewGeneration, _to_space, ContiguousSpace*) \ | |
329 \ | |
330 nonstatic_field(EdenSpace, _gen, DefNewGeneration*) \ | |
331 \ | |
332 nonstatic_field(Generation, _reserved, MemRegion) \ | |
333 nonstatic_field(Generation, _virtual_space, VirtualSpace) \ | |
334 nonstatic_field(Generation, _level, int) \ | |
335 nonstatic_field(Generation, _stat_record, Generation::StatRecord) \ | |
336 \ | |
337 nonstatic_field(Generation::StatRecord, invocations, int) \ | |
338 nonstatic_field(Generation::StatRecord, accumulated_time, elapsedTimer) \ | |
339 \ | |
340 nonstatic_field(GenerationSpec, _name, Generation::Name) \ | |
341 nonstatic_field(GenerationSpec, _init_size, size_t) \ | |
342 nonstatic_field(GenerationSpec, _max_size, size_t) \ | |
343 \ | |
344 static_field(GenCollectedHeap, _gch, GenCollectedHeap*) \ | |
345 nonstatic_field(GenCollectedHeap, _n_gens, int) \ | |
346 unchecked_nonstatic_field(GenCollectedHeap, _gens, sizeof(GenCollectedHeap::_gens)) /* NOTE: no type */ \ | |
347 nonstatic_field(GenCollectedHeap, _gen_specs, GenerationSpec**) \ | |
348 \ | |
349 nonstatic_field(HeapWord, i, char*) \ | |
350 \ | |
351 nonstatic_field(MemRegion, _start, HeapWord*) \ | |
352 nonstatic_field(MemRegion, _word_size, size_t) \ | |
353 \ | |
354 nonstatic_field(OffsetTableContigSpace, _offsets, BlockOffsetArray) \ | |
355 \ | |
356 nonstatic_field(OneContigSpaceCardGeneration, _min_heap_delta_bytes, size_t) \ | |
357 nonstatic_field(OneContigSpaceCardGeneration, _the_space, ContiguousSpace*) \ | |
358 nonstatic_field(OneContigSpaceCardGeneration, _last_gc, WaterMark) \ | |
359 \ | |
360 nonstatic_field(CompactingPermGenGen, _ro_vs, VirtualSpace) \ | |
361 nonstatic_field(CompactingPermGenGen, _rw_vs, VirtualSpace) \ | |
362 nonstatic_field(CompactingPermGenGen, _md_vs, VirtualSpace) \ | |
363 nonstatic_field(CompactingPermGenGen, _mc_vs, VirtualSpace) \ | |
364 nonstatic_field(CompactingPermGenGen, _ro_space, OffsetTableContigSpace*) \ | |
365 nonstatic_field(CompactingPermGenGen, _rw_space, OffsetTableContigSpace*) \ | |
366 static_field(CompactingPermGenGen, unshared_bottom, HeapWord*) \ | |
367 static_field(CompactingPermGenGen, unshared_end, HeapWord*) \ | |
368 static_field(CompactingPermGenGen, shared_bottom, HeapWord*) \ | |
369 static_field(CompactingPermGenGen, readonly_bottom, HeapWord*) \ | |
370 static_field(CompactingPermGenGen, readonly_end, HeapWord*) \ | |
371 static_field(CompactingPermGenGen, readwrite_bottom, HeapWord*) \ | |
372 static_field(CompactingPermGenGen, readwrite_end, HeapWord*) \ | |
373 static_field(CompactingPermGenGen, miscdata_bottom, HeapWord*) \ | |
374 static_field(CompactingPermGenGen, miscdata_end, HeapWord*) \ | |
375 static_field(CompactingPermGenGen, misccode_bottom, HeapWord*) \ | |
376 static_field(CompactingPermGenGen, misccode_end, HeapWord*) \ | |
377 static_field(CompactingPermGenGen, shared_end, HeapWord*) \ | |
378 \ | |
379 nonstatic_field(PermGen, _capacity_expansion_limit, size_t) \ | |
380 \ | |
381 nonstatic_field(PermanentGenerationSpec, _name, PermGen::Name) \ | |
382 nonstatic_field(PermanentGenerationSpec, _init_size, size_t) \ | |
383 nonstatic_field(PermanentGenerationSpec, _max_size, size_t) \ | |
384 \ | |
385 nonstatic_field(Space, _bottom, HeapWord*) \ | |
386 nonstatic_field(Space, _end, HeapWord*) \ | |
387 \ | |
388 nonstatic_field(TenuredGeneration, _shrink_factor, size_t) \ | |
389 nonstatic_field(TenuredGeneration, _capacity_at_prologue, size_t) \ | |
390 nonstatic_field(ThreadLocalAllocBuffer, _start, HeapWord*) \ | |
391 nonstatic_field(ThreadLocalAllocBuffer, _top, HeapWord*) \ | |
392 nonstatic_field(ThreadLocalAllocBuffer, _end, HeapWord*) \ | |
393 nonstatic_field(ThreadLocalAllocBuffer, _desired_size, size_t) \ | |
394 nonstatic_field(ThreadLocalAllocBuffer, _refill_waste_limit, size_t) \ | |
395 static_field(ThreadLocalAllocBuffer, _target_refills, unsigned) \ | |
396 nonstatic_field(VirtualSpace, _low_boundary, char*) \ | |
397 nonstatic_field(VirtualSpace, _high_boundary, char*) \ | |
398 nonstatic_field(VirtualSpace, _low, char*) \ | |
399 nonstatic_field(VirtualSpace, _high, char*) \ | |
400 nonstatic_field(VirtualSpace, _lower_high, char*) \ | |
401 nonstatic_field(VirtualSpace, _middle_high, char*) \ | |
402 nonstatic_field(VirtualSpace, _upper_high, char*) \ | |
403 nonstatic_field(WaterMark, _point, HeapWord*) \ | |
404 nonstatic_field(WaterMark, _space, Space*) \ | |
405 \ | |
406 /************************/ \ | |
407 /* PerfMemory - jvmstat */ \ | |
408 /************************/ \ | |
409 \ | |
410 nonstatic_field(PerfDataPrologue, magic, jint) \ | |
411 nonstatic_field(PerfDataPrologue, byte_order, jbyte) \ | |
412 nonstatic_field(PerfDataPrologue, major_version, jbyte) \ | |
413 nonstatic_field(PerfDataPrologue, minor_version, jbyte) \ | |
414 nonstatic_field(PerfDataPrologue, accessible, jbyte) \ | |
415 nonstatic_field(PerfDataPrologue, used, jint) \ | |
416 nonstatic_field(PerfDataPrologue, overflow, jint) \ | |
417 nonstatic_field(PerfDataPrologue, mod_time_stamp, jlong) \ | |
418 nonstatic_field(PerfDataPrologue, entry_offset, jint) \ | |
419 nonstatic_field(PerfDataPrologue, num_entries, jint) \ | |
420 \ | |
421 nonstatic_field(PerfDataEntry, entry_length, jint) \ | |
422 nonstatic_field(PerfDataEntry, name_offset, jint) \ | |
423 nonstatic_field(PerfDataEntry, vector_length, jint) \ | |
424 nonstatic_field(PerfDataEntry, data_type, jbyte) \ | |
425 nonstatic_field(PerfDataEntry, flags, jbyte) \ | |
426 nonstatic_field(PerfDataEntry, data_units, jbyte) \ | |
427 nonstatic_field(PerfDataEntry, data_variability, jbyte) \ | |
428 nonstatic_field(PerfDataEntry, data_offset, jint) \ | |
429 \ | |
430 static_field(PerfMemory, _start, char*) \ | |
431 static_field(PerfMemory, _end, char*) \ | |
432 static_field(PerfMemory, _top, char*) \ | |
433 static_field(PerfMemory, _capacity, size_t) \ | |
434 static_field(PerfMemory, _prologue, PerfDataPrologue*) \ | |
435 static_field(PerfMemory, _initialized, jint) \ | |
436 \ | |
437 /***************/ \ | |
438 /* SymbolTable */ \ | |
439 /***************/ \ | |
440 \ | |
441 static_field(SymbolTable, _the_table, SymbolTable*) \ | |
442 \ | |
443 /***************/ \ | |
444 /* StringTable */ \ | |
445 /***************/ \ | |
446 \ | |
447 static_field(StringTable, _the_table, StringTable*) \ | |
448 \ | |
449 /********************/ \ | |
450 /* SystemDictionary */ \ | |
451 /********************/ \ | |
452 \ | |
453 static_field(SystemDictionary, _dictionary, Dictionary*) \ | |
454 static_field(SystemDictionary, _placeholders, PlaceholderTable*) \ | |
455 static_field(SystemDictionary, _shared_dictionary, Dictionary*) \ | |
456 static_field(SystemDictionary, _system_loader_lock_obj, oop) \ | |
457 static_field(SystemDictionary, _loader_constraints, LoaderConstraintTable*) \ | |
147 | 458 static_field(SystemDictionary, WK_KLASS(object_klass), klassOop) \ |
459 static_field(SystemDictionary, WK_KLASS(string_klass), klassOop) \ | |
460 static_field(SystemDictionary, WK_KLASS(class_klass), klassOop) \ | |
461 static_field(SystemDictionary, WK_KLASS(cloneable_klass), klassOop) \ | |
462 static_field(SystemDictionary, WK_KLASS(classloader_klass), klassOop) \ | |
463 static_field(SystemDictionary, WK_KLASS(serializable_klass), klassOop) \ | |
464 static_field(SystemDictionary, WK_KLASS(system_klass), klassOop) \ | |
465 static_field(SystemDictionary, WK_KLASS(throwable_klass), klassOop) \ | |
466 static_field(SystemDictionary, WK_KLASS(threaddeath_klass), klassOop) \ | |
467 static_field(SystemDictionary, WK_KLASS(error_klass), klassOop) \ | |
468 static_field(SystemDictionary, WK_KLASS(exception_klass), klassOop) \ | |
469 static_field(SystemDictionary, WK_KLASS(runtime_exception_klass), klassOop) \ | |
470 static_field(SystemDictionary, WK_KLASS(classNotFoundException_klass), klassOop) \ | |
471 static_field(SystemDictionary, WK_KLASS(noClassDefFoundError_klass), klassOop) \ | |
472 static_field(SystemDictionary, WK_KLASS(linkageError_klass), klassOop) \ | |
473 static_field(SystemDictionary, WK_KLASS(ClassCastException_klass), klassOop) \ | |
474 static_field(SystemDictionary, WK_KLASS(ArrayStoreException_klass), klassOop) \ | |
475 static_field(SystemDictionary, WK_KLASS(virtualMachineError_klass), klassOop) \ | |
476 static_field(SystemDictionary, WK_KLASS(OutOfMemoryError_klass), klassOop) \ | |
477 static_field(SystemDictionary, WK_KLASS(StackOverflowError_klass), klassOop) \ | |
478 static_field(SystemDictionary, WK_KLASS(protectionDomain_klass), klassOop) \ | |
479 static_field(SystemDictionary, WK_KLASS(AccessControlContext_klass), klassOop) \ | |
480 static_field(SystemDictionary, WK_KLASS(reference_klass), klassOop) \ | |
481 static_field(SystemDictionary, WK_KLASS(soft_reference_klass), klassOop) \ | |
482 static_field(SystemDictionary, WK_KLASS(weak_reference_klass), klassOop) \ | |
483 static_field(SystemDictionary, WK_KLASS(final_reference_klass), klassOop) \ | |
484 static_field(SystemDictionary, WK_KLASS(phantom_reference_klass), klassOop) \ | |
485 static_field(SystemDictionary, WK_KLASS(finalizer_klass), klassOop) \ | |
486 static_field(SystemDictionary, WK_KLASS(thread_klass), klassOop) \ | |
487 static_field(SystemDictionary, WK_KLASS(threadGroup_klass), klassOop) \ | |
488 static_field(SystemDictionary, WK_KLASS(properties_klass), klassOop) \ | |
489 static_field(SystemDictionary, WK_KLASS(stringBuffer_klass), klassOop) \ | |
490 static_field(SystemDictionary, WK_KLASS(vector_klass), klassOop) \ | |
491 static_field(SystemDictionary, WK_KLASS(hashtable_klass), klassOop) \ | |
0 | 492 static_field(SystemDictionary, _box_klasses[0], klassOop) \ |
493 static_field(SystemDictionary, _java_system_loader, oop) \ | |
494 \ | |
495 /*******************/ \ | |
496 /* HashtableBucket */ \ | |
497 /*******************/ \ | |
498 \ | |
499 nonstatic_field(HashtableBucket, _entry, BasicHashtableEntry*) \ | |
500 \ | |
501 /******************/ \ | |
502 /* HashtableEntry */ \ | |
503 /******************/ \ | |
504 \ | |
505 nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ | |
506 nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ | |
507 nonstatic_field(HashtableEntry, _literal, oop) \ | |
508 \ | |
509 /*************/ \ | |
510 /* Hashtable */ \ | |
511 /*************/ \ | |
512 \ | |
513 nonstatic_field(BasicHashtable, _table_size, int) \ | |
514 nonstatic_field(BasicHashtable, _buckets, HashtableBucket*) \ | |
515 nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ | |
516 nonstatic_field(BasicHashtable, _first_free_entry, char*) \ | |
517 nonstatic_field(BasicHashtable, _end_block, char*) \ | |
518 nonstatic_field(BasicHashtable, _entry_size, int) \ | |
519 \ | |
520 /*******************/ \ | |
521 /* DictionaryEntry */ \ | |
522 /*******************/ \ | |
523 \ | |
524 nonstatic_field(DictionaryEntry, _loader, oop) \ | |
525 nonstatic_field(DictionaryEntry, _pd_set, ProtectionDomainEntry*) \ | |
526 \ | |
527 /********************/ \ | |
528 \ | |
529 nonstatic_field(PlaceholderEntry, _loader, oop) \ | |
530 \ | |
531 /**************************/ \ | |
532 /* ProctectionDomainEntry */ \ | |
533 /**************************/ \ | |
534 \ | |
535 nonstatic_field(ProtectionDomainEntry, _next, ProtectionDomainEntry*) \ | |
536 nonstatic_field(ProtectionDomainEntry, _protection_domain, oop) \ | |
537 \ | |
538 /*************************/ \ | |
539 /* LoaderConstraintEntry */ \ | |
540 /*************************/ \ | |
541 \ | |
542 nonstatic_field(LoaderConstraintEntry, _name, symbolOop) \ | |
543 nonstatic_field(LoaderConstraintEntry, _num_loaders, int) \ | |
544 nonstatic_field(LoaderConstraintEntry, _max_loaders, int) \ | |
545 nonstatic_field(LoaderConstraintEntry, _loaders, oop*) \ | |
546 \ | |
547 /********************************/ \ | |
548 /* CodeCache (NOTE: incomplete) */ \ | |
549 /********************************/ \ | |
550 \ | |
551 static_field(CodeCache, _heap, CodeHeap*) \ | |
989
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
931
diff
changeset
|
552 static_field(CodeCache, _scavenge_root_nmethods, nmethod*) \ |
0 | 553 \ |
554 /*******************************/ \ | |
555 /* CodeHeap (NOTE: incomplete) */ \ | |
556 /*******************************/ \ | |
557 \ | |
558 nonstatic_field(CodeHeap, _memory, VirtualSpace) \ | |
559 nonstatic_field(CodeHeap, _segmap, VirtualSpace) \ | |
560 nonstatic_field(CodeHeap, _log2_segment_size, int) \ | |
561 nonstatic_field(HeapBlock, _header, HeapBlock::Header) \ | |
562 nonstatic_field(HeapBlock::Header, _length, size_t) \ | |
563 nonstatic_field(HeapBlock::Header, _used, bool) \ | |
564 \ | |
565 /**********************************/ \ | |
566 /* Interpreter (NOTE: incomplete) */ \ | |
567 /**********************************/ \ | |
568 \ | |
569 static_field(AbstractInterpreter, _code, StubQueue*) \ | |
570 \ | |
571 /****************************/ \ | |
572 /* Stubs (NOTE: incomplete) */ \ | |
573 /****************************/ \ | |
574 \ | |
575 nonstatic_field(StubQueue, _stub_buffer, address) \ | |
576 nonstatic_field(StubQueue, _buffer_limit, int) \ | |
577 nonstatic_field(StubQueue, _queue_begin, int) \ | |
578 nonstatic_field(StubQueue, _queue_end, int) \ | |
579 nonstatic_field(StubQueue, _number_of_stubs, int) \ | |
580 nonstatic_field(InterpreterCodelet, _size, int) \ | |
581 nonstatic_field(InterpreterCodelet, _description, const char*) \ | |
582 nonstatic_field(InterpreterCodelet, _bytecode, Bytecodes::Code) \ | |
583 \ | |
584 /***********************************/ \ | |
585 /* StubRoutines (NOTE: incomplete) */ \ | |
586 /***********************************/ \ | |
587 \ | |
588 static_field(StubRoutines, _call_stub_return_address, address) \ | |
304 | 589 IA32_ONLY(static_field(StubRoutines::x86,_call_stub_compiled_return, address)) \ |
0 | 590 \ |
591 /***************************************/ \ | |
592 /* PcDesc and other compiled code info */ \ | |
593 /***************************************/ \ | |
594 \ | |
595 nonstatic_field(PcDesc, _pc_offset, int) \ | |
596 nonstatic_field(PcDesc, _scope_decode_offset, int) \ | |
1040
873ec3787992
6892186: SA does not dump debug info for scalar replaced objects
kvn
parents:
993
diff
changeset
|
597 nonstatic_field(PcDesc, _obj_decode_offset, int) \ |
931
72088be4b386
6873116: Modify reexecute implementation to use pcDesc to record the reexecute bit
cfang
parents:
844
diff
changeset
|
598 nonstatic_field(PcDesc, _flags, PcDesc::PcDescFlags) \ |
0 | 599 \ |
600 /***************************************************/ \ | |
601 /* CodeBlobs (NOTE: incomplete, but only a little) */ \ | |
602 /***************************************************/ \ | |
603 \ | |
604 nonstatic_field(CodeBlob, _name, const char*) \ | |
605 nonstatic_field(CodeBlob, _size, int) \ | |
606 nonstatic_field(CodeBlob, _header_size, int) \ | |
607 nonstatic_field(CodeBlob, _relocation_size, int) \ | |
608 nonstatic_field(CodeBlob, _instructions_offset, int) \ | |
609 nonstatic_field(CodeBlob, _frame_complete_offset, int) \ | |
610 nonstatic_field(CodeBlob, _data_offset, int) \ | |
611 nonstatic_field(CodeBlob, _oops_offset, int) \ | |
612 nonstatic_field(CodeBlob, _oops_length, int) \ | |
613 nonstatic_field(CodeBlob, _frame_size, int) \ | |
614 nonstatic_field(CodeBlob, _oop_maps, OopMapSet*) \ | |
615 \ | |
616 /**************************************************/ \ | |
617 /* NMethods (NOTE: incomplete, but only a little) */ \ | |
618 /**************************************************/ \ | |
619 \ | |
620 static_field(nmethod, _zombie_instruction_size, int) \ | |
621 nonstatic_field(nmethod, _method, methodOop) \ | |
622 nonstatic_field(nmethod, _entry_bci, int) \ | |
989
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
931
diff
changeset
|
623 nonstatic_field(nmethod, _osr_link, nmethod*) \ |
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
931
diff
changeset
|
624 nonstatic_field(nmethod, _scavenge_root_link, nmethod*) \ |
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
931
diff
changeset
|
625 nonstatic_field(nmethod, _scavenge_root_state, jbyte) \ |
0 | 626 nonstatic_field(nmethod, _exception_offset, int) \ |
627 nonstatic_field(nmethod, _deoptimize_offset, int) \ | |
628 nonstatic_field(nmethod, _orig_pc_offset, int) \ | |
629 nonstatic_field(nmethod, _stub_offset, int) \ | |
630 nonstatic_field(nmethod, _scopes_data_offset, int) \ | |
631 nonstatic_field(nmethod, _scopes_pcs_offset, int) \ | |
632 nonstatic_field(nmethod, _dependencies_offset, int) \ | |
633 nonstatic_field(nmethod, _handler_table_offset, int) \ | |
634 nonstatic_field(nmethod, _nul_chk_table_offset, int) \ | |
635 nonstatic_field(nmethod, _nmethod_end_offset, int) \ | |
636 nonstatic_field(nmethod, _entry_point, address) \ | |
637 nonstatic_field(nmethod, _verified_entry_point, address) \ | |
638 nonstatic_field(nmethod, _osr_entry_point, address) \ | |
639 nonstatic_field(nmethod, _lock_count, jint) \ | |
640 nonstatic_field(nmethod, _stack_traversal_mark, long) \ | |
641 \ | |
642 /********************************/ \ | |
643 /* JavaCalls (NOTE: incomplete) */ \ | |
644 /********************************/ \ | |
645 \ | |
646 nonstatic_field(JavaCallWrapper, _anchor, JavaFrameAnchor) \ | |
647 /********************************/ \ | |
648 /* JavaFrameAnchor (NOTE: incomplete) */ \ | |
649 /********************************/ \ | |
650 volatile_nonstatic_field(JavaFrameAnchor, _last_Java_sp, intptr_t*) \ | |
651 volatile_nonstatic_field(JavaFrameAnchor, _last_Java_pc, address) \ | |
652 \ | |
653 /******************************/ \ | |
654 /* Threads (NOTE: incomplete) */ \ | |
655 /******************************/ \ | |
656 \ | |
657 static_field(Threads, _thread_list, JavaThread*) \ | |
658 static_field(Threads, _number_of_threads, int) \ | |
659 static_field(Threads, _number_of_non_daemon_threads, int) \ | |
660 static_field(Threads, _return_code, int) \ | |
661 \ | |
662 volatile_nonstatic_field(Thread, _suspend_flags, uint32_t) \ | |
663 nonstatic_field(Thread, _active_handles, JNIHandleBlock*) \ | |
664 nonstatic_field(Thread, _tlab, ThreadLocalAllocBuffer) \ | |
665 nonstatic_field(Thread, _current_pending_monitor, ObjectMonitor*) \ | |
666 nonstatic_field(Thread, _current_pending_monitor_is_from_java, bool) \ | |
667 nonstatic_field(Thread, _current_waiting_monitor, ObjectMonitor*) \ | |
668 nonstatic_field(NamedThread, _name, char*) \ | |
669 nonstatic_field(JavaThread, _next, JavaThread*) \ | |
670 nonstatic_field(JavaThread, _threadObj, oop) \ | |
671 nonstatic_field(JavaThread, _anchor, JavaFrameAnchor) \ | |
672 volatile_nonstatic_field(JavaThread, _thread_state, JavaThreadState) \ | |
673 nonstatic_field(JavaThread, _osthread, OSThread*) \ | |
674 nonstatic_field(JavaThread, _stack_base, address) \ | |
675 nonstatic_field(JavaThread, _stack_size, size_t) \ | |
676 \ | |
677 /************/ \ | |
678 /* OSThread */ \ | |
679 /************/ \ | |
680 \ | |
681 nonstatic_field(OSThread, _interrupted, jint) \ | |
682 \ | |
683 /************************/ \ | |
684 /* OopMap and OopMapSet */ \ | |
685 /************************/ \ | |
686 \ | |
687 nonstatic_field(OopMap, _pc_offset, int) \ | |
688 nonstatic_field(OopMap, _omv_count, int) \ | |
689 nonstatic_field(OopMap, _omv_data_size, int) \ | |
690 nonstatic_field(OopMap, _omv_data, unsigned char*) \ | |
691 nonstatic_field(OopMap, _write_stream, CompressedWriteStream*) \ | |
692 nonstatic_field(OopMapSet, _om_count, int) \ | |
693 nonstatic_field(OopMapSet, _om_size, int) \ | |
694 nonstatic_field(OopMapSet, _om_data, OopMap**) \ | |
695 \ | |
696 /*********************************/ \ | |
697 /* JNIHandles and JNIHandleBlock */ \ | |
698 /*********************************/ \ | |
699 static_field(JNIHandles, _global_handles, JNIHandleBlock*) \ | |
700 static_field(JNIHandles, _weak_global_handles, JNIHandleBlock*) \ | |
701 static_field(JNIHandles, _deleted_handle, oop) \ | |
702 \ | |
703 unchecked_nonstatic_field(JNIHandleBlock, _handles, JNIHandleBlock::block_size_in_oops * sizeof(Oop)) /* Note: no type */ \ | |
704 nonstatic_field(JNIHandleBlock, _top, int) \ | |
705 nonstatic_field(JNIHandleBlock, _next, JNIHandleBlock*) \ | |
706 \ | |
707 /********************/ \ | |
708 /* CompressedStream */ \ | |
709 /********************/ \ | |
710 \ | |
711 nonstatic_field(CompressedStream, _buffer, u_char*) \ | |
712 nonstatic_field(CompressedStream, _position, int) \ | |
713 \ | |
714 /*********************************/ \ | |
715 /* VMRegImpl (NOTE: incomplete) */ \ | |
716 /*********************************/ \ | |
717 \ | |
718 static_field(VMRegImpl, regName[0], const char*) \ | |
719 static_field(VMRegImpl, stack0, VMReg) \ | |
720 \ | |
721 /*******************************/ \ | |
722 /* Runtime1 (NOTE: incomplete) */ \ | |
723 /*******************************/ \ | |
724 \ | |
725 unchecked_c1_static_field(Runtime1, _blobs, sizeof(Runtime1::_blobs)) /* NOTE: no type */ \ | |
726 \ | |
727 /************/ \ | |
728 /* Monitors */ \ | |
729 /************/ \ | |
730 \ | |
731 volatile_nonstatic_field(ObjectMonitor, _header, markOop) \ | |
732 unchecked_nonstatic_field(ObjectMonitor, _object, sizeof(void *)) /* NOTE: no type */ \ | |
733 unchecked_nonstatic_field(ObjectMonitor, _owner, sizeof(void *)) /* NOTE: no type */ \ | |
734 volatile_nonstatic_field(ObjectMonitor, _count, intptr_t) \ | |
735 volatile_nonstatic_field(ObjectMonitor, _waiters, intptr_t) \ | |
736 volatile_nonstatic_field(ObjectMonitor, _recursions, intptr_t) \ | |
737 nonstatic_field(ObjectMonitor, FreeNext, ObjectMonitor*) \ | |
738 volatile_nonstatic_field(BasicLock, _displaced_header, markOop) \ | |
739 nonstatic_field(BasicObjectLock, _lock, BasicLock) \ | |
740 nonstatic_field(BasicObjectLock, _obj, oop) \ | |
741 static_field(ObjectSynchronizer, gBlockList, ObjectMonitor*) \ | |
742 \ | |
743 /*********************/ \ | |
744 /* Matcher (C2 only) */ \ | |
745 /*********************/ \ | |
746 \ | |
747 unchecked_c2_static_field(Matcher, _regEncode, sizeof(Matcher::_regEncode)) /* NOTE: no type */ \ | |
748 \ | |
749 /*********************/ \ | |
750 /* -XX flags */ \ | |
751 /*********************/ \ | |
752 \ | |
753 nonstatic_field(Flag, type, const char*) \ | |
754 nonstatic_field(Flag, name, const char*) \ | |
755 unchecked_nonstatic_field(Flag, addr, sizeof(void*)) /* NOTE: no type */ \ | |
756 nonstatic_field(Flag, kind, const char*) \ | |
757 static_field(Flag, flags, Flag*) \ | |
758 static_field(Flag, numFlags, size_t) \ | |
759 \ | |
760 /*************************/ \ | |
761 /* JDK / VM version info */ \ | |
762 /*************************/ \ | |
763 \ | |
764 static_field(Abstract_VM_Version, _s_vm_release, const char*) \ | |
765 static_field(Abstract_VM_Version, _s_internal_vm_info_string, const char*) \ | |
766 static_field(Abstract_VM_Version, _vm_major_version, int) \ | |
767 static_field(Abstract_VM_Version, _vm_minor_version, int) \ | |
768 static_field(Abstract_VM_Version, _vm_build_number, int) \ | |
769 \ | |
242 | 770 static_field(JDK_Version, _current, JDK_Version) \ |
771 nonstatic_field(JDK_Version, _partially_initialized, bool) \ | |
772 nonstatic_field(JDK_Version, _major, unsigned char) \ | |
0 | 773 \ |
774 \ | |
775 \ | |
776 /*************/ \ | |
777 /* Arguments */ \ | |
778 /*************/ \ | |
779 \ | |
780 static_field(Arguments, _jvm_flags_array, char**) \ | |
781 static_field(Arguments, _num_jvm_flags, int) \ | |
782 static_field(Arguments, _jvm_args_array, char**) \ | |
783 static_field(Arguments, _num_jvm_args, int) \ | |
784 static_field(Arguments, _java_command, char*) \ | |
785 \ | |
786 \ | |
787 /************************/ \ | |
788 /* Miscellaneous fields */ \ | |
789 /************************/ \ | |
790 \ | |
791 nonstatic_field(AccessFlags, _flags, jint) \ | |
792 nonstatic_field(elapsedTimer, _counter, jlong) \ | |
793 nonstatic_field(elapsedTimer, _active, bool) \ | |
794 nonstatic_field(InvocationCounter, _counter, unsigned int) | |
795 | |
796 /* NOTE that we do not use the last_entry() macro here; it is used */ | |
797 /* in vmStructs_<os>_<cpu>.hpp's VM_STRUCTS_OS_CPU macro (and must */ | |
798 /* be present there) */ | |
799 | |
800 //-------------------------------------------------------------------------------- | |
801 // VM_TYPES | |
802 // | |
803 // This list must enumerate at least all of the types in the above | |
804 // list. For the types in the above list, the entry below must have | |
805 // exactly the same spacing since string comparisons are done in the | |
806 // code which verifies the consistency of these tables (in the debug | |
807 // build). | |
808 // | |
809 // In addition to the above types, this list is required to enumerate | |
810 // the JNI's java types, which are used to indicate the size of Java | |
811 // fields in this VM to the SA. Further, oop types are currently | |
812 // distinguished by name (i.e., ends with "oop") over in the SA. | |
813 // | |
814 // The declare_toplevel_type macro should be used to declare types | |
815 // which do not have a superclass. | |
816 // | |
817 // The declare_integer_type and declare_unsigned_integer_type macros | |
818 // are required in order to properly identify C integer types over in | |
819 // the SA. They should be used for any type which is otherwise opaque | |
820 // and which it is necessary to coerce into an integer value. This | |
821 // includes, for example, the type uintptr_t. Note that while they | |
822 // will properly identify the type's size regardless of the platform, | |
823 // since it is does not seem possible to deduce or check signedness at | |
824 // compile time using the pointer comparison tricks, it is currently | |
825 // required that the given types have the same signedness across all | |
826 // platforms. | |
827 // | |
828 // NOTE that there are platform-specific additions to this table in | |
829 // vmStructs_<os>_<cpu>.hpp. | |
830 | |
831 #define VM_TYPES(declare_type, \ | |
832 declare_toplevel_type, \ | |
833 declare_oop_type, \ | |
834 declare_integer_type, \ | |
835 declare_unsigned_integer_type, \ | |
836 declare_c1_toplevel_type, \ | |
837 declare_c2_type, \ | |
838 declare_c2_toplevel_type, \ | |
839 last_entry) \ | |
840 \ | |
841 /*************************************************************/ \ | |
842 /* Java primitive types -- required by the SA implementation */ \ | |
843 /* in order to determine the size of Java fields in this VM */ \ | |
844 /* (the implementation looks up these names specifically) */ \ | |
845 /* NOTE: since we fetch these sizes from the remote VM, we */ \ | |
846 /* have a bootstrapping sequence during which it is not */ \ | |
847 /* valid to fetch Java values from the remote process, only */ \ | |
848 /* C integer values (of known size). NOTE also that we do */ \ | |
849 /* NOT include "Java unsigned" types like juint here; since */ \ | |
850 /* Java does not have unsigned primitive types, those can */ \ | |
851 /* not be mapped directly and are considered to be C integer */ \ | |
852 /* types in this system (see the "other types" section, */ \ | |
853 /* below.) */ \ | |
854 /*************************************************************/ \ | |
855 \ | |
856 declare_toplevel_type(jboolean) \ | |
857 declare_toplevel_type(jbyte) \ | |
858 declare_toplevel_type(jchar) \ | |
859 declare_toplevel_type(jdouble) \ | |
860 declare_toplevel_type(jfloat) \ | |
861 declare_toplevel_type(jint) \ | |
862 declare_toplevel_type(jlong) \ | |
863 declare_toplevel_type(jshort) \ | |
864 \ | |
865 /*********************************************************************/ \ | |
866 /* C integer types. User-defined typedefs (like "size_t" or */ \ | |
867 /* "intptr_t") are guaranteed to be present with the same names over */ \ | |
868 /* in the SA's type database. Names like "unsigned short" are not */ \ | |
869 /* guaranteed to be visible through the SA's type database lookup */ \ | |
870 /* mechanism, though they will have a Type object created for them */ \ | |
871 /* and are valid types for Fields. */ \ | |
872 /*********************************************************************/ \ | |
873 declare_integer_type(bool) \ | |
874 declare_integer_type(int) \ | |
875 declare_integer_type(long) \ | |
876 declare_integer_type(char) \ | |
877 declare_unsigned_integer_type(unsigned char) \ | |
878 declare_unsigned_integer_type(unsigned int) \ | |
879 declare_unsigned_integer_type(unsigned short) \ | |
880 declare_unsigned_integer_type(unsigned long) \ | |
881 /* The compiler thinks this is a different type than */ \ | |
882 /* unsigned short on Win32 */ \ | |
883 declare_unsigned_integer_type(u2) \ | |
884 declare_unsigned_integer_type(unsigned) \ | |
885 \ | |
886 /*****************************/ \ | |
887 /* C primitive pointer types */ \ | |
888 /*****************************/ \ | |
889 \ | |
890 declare_toplevel_type(int*) \ | |
891 declare_toplevel_type(char*) \ | |
892 declare_toplevel_type(char**) \ | |
893 declare_toplevel_type(const char*) \ | |
894 declare_toplevel_type(u_char*) \ | |
895 declare_toplevel_type(unsigned char*) \ | |
896 \ | |
897 /*******************************************************************/ \ | |
898 /* Types which it will be handy to have available over in the SA */ \ | |
899 /* in order to do platform-independent address -> integer coercion */ \ | |
900 /* (note: these will be looked up by name) */ \ | |
901 /*******************************************************************/ \ | |
902 \ | |
903 declare_unsigned_integer_type(size_t) \ | |
152
c70a245cad3a
6670684: 4/5 SA command universe did not print out CMS space information
dcubed
parents:
0
diff
changeset
|
904 declare_integer_type(ssize_t) \ |
0 | 905 declare_unsigned_integer_type(const size_t) \ |
906 declare_integer_type(intx) \ | |
907 declare_integer_type(intptr_t) \ | |
908 declare_unsigned_integer_type(uintx) \ | |
909 declare_unsigned_integer_type(uintptr_t) \ | |
910 declare_unsigned_integer_type(uint32_t) \ | |
911 declare_unsigned_integer_type(uint64_t) \ | |
912 declare_integer_type(const int) \ | |
913 \ | |
914 /*******************************************************************************/ \ | |
915 /* OopDesc and Klass hierarchies (NOTE: missing methodDataOop-related classes) */ \ | |
916 /*******************************************************************************/ \ | |
917 \ | |
918 declare_toplevel_type(oopDesc) \ | |
919 declare_toplevel_type(Klass_vtbl) \ | |
920 declare_type(Klass, Klass_vtbl) \ | |
921 declare_type(arrayKlass, Klass) \ | |
922 declare_type(arrayKlassKlass, klassKlass) \ | |
923 declare_type(arrayOopDesc, oopDesc) \ | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
924 declare_type(compiledICHolderKlass, Klass) \ |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
925 declare_type(compiledICHolderOopDesc, oopDesc) \ |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
926 declare_type(constantPoolKlass, Klass) \ |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
927 declare_type(constantPoolOopDesc, oopDesc) \ |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
928 declare_type(constantPoolCacheKlass, Klass) \ |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
929 declare_type(constantPoolCacheOopDesc, oopDesc) \ |
0 | 930 declare_type(instanceKlass, Klass) \ |
931 declare_type(instanceKlassKlass, klassKlass) \ | |
932 declare_type(instanceOopDesc, oopDesc) \ | |
933 declare_type(instanceRefKlass, instanceKlass) \ | |
934 declare_type(klassKlass, Klass) \ | |
935 declare_type(klassOopDesc, oopDesc) \ | |
936 declare_type(markOopDesc, oopDesc) \ | |
937 declare_type(methodDataKlass, Klass) \ | |
938 declare_type(methodDataOopDesc, oopDesc) \ | |
939 declare_type(methodKlass, Klass) \ | |
940 declare_type(constMethodKlass, Klass) \ | |
941 declare_type(methodOopDesc, oopDesc) \ | |
942 declare_type(objArrayKlass, arrayKlass) \ | |
943 declare_type(objArrayKlassKlass, arrayKlassKlass) \ | |
944 declare_type(objArrayOopDesc, arrayOopDesc) \ | |
945 declare_type(constMethodOopDesc, oopDesc) \ | |
946 declare_type(symbolKlass, Klass) \ | |
947 declare_type(symbolOopDesc, oopDesc) \ | |
948 declare_type(typeArrayKlass, arrayKlass) \ | |
949 declare_type(typeArrayKlassKlass, arrayKlassKlass) \ | |
950 declare_type(typeArrayOopDesc, arrayOopDesc) \ | |
951 \ | |
952 /********/ \ | |
953 /* Oops */ \ | |
954 /********/ \ | |
955 \ | |
956 declare_oop_type(constantPoolOop) \ | |
957 declare_oop_type(constantPoolCacheOop) \ | |
958 declare_oop_type(klassOop) \ | |
959 declare_oop_type(markOop) \ | |
960 declare_oop_type(methodOop) \ | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
961 declare_oop_type(methodDataOop) \ |
0 | 962 declare_oop_type(objArrayOop) \ |
963 declare_oop_type(oop) \ | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
964 declare_oop_type(narrowOop) \ |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
965 declare_oop_type(wideKlassOop) \ |
0 | 966 declare_oop_type(constMethodOop) \ |
967 declare_oop_type(symbolOop) \ | |
968 declare_oop_type(typeArrayOop) \ | |
969 \ | |
970 /*************************************/ \ | |
971 /* MethodOop-related data structures */ \ | |
972 /*************************************/ \ | |
973 \ | |
974 declare_toplevel_type(CheckedExceptionElement) \ | |
975 declare_toplevel_type(LocalVariableTableElement) \ | |
976 \ | |
977 /******************************************/ \ | |
978 /* Generation and space hierarchies */ \ | |
979 /* (needed for run-time type information) */ \ | |
980 /******************************************/ \ | |
981 \ | |
982 declare_toplevel_type(CollectedHeap) \ | |
983 declare_type(SharedHeap, CollectedHeap) \ | |
984 declare_type(GenCollectedHeap, SharedHeap) \ | |
985 declare_toplevel_type(Generation) \ | |
986 declare_type(DefNewGeneration, Generation) \ | |
987 declare_type(CardGeneration, Generation) \ | |
988 declare_type(OneContigSpaceCardGeneration, CardGeneration) \ | |
989 declare_type(TenuredGeneration, OneContigSpaceCardGeneration) \ | |
990 declare_type(CompactingPermGenGen, OneContigSpaceCardGeneration) \ | |
991 declare_toplevel_type(Space) \ | |
992 declare_toplevel_type(BitMap) \ | |
993 declare_type(CompactibleSpace, Space) \ | |
994 declare_type(ContiguousSpace, CompactibleSpace) \ | |
995 declare_type(EdenSpace, ContiguousSpace) \ | |
996 declare_type(OffsetTableContigSpace, ContiguousSpace) \ | |
997 declare_type(TenuredSpace, OffsetTableContigSpace) \ | |
998 declare_type(ContigPermSpace, OffsetTableContigSpace) \ | |
999 declare_toplevel_type(PermGen) \ | |
1000 declare_type(CompactingPermGen, PermGen) \ | |
1001 declare_toplevel_type(BarrierSet) \ | |
1002 declare_type(ModRefBarrierSet, BarrierSet) \ | |
1003 declare_type(CardTableModRefBS, ModRefBarrierSet) \ | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
147
diff
changeset
|
1004 declare_type(CardTableModRefBSForCTRS, CardTableModRefBS) \ |
0 | 1005 declare_toplevel_type(GenRemSet) \ |
1006 declare_type(CardTableRS, GenRemSet) \ | |
1007 declare_toplevel_type(BlockOffsetSharedArray) \ | |
1008 declare_toplevel_type(BlockOffsetTable) \ | |
1009 declare_type(BlockOffsetArray, BlockOffsetTable) \ | |
1010 declare_type(BlockOffsetArrayContigSpace, BlockOffsetArray) \ | |
1011 declare_type(BlockOffsetArrayNonContigSpace, BlockOffsetArray) \ | |
1012 \ | |
1013 /* Miscellaneous other GC types */ \ | |
1014 \ | |
1015 declare_toplevel_type(ageTable) \ | |
1016 declare_toplevel_type(Generation::StatRecord) \ | |
1017 declare_toplevel_type(GenerationSpec) \ | |
1018 declare_toplevel_type(HeapWord) \ | |
1019 declare_toplevel_type(MemRegion) \ | |
1020 declare_toplevel_type(const MemRegion) \ | |
1021 declare_toplevel_type(PermanentGenerationSpec) \ | |
1022 declare_toplevel_type(ThreadLocalAllocBuffer) \ | |
1023 declare_toplevel_type(VirtualSpace) \ | |
1024 declare_toplevel_type(WaterMark) \ | |
1025 \ | |
1026 /* Pointers to Garbage Collection types */ \ | |
1027 \ | |
1028 declare_toplevel_type(BarrierSet*) \ | |
1029 declare_toplevel_type(BlockOffsetSharedArray*) \ | |
1030 declare_toplevel_type(GenRemSet*) \ | |
1031 declare_toplevel_type(CardTableRS*) \ | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
147
diff
changeset
|
1032 declare_toplevel_type(CardTableModRefBS*) \ |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
147
diff
changeset
|
1033 declare_toplevel_type(CardTableModRefBS**) \ |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
147
diff
changeset
|
1034 declare_toplevel_type(CardTableModRefBSForCTRS*) \ |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
147
diff
changeset
|
1035 declare_toplevel_type(CardTableModRefBSForCTRS**) \ |
0 | 1036 declare_toplevel_type(CollectedHeap*) \ |
1037 declare_toplevel_type(ContiguousSpace*) \ | |
1038 declare_toplevel_type(DefNewGeneration*) \ | |
1039 declare_toplevel_type(EdenSpace*) \ | |
1040 declare_toplevel_type(GenCollectedHeap*) \ | |
1041 declare_toplevel_type(Generation*) \ | |
1042 declare_toplevel_type(GenerationSpec**) \ | |
1043 declare_toplevel_type(HeapWord*) \ | |
1044 declare_toplevel_type(MemRegion*) \ | |
1045 declare_toplevel_type(OffsetTableContigSpace*) \ | |
1046 declare_toplevel_type(OneContigSpaceCardGeneration*) \ | |
1047 declare_toplevel_type(PermGen*) \ | |
1048 declare_toplevel_type(Space*) \ | |
1049 declare_toplevel_type(ThreadLocalAllocBuffer*) \ | |
1050 \ | |
1051 /************************/ \ | |
1052 /* PerfMemory - jvmstat */ \ | |
1053 /************************/ \ | |
1054 \ | |
1055 declare_toplevel_type(PerfDataPrologue) \ | |
1056 declare_toplevel_type(PerfDataPrologue*) \ | |
1057 declare_toplevel_type(PerfDataEntry) \ | |
1058 declare_toplevel_type(PerfMemory) \ | |
1059 \ | |
1060 /*********************************/ \ | |
1061 /* SymbolTable, SystemDictionary */ \ | |
1062 /*********************************/ \ | |
1063 \ | |
1064 declare_toplevel_type(BasicHashtable) \ | |
1065 declare_type(Hashtable, BasicHashtable) \ | |
1066 declare_type(SymbolTable, Hashtable) \ | |
1067 declare_type(StringTable, Hashtable) \ | |
1068 declare_type(LoaderConstraintTable, Hashtable) \ | |
1069 declare_type(TwoOopHashtable, Hashtable) \ | |
1070 declare_type(Dictionary, TwoOopHashtable) \ | |
1071 declare_type(PlaceholderTable, TwoOopHashtable) \ | |
1072 declare_toplevel_type(Hashtable*) \ | |
1073 declare_toplevel_type(SymbolTable*) \ | |
1074 declare_toplevel_type(StringTable*) \ | |
1075 declare_toplevel_type(LoaderConstraintTable*) \ | |
1076 declare_toplevel_type(TwoOopHashtable*) \ | |
1077 declare_toplevel_type(Dictionary*) \ | |
1078 declare_toplevel_type(PlaceholderTable*) \ | |
1079 declare_toplevel_type(BasicHashtableEntry) \ | |
1080 declare_toplevel_type(BasicHashtableEntry*) \ | |
1081 declare_type(HashtableEntry, BasicHashtableEntry) \ | |
1082 declare_type(DictionaryEntry, HashtableEntry) \ | |
1083 declare_type(PlaceholderEntry, HashtableEntry) \ | |
1084 declare_type(LoaderConstraintEntry, HashtableEntry) \ | |
1085 declare_toplevel_type(HashtableEntry*) \ | |
1086 declare_toplevel_type(DictionaryEntry*) \ | |
1087 declare_toplevel_type(HashtableBucket) \ | |
1088 declare_toplevel_type(HashtableBucket*) \ | |
1089 declare_toplevel_type(SystemDictionary) \ | |
1090 declare_toplevel_type(ProtectionDomainEntry) \ | |
1091 declare_toplevel_type(ProtectionDomainEntry*) \ | |
1092 \ | |
1093 /***********************************************************/ \ | |
1094 /* Thread hierarchy (needed for run-time type information) */ \ | |
1095 /***********************************************************/ \ | |
1096 \ | |
1097 declare_toplevel_type(Threads) \ | |
1098 declare_toplevel_type(ThreadShadow) \ | |
1099 declare_type(Thread, ThreadShadow) \ | |
1100 declare_type(NamedThread, Thread) \ | |
1101 declare_type(WatcherThread, Thread) \ | |
1102 declare_type(JavaThread, Thread) \ | |
1103 declare_type(JvmtiAgentThread, JavaThread) \ | |
1104 declare_type(LowMemoryDetectorThread, JavaThread) \ | |
1105 declare_type(CompilerThread, JavaThread) \ | |
1106 declare_toplevel_type(OSThread) \ | |
1107 declare_toplevel_type(JavaFrameAnchor) \ | |
1108 \ | |
1109 /***************/ \ | |
1110 /* Interpreter */ \ | |
1111 /***************/ \ | |
1112 \ | |
1113 declare_toplevel_type(AbstractInterpreter) \ | |
1114 \ | |
1115 /*********/ \ | |
1116 /* Stubs */ \ | |
1117 /*********/ \ | |
1118 \ | |
1119 declare_toplevel_type(StubQueue) \ | |
1120 declare_toplevel_type(StubRoutines) \ | |
304 | 1121 IA32_ONLY(declare_toplevel_type(StubRoutines::x86)) \ |
0 | 1122 declare_toplevel_type(Stub) \ |
1123 declare_type(InterpreterCodelet, Stub) \ | |
1124 \ | |
1125 /*************/ \ | |
1126 /* JavaCalls */ \ | |
1127 /*************/ \ | |
1128 \ | |
1129 declare_toplevel_type(JavaCallWrapper) \ | |
1130 \ | |
1131 /*************/ \ | |
1132 /* CodeCache */ \ | |
1133 /*************/ \ | |
1134 \ | |
1135 declare_toplevel_type(CodeCache) \ | |
1136 \ | |
1137 /************/ \ | |
1138 /* CodeHeap */ \ | |
1139 /************/ \ | |
1140 \ | |
1141 declare_toplevel_type(CodeHeap) \ | |
1142 declare_toplevel_type(CodeHeap*) \ | |
1143 declare_toplevel_type(HeapBlock) \ | |
1144 declare_toplevel_type(HeapBlock::Header) \ | |
1145 declare_type(FreeBlock, HeapBlock) \ | |
1146 \ | |
1147 /*************************************************************/ \ | |
1148 /* CodeBlob hierarchy (needed for run-time type information) */ \ | |
1149 /*************************************************************/ \ | |
1150 \ | |
1151 declare_toplevel_type(CodeBlob) \ | |
1152 declare_type(BufferBlob, CodeBlob) \ | |
1153 declare_type(nmethod, CodeBlob) \ | |
1154 declare_type(RuntimeStub, CodeBlob) \ | |
1155 declare_type(SingletonBlob, CodeBlob) \ | |
1156 declare_type(SafepointBlob, SingletonBlob) \ | |
1157 declare_type(DeoptimizationBlob, SingletonBlob) \ | |
1158 declare_c2_type(ExceptionBlob, SingletonBlob) \ | |
1159 declare_c2_type(UncommonTrapBlob, CodeBlob) \ | |
1160 \ | |
1161 /***************************************/ \ | |
1162 /* PcDesc and other compiled code info */ \ | |
1163 /***************************************/ \ | |
1164 \ | |
1165 declare_toplevel_type(PcDesc) \ | |
931
72088be4b386
6873116: Modify reexecute implementation to use pcDesc to record the reexecute bit
cfang
parents:
844
diff
changeset
|
1166 declare_integer_type(PcDesc::PcDescFlags) \ |
0 | 1167 \ |
1168 /************************/ \ | |
1169 /* OopMap and OopMapSet */ \ | |
1170 /************************/ \ | |
1171 \ | |
1172 declare_toplevel_type(OopMap) \ | |
1173 declare_toplevel_type(OopMapSet) \ | |
1174 \ | |
1175 /********************/ \ | |
1176 /* CompressedStream */ \ | |
1177 /********************/ \ | |
1178 \ | |
1179 declare_toplevel_type(CompressedStream) \ | |
1180 \ | |
1181 /**************/ \ | |
1182 /* VMRegImpl */ \ | |
1183 /**************/ \ | |
1184 \ | |
1185 declare_toplevel_type(VMRegImpl) \ | |
1186 \ | |
1187 /*********************************/ \ | |
1188 /* JNIHandles and JNIHandleBlock */ \ | |
1189 /*********************************/ \ | |
1190 \ | |
1191 declare_toplevel_type(JNIHandles) \ | |
1192 declare_toplevel_type(JNIHandleBlock) \ | |
1193 \ | |
1194 /**********************/ \ | |
1195 /* Runtime1 (C1 only) */ \ | |
1196 /**********************/ \ | |
1197 \ | |
1198 declare_c1_toplevel_type(Runtime1) \ | |
1199 \ | |
1200 /************/ \ | |
1201 /* Monitors */ \ | |
1202 /************/ \ | |
1203 \ | |
1204 declare_toplevel_type(ObjectMonitor) \ | |
1205 declare_toplevel_type(ObjectSynchronizer) \ | |
1206 declare_toplevel_type(BasicLock) \ | |
1207 declare_toplevel_type(BasicObjectLock) \ | |
1208 \ | |
1209 /*********************/ \ | |
1210 /* Matcher (C2 only) */ \ | |
1211 /*********************/ \ | |
1212 \ | |
1213 /* NOTE: this is not really a toplevel type, but we only need */ \ | |
1214 /* this one -- FIXME later if necessary */ \ | |
1215 declare_c2_toplevel_type(Matcher) \ | |
1216 \ | |
1217 /*********************/ \ | |
1218 /* Adapter Blob Entries */ \ | |
1219 /*********************/ \ | |
1220 declare_toplevel_type(AdapterHandlerEntry) \ | |
1221 declare_toplevel_type(AdapterHandlerEntry*) \ | |
1222 \ | |
1223 /********************/ \ | |
1224 /* -XX flags */ \ | |
1225 /********************/ \ | |
1226 \ | |
1227 declare_toplevel_type(Flag) \ | |
1228 declare_toplevel_type(Flag*) \ | |
1229 \ | |
1230 /********************/ \ | |
1231 /* JDK/VM version */ \ | |
1232 /********************/ \ | |
1233 \ | |
1234 declare_toplevel_type(Abstract_VM_Version) \ | |
1235 declare_toplevel_type(JDK_Version) \ | |
1236 \ | |
1237 /*************/ \ | |
1238 /* Arguments */ \ | |
1239 /*************/ \ | |
1240 \ | |
1241 declare_toplevel_type(Arguments) \ | |
1242 \ | |
1243 /***************/ \ | |
1244 /* Other types */ \ | |
1245 /***************/ \ | |
1246 \ | |
1247 /* all enum types */ \ | |
1248 \ | |
1249 declare_integer_type(Bytecodes::Code) \ | |
1250 declare_integer_type(Generation::Name) \ | |
1251 declare_integer_type(instanceKlass::ClassState) \ | |
1252 declare_integer_type(JavaThreadState) \ | |
1253 declare_integer_type(Location::Type) \ | |
1254 declare_integer_type(Location::Where) \ | |
1255 declare_integer_type(PermGen::Name) \ | |
1256 \ | |
1257 declare_integer_type(AccessFlags) /* FIXME: wrong type (not integer) */\ | |
1258 declare_toplevel_type(address) /* FIXME: should this be an integer type? */\ | |
1259 declare_toplevel_type(BreakpointInfo) \ | |
1260 declare_toplevel_type(BreakpointInfo*) \ | |
1261 declare_toplevel_type(CodeBlob*) \ | |
1262 declare_toplevel_type(CompressedWriteStream*) \ | |
1263 declare_toplevel_type(ConstantPoolCacheEntry) \ | |
1264 declare_toplevel_type(elapsedTimer) \ | |
1265 declare_toplevel_type(intptr_t*) \ | |
1266 declare_unsigned_integer_type(InvocationCounter) /* FIXME: wrong type (not integer) */ \ | |
1267 declare_toplevel_type(JavaThread*) \ | |
1268 declare_toplevel_type(jbyte*) \ | |
1269 declare_toplevel_type(jbyte**) \ | |
1270 declare_toplevel_type(jint*) \ | |
1271 declare_toplevel_type(jniIdMapBase*) \ | |
1272 declare_unsigned_integer_type(juint) \ | |
1273 declare_unsigned_integer_type(julong) \ | |
1274 declare_toplevel_type(JNIHandleBlock*) \ | |
1275 declare_toplevel_type(JNIid) \ | |
1276 declare_toplevel_type(JNIid*) \ | |
1277 declare_toplevel_type(jmethodID*) \ | |
1278 declare_toplevel_type(Mutex*) \ | |
1279 declare_toplevel_type(nmethod*) \ | |
1280 declare_toplevel_type(ObjectMonitor*) \ | |
1281 declare_toplevel_type(oop*) \ | |
1282 declare_toplevel_type(OopMap**) \ | |
1283 declare_toplevel_type(OopMapCache*) \ | |
1284 declare_toplevel_type(OopMapSet*) \ | |
1285 declare_toplevel_type(VMReg) \ | |
1286 declare_toplevel_type(OSThread*) \ | |
1287 declare_integer_type(ReferenceType) \ | |
1288 declare_toplevel_type(StubQueue*) \ | |
1289 declare_toplevel_type(Thread*) \ | |
1290 declare_toplevel_type(Universe) | |
1291 | |
1292 /* NOTE that we do not use the last_entry() macro here; it is used */ | |
1293 /* in vmStructs_<os>_<cpu>.hpp's VM_TYPES_OS_CPU macro (and must be */ | |
1294 /* present there) */ | |
1295 | |
1296 //-------------------------------------------------------------------------------- | |
1297 // VM_INT_CONSTANTS | |
1298 // | |
1299 // This table contains integer constants required over in the | |
1300 // serviceability agent. The "declare_constant" macro is used for all | |
1301 // enums, etc., while "declare_preprocessor_constant" must be used for | |
1302 // all #defined constants. | |
1303 | |
1304 #define VM_INT_CONSTANTS(declare_constant, \ | |
1305 declare_preprocessor_constant, \ | |
1306 declare_c1_constant, \ | |
1307 declare_c2_constant, \ | |
1308 declare_c2_preprocessor_constant, \ | |
1309 last_entry) \ | |
1310 \ | |
1311 /******************/ \ | |
1312 /* Useful globals */ \ | |
1313 /******************/ \ | |
1314 \ | |
1315 declare_constant(UseTLAB) \ | |
1316 \ | |
1317 /**************/ \ | |
1318 /* Stack bias */ \ | |
1319 /**************/ \ | |
1320 \ | |
1321 declare_preprocessor_constant("STACK_BIAS", STACK_BIAS) \ | |
1322 \ | |
1323 /****************/ \ | |
1324 /* Object sizes */ \ | |
1325 /****************/ \ | |
1326 \ | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
1327 declare_constant(oopSize) \ |
0 | 1328 declare_constant(LogBytesPerWord) \ |
1329 declare_constant(BytesPerLong) \ | |
1330 \ | |
1331 /********************/ \ | |
1332 /* Object alignment */ \ | |
1333 /********************/ \ | |
1334 \ | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
1335 declare_constant(MinObjAlignment) \ |
0 | 1336 declare_constant(MinObjAlignmentInBytes) \ |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
1337 declare_constant(LogMinObjAlignmentInBytes) \ |
0 | 1338 \ |
1339 /********************************************/ \ | |
1340 /* Generation and Space Hierarchy Constants */ \ | |
1341 /********************************************/ \ | |
1342 \ | |
1343 declare_constant(ageTable::table_size) \ | |
1344 \ | |
1345 declare_constant(BarrierSet::ModRef) \ | |
1346 declare_constant(BarrierSet::CardTableModRef) \ | |
1347 declare_constant(BarrierSet::Other) \ | |
1348 \ | |
1349 declare_constant(BlockOffsetSharedArray::LogN) \ | |
1350 declare_constant(BlockOffsetSharedArray::LogN_words) \ | |
1351 declare_constant(BlockOffsetSharedArray::N_bytes) \ | |
1352 declare_constant(BlockOffsetSharedArray::N_words) \ | |
1353 \ | |
1354 declare_constant(BlockOffsetArray::N_words) \ | |
1355 \ | |
1356 declare_constant(CardTableModRefBS::clean_card) \ | |
1357 declare_constant(CardTableModRefBS::last_card) \ | |
1358 declare_constant(CardTableModRefBS::dirty_card) \ | |
1359 declare_constant(CardTableModRefBS::Precise) \ | |
1360 declare_constant(CardTableModRefBS::ObjHeadPreciseArray) \ | |
1361 declare_constant(CardTableModRefBS::card_shift) \ | |
1362 declare_constant(CardTableModRefBS::card_size) \ | |
1363 declare_constant(CardTableModRefBS::card_size_in_words) \ | |
1364 \ | |
1365 declare_constant(CardTableRS::youngergen_card) \ | |
1366 \ | |
1367 declare_constant(CollectedHeap::Abstract) \ | |
1368 declare_constant(CollectedHeap::SharedHeap) \ | |
1369 declare_constant(CollectedHeap::GenCollectedHeap) \ | |
1370 \ | |
1371 declare_constant(GenCollectedHeap::max_gens) \ | |
1372 \ | |
1373 /* constants from Generation::Name enum */ \ | |
1374 \ | |
1375 declare_constant(Generation::DefNew) \ | |
1376 declare_constant(Generation::MarkSweepCompact) \ | |
1377 declare_constant(Generation::Other) \ | |
1378 \ | |
1379 declare_constant(Generation::LogOfGenGrain) \ | |
1380 declare_constant(Generation::GenGrain) \ | |
1381 \ | |
1382 declare_constant(HeapWordSize) \ | |
1383 declare_constant(LogHeapWordSize) \ | |
1384 \ | |
1385 /* constants from PermGen::Name enum */ \ | |
1386 \ | |
1387 declare_constant(PermGen::MarkSweepCompact) \ | |
1388 declare_constant(PermGen::MarkSweep) \ | |
1389 \ | |
1390 /************************/ \ | |
1391 /* PerfMemory - jvmstat */ \ | |
1392 /************************/ \ | |
1393 \ | |
1394 declare_preprocessor_constant("PERFDATA_MAJOR_VERSION", PERFDATA_MAJOR_VERSION) \ | |
1395 declare_preprocessor_constant("PERFDATA_MINOR_VERSION", PERFDATA_MINOR_VERSION) \ | |
1396 declare_preprocessor_constant("PERFDATA_BIG_ENDIAN", PERFDATA_BIG_ENDIAN) \ | |
1397 declare_preprocessor_constant("PERFDATA_LITTLE_ENDIAN", PERFDATA_LITTLE_ENDIAN) \ | |
1398 \ | |
1399 /***************/ \ | |
1400 /* SymbolTable */ \ | |
1401 /***************/ \ | |
1402 \ | |
1403 declare_constant(SymbolTable::symbol_table_size) \ | |
1404 \ | |
1405 /***************/ \ | |
1406 /* StringTable */ \ | |
1407 /***************/ \ | |
1408 \ | |
1409 declare_constant(StringTable::string_table_size) \ | |
1410 \ | |
1411 /********************/ \ | |
1412 /* SystemDictionary */ \ | |
1413 /********************/ \ | |
1414 \ | |
1415 declare_constant(SystemDictionary::_loader_constraint_size) \ | |
1416 declare_constant(SystemDictionary::_nof_buckets) \ | |
1417 \ | |
1418 /***********************************/ \ | |
1419 /* LoaderConstraintTable constants */ \ | |
1420 /***********************************/ \ | |
1421 \ | |
1422 declare_constant(LoaderConstraintTable::_loader_constraint_size) \ | |
1423 declare_constant(LoaderConstraintTable::_nof_buckets) \ | |
1424 \ | |
1425 /************************************************************/ \ | |
1426 /* HotSpot specific JVM_ACC constants from global anon enum */ \ | |
1427 /************************************************************/ \ | |
1428 \ | |
1429 declare_constant(JVM_ACC_WRITTEN_FLAGS) \ | |
1430 declare_constant(JVM_ACC_MONITOR_MATCH) \ | |
1431 declare_constant(JVM_ACC_HAS_MONITOR_BYTECODES) \ | |
1432 declare_constant(JVM_ACC_HAS_LOOPS) \ | |
1433 declare_constant(JVM_ACC_LOOPS_FLAG_INIT) \ | |
1434 declare_constant(JVM_ACC_QUEUED) \ | |
1435 declare_constant(JVM_ACC_NOT_OSR_COMPILABLE) \ | |
1436 declare_constant(JVM_ACC_HAS_LINE_NUMBER_TABLE) \ | |
1437 declare_constant(JVM_ACC_HAS_CHECKED_EXCEPTIONS) \ | |
1438 declare_constant(JVM_ACC_HAS_JSRS) \ | |
1439 declare_constant(JVM_ACC_IS_OLD) \ | |
1440 declare_constant(JVM_ACC_IS_OBSOLETE) \ | |
1441 declare_constant(JVM_ACC_IS_PREFIXED_NATIVE) \ | |
1442 declare_constant(JVM_ACC_HAS_MIRANDA_METHODS) \ | |
1443 declare_constant(JVM_ACC_HAS_VANILLA_CONSTRUCTOR) \ | |
1444 declare_constant(JVM_ACC_HAS_FINALIZER) \ | |
1445 declare_constant(JVM_ACC_IS_CLONEABLE) \ | |
1446 declare_constant(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE) \ | |
1447 declare_constant(JVM_ACC_PROMOTED_FLAGS) \ | |
1448 declare_constant(JVM_ACC_FIELD_ACCESS_WATCHED) \ | |
1449 declare_constant(JVM_ACC_FIELD_MODIFICATION_WATCHED) \ | |
1450 \ | |
1451 /*****************************/ \ | |
1452 /* Thread::SuspendFlags enum */ \ | |
1453 /*****************************/ \ | |
1454 \ | |
1455 declare_constant(Thread::_external_suspend) \ | |
1456 declare_constant(Thread::_ext_suspended) \ | |
1457 declare_constant(Thread::_has_async_exception) \ | |
1458 \ | |
1459 /*******************/ \ | |
1460 /* JavaThreadState */ \ | |
1461 /*******************/ \ | |
1462 \ | |
1463 declare_constant(_thread_uninitialized) \ | |
1464 declare_constant(_thread_new) \ | |
1465 declare_constant(_thread_new_trans) \ | |
1466 declare_constant(_thread_in_native) \ | |
1467 declare_constant(_thread_in_native_trans) \ | |
1468 declare_constant(_thread_in_vm) \ | |
1469 declare_constant(_thread_in_vm_trans) \ | |
1470 declare_constant(_thread_in_Java) \ | |
1471 declare_constant(_thread_in_Java_trans) \ | |
1472 declare_constant(_thread_blocked) \ | |
1473 declare_constant(_thread_blocked_trans) \ | |
1474 \ | |
1475 /******************************/ \ | |
1476 /* Klass misc. enum constants */ \ | |
1477 /******************************/ \ | |
1478 \ | |
1479 declare_constant(Klass::_primary_super_limit) \ | |
1480 declare_constant(Klass::_lh_instance_slow_path_bit) \ | |
1481 declare_constant(Klass::_lh_log2_element_size_shift) \ | |
1482 declare_constant(Klass::_lh_element_type_shift) \ | |
1483 declare_constant(Klass::_lh_header_size_shift) \ | |
1484 declare_constant(Klass::_lh_array_tag_shift) \ | |
1485 declare_constant(Klass::_lh_array_tag_type_value) \ | |
1486 declare_constant(Klass::_lh_array_tag_obj_value) \ | |
1487 \ | |
1488 /********************************/ \ | |
1489 /* constMethodOopDesc anon-enum */ \ | |
1490 /********************************/ \ | |
1491 \ | |
1492 declare_constant(constMethodOopDesc::_has_linenumber_table) \ | |
1493 declare_constant(constMethodOopDesc::_has_checked_exceptions) \ | |
1494 declare_constant(constMethodOopDesc::_has_localvariable_table) \ | |
1495 \ | |
1496 /*************************************/ \ | |
1497 /* instanceKlass FieldOffset enum */ \ | |
1498 /*************************************/ \ | |
1499 \ | |
1500 declare_constant(instanceKlass::access_flags_offset) \ | |
1501 declare_constant(instanceKlass::name_index_offset) \ | |
1502 declare_constant(instanceKlass::signature_index_offset) \ | |
1503 declare_constant(instanceKlass::initval_index_offset) \ | |
1504 declare_constant(instanceKlass::low_offset) \ | |
1505 declare_constant(instanceKlass::high_offset) \ | |
1506 declare_constant(instanceKlass::generic_signature_offset) \ | |
1507 declare_constant(instanceKlass::next_offset) \ | |
1508 declare_constant(instanceKlass::implementors_limit) \ | |
1509 \ | |
1510 /************************************************/ \ | |
1511 /* instanceKlass InnerClassAttributeOffset enum */ \ | |
1512 /************************************************/ \ | |
1513 \ | |
1514 declare_constant(instanceKlass::inner_class_inner_class_info_offset) \ | |
1515 declare_constant(instanceKlass::inner_class_outer_class_info_offset) \ | |
1516 declare_constant(instanceKlass::inner_class_inner_name_offset) \ | |
1517 declare_constant(instanceKlass::inner_class_access_flags_offset) \ | |
1518 declare_constant(instanceKlass::inner_class_next_offset) \ | |
1519 \ | |
1520 /*********************************/ \ | |
1521 /* instanceKlass ClassState enum */ \ | |
1522 /*********************************/ \ | |
1523 \ | |
1524 declare_constant(instanceKlass::unparsable_by_gc) \ | |
1525 declare_constant(instanceKlass::allocated) \ | |
1526 declare_constant(instanceKlass::loaded) \ | |
1527 declare_constant(instanceKlass::linked) \ | |
1528 declare_constant(instanceKlass::being_initialized) \ | |
1529 declare_constant(instanceKlass::fully_initialized) \ | |
1530 declare_constant(instanceKlass::initialization_error) \ | |
1531 \ | |
1532 /*********************************/ \ | |
1533 /* symbolOop - symbol max length */ \ | |
1534 /*********************************/ \ | |
1535 \ | |
1536 declare_constant(symbolOopDesc::max_symbol_length) \ | |
1537 \ | |
1538 /*********************************************/ \ | |
1539 /* ConstantPoolCacheEntry FlagBitValues enum */ \ | |
1540 /*********************************************/ \ | |
1541 \ | |
1542 declare_constant(ConstantPoolCacheEntry::hotSwapBit) \ | |
1543 declare_constant(ConstantPoolCacheEntry::methodInterface) \ | |
1544 declare_constant(ConstantPoolCacheEntry::volatileField) \ | |
1545 declare_constant(ConstantPoolCacheEntry::vfinalMethod) \ | |
1546 declare_constant(ConstantPoolCacheEntry::finalField) \ | |
1547 \ | |
1548 /******************************************/ \ | |
1549 /* ConstantPoolCacheEntry FlagValues enum */ \ | |
1550 /******************************************/ \ | |
1551 \ | |
1552 declare_constant(ConstantPoolCacheEntry::tosBits) \ | |
1553 \ | |
1554 /*********************************/ \ | |
1555 /* java_lang_Class field offsets */ \ | |
1556 /*********************************/ \ | |
1557 \ | |
1558 declare_constant(java_lang_Class::hc_klass_offset) \ | |
1559 declare_constant(java_lang_Class::hc_array_klass_offset) \ | |
1560 declare_constant(java_lang_Class::hc_resolved_constructor_offset) \ | |
1561 declare_constant(java_lang_Class::hc_number_of_fake_oop_fields) \ | |
1562 \ | |
1563 /***************************************/ \ | |
1564 /* java_lang_Thread::ThreadStatus enum */ \ | |
1565 /***************************************/ \ | |
1566 \ | |
1567 declare_constant(java_lang_Thread::NEW) \ | |
1568 declare_constant(java_lang_Thread::RUNNABLE) \ | |
1569 declare_constant(java_lang_Thread::SLEEPING) \ | |
1570 declare_constant(java_lang_Thread::IN_OBJECT_WAIT) \ | |
1571 declare_constant(java_lang_Thread::IN_OBJECT_WAIT_TIMED) \ | |
1572 declare_constant(java_lang_Thread::PARKED) \ | |
1573 declare_constant(java_lang_Thread::PARKED_TIMED) \ | |
1574 declare_constant(java_lang_Thread::BLOCKED_ON_MONITOR_ENTER) \ | |
1575 declare_constant(java_lang_Thread::TERMINATED) \ | |
1576 \ | |
1577 /******************************/ \ | |
1578 /* Debug info */ \ | |
1579 /******************************/ \ | |
1580 \ | |
1581 declare_constant(Location::OFFSET_MASK) \ | |
1582 declare_constant(Location::OFFSET_SHIFT) \ | |
1583 declare_constant(Location::TYPE_MASK) \ | |
1584 declare_constant(Location::TYPE_SHIFT) \ | |
1585 declare_constant(Location::WHERE_MASK) \ | |
1586 declare_constant(Location::WHERE_SHIFT) \ | |
1587 \ | |
1588 /* constants from Location::Type enum */ \ | |
1589 \ | |
1590 declare_constant(Location::normal) \ | |
1591 declare_constant(Location::oop) \ | |
331
cecd8eb4e0ca
6706829: Compressed Oops: add debug info for narrow oops
kvn
parents:
304
diff
changeset
|
1592 declare_constant(Location::narrowoop) \ |
0 | 1593 declare_constant(Location::int_in_long) \ |
1594 declare_constant(Location::lng) \ | |
1595 declare_constant(Location::float_in_dbl) \ | |
1596 declare_constant(Location::dbl) \ | |
1597 declare_constant(Location::addr) \ | |
1598 declare_constant(Location::invalid) \ | |
1599 \ | |
1600 /* constants from Location::Where enum */ \ | |
1601 \ | |
1602 declare_constant(Location::on_stack) \ | |
1603 declare_constant(Location::in_register) \ | |
1604 \ | |
1605 /*********************/ \ | |
1606 /* Matcher (C2 only) */ \ | |
1607 /*********************/ \ | |
1608 \ | |
1609 declare_c2_preprocessor_constant("Matcher::interpreter_frame_pointer_reg", Matcher::interpreter_frame_pointer_reg()) \ | |
1610 \ | |
1611 /*********************************************/ \ | |
1612 /* MethodCompilation (globalDefinitions.hpp) */ \ | |
1613 /*********************************************/ \ | |
1614 \ | |
1615 declare_constant(InvocationEntryBci) \ | |
1616 declare_constant(InvalidOSREntryBci) \ | |
1617 \ | |
1618 /***************/ \ | |
1619 /* OopMapValue */ \ | |
1620 /***************/ \ | |
1621 \ | |
1622 declare_constant(OopMapValue::type_bits) \ | |
1623 declare_constant(OopMapValue::register_bits) \ | |
1624 declare_constant(OopMapValue::type_shift) \ | |
1625 declare_constant(OopMapValue::register_shift) \ | |
1626 declare_constant(OopMapValue::type_mask) \ | |
1627 declare_constant(OopMapValue::type_mask_in_place) \ | |
1628 declare_constant(OopMapValue::register_mask) \ | |
1629 declare_constant(OopMapValue::register_mask_in_place) \ | |
1630 declare_constant(OopMapValue::unused_value) \ | |
1631 declare_constant(OopMapValue::oop_value) \ | |
1632 declare_constant(OopMapValue::value_value) \ | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
1633 declare_constant(OopMapValue::narrowoop_value) \ |
0 | 1634 declare_constant(OopMapValue::callee_saved_value) \ |
1635 declare_constant(OopMapValue::derived_oop_value) \ | |
1636 \ | |
1637 /******************/ \ | |
1638 /* JNIHandleBlock */ \ | |
1639 /******************/ \ | |
1640 \ | |
1641 declare_constant(JNIHandleBlock::block_size_in_oops) \ | |
1642 \ | |
1643 /**********************/ \ | |
1644 /* ObjectSynchronizer */ \ | |
1645 /**********************/ \ | |
1646 \ | |
1647 declare_constant(ObjectSynchronizer::_BLOCKSIZE) \ | |
1648 \ | |
1649 /********************************/ \ | |
1650 /* Calling convention constants */ \ | |
1651 /********************************/ \ | |
1652 \ | |
1653 declare_constant(RegisterImpl::number_of_registers) \ | |
1654 declare_constant(ConcreteRegisterImpl::number_of_registers) \ | |
1655 declare_preprocessor_constant("REG_COUNT", REG_COUNT) \ | |
1656 declare_c2_preprocessor_constant("SAVED_ON_ENTRY_REG_COUNT", SAVED_ON_ENTRY_REG_COUNT) \ | |
1657 declare_c2_preprocessor_constant("C_SAVED_ON_ENTRY_REG_COUNT", C_SAVED_ON_ENTRY_REG_COUNT) | |
1658 | |
1659 /* NOTE that we do not use the last_entry() macro here; it is used */ | |
1660 /* in vmStructs_<os>_<cpu>.hpp's VM_INT_CONSTANTS_OS_CPU macro (and */ | |
1661 /* must be present there) */ | |
1662 | |
1663 //-------------------------------------------------------------------------------- | |
1664 // VM_LONG_CONSTANTS | |
1665 // | |
1666 // This table contains long constants required over in the | |
1667 // serviceability agent. The "declare_constant" macro is used for all | |
1668 // enums, etc., while "declare_preprocessor_constant" must be used for | |
1669 // all #defined constants. | |
1670 | |
1671 #define VM_LONG_CONSTANTS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant, last_entry) \ | |
1672 \ | |
1673 /*********************/ \ | |
1674 /* MarkOop constants */ \ | |
1675 /*********************/ \ | |
1676 \ | |
1677 /* Note: some of these are declared as long constants just for */ \ | |
1678 /* consistency. The mask constants are the only ones requiring */ \ | |
1679 /* 64 bits (on 64-bit platforms). */ \ | |
1680 \ | |
1681 declare_constant(markOopDesc::age_bits) \ | |
1682 declare_constant(markOopDesc::lock_bits) \ | |
1683 declare_constant(markOopDesc::biased_lock_bits) \ | |
1684 declare_constant(markOopDesc::max_hash_bits) \ | |
1685 declare_constant(markOopDesc::hash_bits) \ | |
1686 \ | |
1687 declare_constant(markOopDesc::lock_shift) \ | |
1688 declare_constant(markOopDesc::biased_lock_shift) \ | |
1689 declare_constant(markOopDesc::age_shift) \ | |
1690 declare_constant(markOopDesc::hash_shift) \ | |
1691 \ | |
1692 declare_constant(markOopDesc::lock_mask) \ | |
1693 declare_constant(markOopDesc::lock_mask_in_place) \ | |
1694 declare_constant(markOopDesc::biased_lock_mask) \ | |
1695 declare_constant(markOopDesc::biased_lock_mask_in_place) \ | |
1696 declare_constant(markOopDesc::biased_lock_bit_in_place) \ | |
1697 declare_constant(markOopDesc::age_mask) \ | |
1698 declare_constant(markOopDesc::age_mask_in_place) \ | |
1699 declare_constant(markOopDesc::hash_mask) \ | |
1700 declare_constant(markOopDesc::hash_mask_in_place) \ | |
1701 declare_constant(markOopDesc::biased_lock_alignment) \ | |
1702 \ | |
1703 declare_constant(markOopDesc::locked_value) \ | |
1704 declare_constant(markOopDesc::unlocked_value) \ | |
1705 declare_constant(markOopDesc::monitor_value) \ | |
1706 declare_constant(markOopDesc::marked_value) \ | |
1707 declare_constant(markOopDesc::biased_lock_pattern) \ | |
1708 \ | |
1709 declare_constant(markOopDesc::no_hash) \ | |
1710 declare_constant(markOopDesc::no_hash_in_place) \ | |
1711 declare_constant(markOopDesc::no_lock_in_place) \ | |
187 | 1712 declare_constant(markOopDesc::max_age) \ |
1713 \ | |
1714 /* Constants in markOop used by CMS. */ \ | |
1715 declare_constant(markOopDesc::cms_shift) \ | |
1716 declare_constant(markOopDesc::cms_mask) \ | |
1717 declare_constant(markOopDesc::size_shift) \ | |
0 | 1718 |
1719 /* NOTE that we do not use the last_entry() macro here; it is used */ | |
1720 /* in vmStructs_<os>_<cpu>.hpp's VM_LONG_CONSTANTS_OS_CPU macro (and */ | |
1721 /* must be present there) */ | |
1722 | |
1723 | |
1724 //-------------------------------------------------------------------------------- | |
1725 // Macros operating on the above lists | |
1726 //-------------------------------------------------------------------------------- | |
1727 | |
1728 // This utility macro quotes the passed string | |
1729 #define QUOTE(x) #x | |
1730 | |
1731 //-------------------------------------------------------------------------------- | |
1732 // VMStructEntry macros | |
1733 // | |
1734 | |
1735 // This macro generates a VMStructEntry line for a nonstatic field | |
1736 #define GENERATE_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ | |
1737 { QUOTE(typeName), QUOTE(fieldName), QUOTE(type), 0, cast_uint64_t(offset_of(typeName, fieldName)), NULL }, | |
1738 | |
1739 // This macro generates a VMStructEntry line for a static field | |
1740 #define GENERATE_STATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ | |
1741 { QUOTE(typeName), QUOTE(fieldName), QUOTE(type), 1, 0, &typeName::fieldName }, | |
1742 | |
1743 // This macro generates a VMStructEntry line for an unchecked | |
1744 // nonstatic field, in which the size of the type is also specified. | |
1745 // The type string is given as NULL, indicating an "opaque" type. | |
1746 #define GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, size) \ | |
1747 { QUOTE(typeName), QUOTE(fieldName), NULL, 0, cast_uint64_t(offset_of(typeName, fieldName)), NULL }, | |
1748 | |
1749 // This macro generates a VMStructEntry line for an unchecked | |
1750 // static field, in which the size of the type is also specified. | |
1751 // The type string is given as NULL, indicating an "opaque" type. | |
1752 #define GENERATE_UNCHECKED_STATIC_VM_STRUCT_ENTRY(typeName, fieldName, size) \ | |
1753 { QUOTE(typeName), QUOTE(fieldName), NULL, 1, 0, (void*) &typeName::fieldName }, | |
1754 | |
1755 // This macro generates the sentinel value indicating the end of the list | |
1756 #define GENERATE_VM_STRUCT_LAST_ENTRY() \ | |
1757 { NULL, NULL, NULL, 0, 0, NULL } | |
1758 | |
1759 // This macro checks the type of a VMStructEntry by comparing pointer types | |
1760 #define CHECK_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ | |
1761 {typeName *dummyObj = NULL; type* dummy = &dummyObj->fieldName; } | |
1762 | |
1763 // This macro checks the type of a volatile VMStructEntry by comparing pointer types | |
1764 #define CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ | |
1765 {typedef type dummyvtype; typeName *dummyObj = NULL; volatile dummyvtype* dummy = &dummyObj->fieldName; } | |
1766 | |
1767 // This macro checks the type of a VMStructEntry by comparing pointer types | |
1768 #define CHECK_STATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ | |
1769 {type* dummy = &typeName::fieldName; } | |
1770 | |
1771 // This macro ensures the type of a field and its containing type are | |
1772 // present in the type table. The assertion string is shorter than | |
1773 // preferable because (incredibly) of a bug in Solstice NFS client | |
1774 // which seems to prevent very long lines from compiling. This assertion | |
1775 // means that an entry in VMStructs::localHotSpotVMStructs[] was not | |
1776 // found in VMStructs::localHotSpotVMTypes[]. | |
1777 #define ENSURE_FIELD_TYPE_PRESENT(typeName, fieldName, type) \ | |
1778 { assert(findType(QUOTE(typeName)) != 0, "type \"" QUOTE(typeName) "\" not found in type table"); \ | |
1779 assert(findType(QUOTE(type)) != 0, "type \"" QUOTE(type) "\" not found in type table"); } | |
1780 | |
1781 // This is a no-op macro for unchecked fields | |
1782 #define CHECK_NO_OP(a, b, c) | |
1783 | |
1784 // This is a no-op macro for the sentinel value | |
1785 #define CHECK_SENTINEL() | |
1786 | |
1787 // | |
1788 // Build-specific macros: | |
1789 // | |
1790 | |
1791 // Generate and check a nonstatic field in non-product builds | |
1792 #ifndef PRODUCT | |
1793 # define GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) GENERATE_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1794 # define CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) CHECK_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1795 # define ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT(a, b, c) ENSURE_FIELD_TYPE_PRESENT(a, b, c) | |
1796 # define GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) GENERATE_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1797 # define CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) CHECK_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1798 # define ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT(a, b, c) ENSURE_FIELD_TYPE_PRESENT(a, b, c) | |
1799 #else | |
1800 # define GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1801 # define CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1802 # define ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT(a, b, c) | |
1803 # define GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1804 # define CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1805 # define ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT(a, b, c) | |
1806 #endif /* PRODUCT */ | |
1807 | |
1808 // Generate and check a nonstatic field in C1 builds | |
1809 #ifdef COMPILER1 | |
1810 # define GENERATE_C1_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) GENERATE_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1811 # define CHECK_C1_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) CHECK_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1812 # define ENSURE_C1_FIELD_TYPE_PRESENT(a, b, c) ENSURE_FIELD_TYPE_PRESENT(a, b, c) | |
1813 #else | |
1814 # define GENERATE_C1_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1815 # define CHECK_C1_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1816 # define ENSURE_C1_FIELD_TYPE_PRESENT(a, b, c) | |
1817 #endif /* COMPILER1 */ | |
1818 // Generate and check a nonstatic field in C2 builds | |
1819 #ifdef COMPILER2 | |
1820 # define GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) GENERATE_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1821 # define CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) CHECK_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1822 # define ENSURE_C2_FIELD_TYPE_PRESENT(a, b, c) ENSURE_FIELD_TYPE_PRESENT(a, b, c) | |
1823 #else | |
1824 # define GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1825 # define CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) | |
1826 # define ENSURE_C2_FIELD_TYPE_PRESENT(a, b, c) | |
1827 #endif /* COMPILER2 */ | |
1828 | |
1829 // Generate but do not check a static field in C1 builds | |
1830 #ifdef COMPILER1 | |
1831 # define GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY(a, b, c) GENERATE_UNCHECKED_STATIC_VM_STRUCT_ENTRY(a, b, c) | |
1832 #else | |
1833 # define GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY(a, b, c) | |
1834 #endif /* COMPILER1 */ | |
1835 | |
1836 // Generate but do not check a static field in C2 builds | |
1837 #ifdef COMPILER2 | |
1838 # define GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY(a, b, c) GENERATE_UNCHECKED_STATIC_VM_STRUCT_ENTRY(a, b, c) | |
1839 #else | |
1840 # define GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY(a, b, c) | |
1841 #endif /* COMPILER2 */ | |
1842 | |
1843 //-------------------------------------------------------------------------------- | |
1844 // VMTypeEntry macros | |
1845 // | |
1846 | |
1847 #define GENERATE_VM_TYPE_ENTRY(type, superclass) \ | |
1848 { QUOTE(type), QUOTE(superclass), 0, 0, 0, sizeof(type) }, | |
1849 | |
1850 #define GENERATE_TOPLEVEL_VM_TYPE_ENTRY(type) \ | |
1851 { QUOTE(type), NULL, 0, 0, 0, sizeof(type) }, | |
1852 | |
1853 #define GENERATE_OOP_VM_TYPE_ENTRY(type) \ | |
1854 { QUOTE(type), NULL, 1, 0, 0, sizeof(type) }, | |
1855 | |
1856 #define GENERATE_INTEGER_VM_TYPE_ENTRY(type) \ | |
1857 { QUOTE(type), NULL, 0, 1, 0, sizeof(type) }, | |
1858 | |
1859 #define GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY(type) \ | |
1860 { QUOTE(type), NULL, 0, 1, 1, sizeof(type) }, | |
1861 | |
1862 #define GENERATE_VM_TYPE_LAST_ENTRY() \ | |
1863 { NULL, NULL, 0, 0, 0, 0 } | |
1864 | |
1865 #define CHECK_VM_TYPE_ENTRY(type, superclass) \ | |
1866 { type* dummyObj = NULL; superclass* dummySuperObj = dummyObj; } | |
1867 | |
1868 #define CHECK_VM_TYPE_NO_OP(a) | |
1869 #define CHECK_SINGLE_ARG_VM_TYPE_NO_OP(a) | |
1870 | |
1871 // | |
1872 // Build-specific macros: | |
1873 // | |
1874 | |
1875 #ifdef COMPILER1 | |
1876 # define GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY(a) GENERATE_TOPLEVEL_VM_TYPE_ENTRY(a) | |
1877 # define CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY(a) | |
1878 #else | |
1879 # define GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY(a) | |
1880 # define CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY(a) | |
1881 #endif /* COMPILER1 */ | |
1882 | |
1883 #ifdef COMPILER2 | |
1884 # define GENERATE_C2_VM_TYPE_ENTRY(a, b) GENERATE_VM_TYPE_ENTRY(a, b) | |
1885 # define CHECK_C2_VM_TYPE_ENTRY(a, b) CHECK_VM_TYPE_ENTRY(a, b) | |
1886 # define GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY(a) GENERATE_TOPLEVEL_VM_TYPE_ENTRY(a) | |
1887 # define CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY(a) | |
1888 #else | |
1889 # define GENERATE_C2_VM_TYPE_ENTRY(a, b) | |
1890 # define CHECK_C2_VM_TYPE_ENTRY(a, b) | |
1891 # define GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY(a) | |
1892 # define CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY(a) | |
1893 #endif /* COMPILER2 */ | |
1894 | |
1895 | |
1896 //-------------------------------------------------------------------------------- | |
1897 // VMIntConstantEntry macros | |
1898 // | |
1899 | |
1900 #define GENERATE_VM_INT_CONSTANT_ENTRY(name) \ | |
1901 { QUOTE(name), (int32_t) name }, | |
1902 | |
1903 #define GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY(name, value) \ | |
1904 { name, (int32_t) value }, | |
1905 | |
1906 // This macro generates the sentinel value indicating the end of the list | |
1907 #define GENERATE_VM_INT_CONSTANT_LAST_ENTRY() \ | |
1908 { NULL, 0 } | |
1909 | |
1910 | |
1911 // Generate an int constant for a C1 build | |
1912 #ifdef COMPILER1 | |
1913 # define GENERATE_C1_VM_INT_CONSTANT_ENTRY(name) GENERATE_VM_INT_CONSTANT_ENTRY(name) | |
1914 #else | |
1915 # define GENERATE_C1_VM_INT_CONSTANT_ENTRY(name) | |
1916 #endif /* COMPILER1 */ | |
1917 | |
1918 // Generate an int constant for a C2 build | |
1919 #ifdef COMPILER2 | |
1920 # define GENERATE_C2_VM_INT_CONSTANT_ENTRY(name) GENERATE_VM_INT_CONSTANT_ENTRY(name) | |
1921 # define GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY(name, value) GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY(name, value) | |
1922 #else | |
1923 # define GENERATE_C2_VM_INT_CONSTANT_ENTRY(name) | |
1924 # define GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY(name, value) | |
1925 #endif /* COMPILER1 */ | |
1926 | |
1927 //-------------------------------------------------------------------------------- | |
1928 // VMLongConstantEntry macros | |
1929 // | |
1930 | |
1931 #define GENERATE_VM_LONG_CONSTANT_ENTRY(name) \ | |
1932 { QUOTE(name), cast_uint64_t(name) }, | |
1933 | |
1934 #define GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY(name, value) \ | |
1935 { name, cast_uint64_t(value) }, | |
1936 | |
1937 // This macro generates the sentinel value indicating the end of the list | |
1938 #define GENERATE_VM_LONG_CONSTANT_LAST_ENTRY() \ | |
1939 { NULL, 0 } | |
1940 | |
1941 // Generate a long constant for a C1 build | |
1942 #ifdef COMPILER1 | |
1943 # define GENERATE_C1_VM_LONG_CONSTANT_ENTRY(name) GENERATE_VM_LONG_CONSTANT_ENTRY(name) | |
1944 #else | |
1945 # define GENERATE_C1_VM_LONG_CONSTANT_ENTRY(name) | |
1946 #endif /* COMPILER1 */ | |
1947 | |
1948 // Generate a long constant for a C2 build | |
1949 #ifdef COMPILER2 | |
1950 # define GENERATE_C2_VM_LONG_CONSTANT_ENTRY(name) GENERATE_VM_LONG_CONSTANT_ENTRY(name) | |
1951 # define GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY(name, value) GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY(name, value) | |
1952 #else | |
1953 # define GENERATE_C2_VM_LONG_CONSTANT_ENTRY(name) | |
1954 # define GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY(name, value) | |
1955 #endif /* COMPILER1 */ | |
1956 | |
1957 // | |
1958 // Instantiation of VMStructEntries, VMTypeEntries and VMIntConstantEntries | |
1959 // | |
1960 | |
1961 // These initializers are allowed to access private fields in classes | |
1962 // as long as class VMStructs is a friend | |
1963 VMStructEntry VMStructs::localHotSpotVMStructs[] = { | |
1964 | |
1965 VM_STRUCTS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1966 GENERATE_STATIC_VM_STRUCT_ENTRY, \ | |
1967 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1968 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1969 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1970 GENERATE_C1_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1971 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1972 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | |
1973 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | |
1974 GENERATE_VM_STRUCT_LAST_ENTRY) | |
1975 | |
1976 #ifndef SERIALGC | |
1977 VM_STRUCTS_PARALLELGC(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1978 GENERATE_STATIC_VM_STRUCT_ENTRY) | |
1979 | |
1980 VM_STRUCTS_CMS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | |
187 | 1981 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ |
0 | 1982 GENERATE_STATIC_VM_STRUCT_ENTRY) |
1983 #endif // SERIALGC | |
1984 | |
1985 VM_STRUCTS_CPU(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1986 GENERATE_STATIC_VM_STRUCT_ENTRY, \ | |
1987 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1988 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1989 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1990 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1991 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | |
1992 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | |
1993 GENERATE_VM_STRUCT_LAST_ENTRY) | |
1994 | |
1995 VM_STRUCTS_OS_CPU(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1996 GENERATE_STATIC_VM_STRUCT_ENTRY, \ | |
1997 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1998 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | |
1999 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, \ | |
2000 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, \ | |
2001 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | |
2002 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | |
2003 GENERATE_VM_STRUCT_LAST_ENTRY) | |
2004 }; | |
2005 | |
2006 VMTypeEntry VMStructs::localHotSpotVMTypes[] = { | |
2007 | |
2008 VM_TYPES(GENERATE_VM_TYPE_ENTRY, | |
2009 GENERATE_TOPLEVEL_VM_TYPE_ENTRY, | |
2010 GENERATE_OOP_VM_TYPE_ENTRY, | |
2011 GENERATE_INTEGER_VM_TYPE_ENTRY, | |
2012 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, | |
2013 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, | |
2014 GENERATE_C2_VM_TYPE_ENTRY, | |
2015 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY, | |
2016 GENERATE_VM_TYPE_LAST_ENTRY) | |
2017 | |
2018 #ifndef SERIALGC | |
2019 VM_TYPES_PARALLELGC(GENERATE_VM_TYPE_ENTRY, | |
2020 GENERATE_TOPLEVEL_VM_TYPE_ENTRY) | |
2021 | |
2022 VM_TYPES_CMS(GENERATE_VM_TYPE_ENTRY, | |
2023 GENERATE_TOPLEVEL_VM_TYPE_ENTRY) | |
2024 | |
2025 VM_TYPES_PARNEW(GENERATE_VM_TYPE_ENTRY) | |
2026 #endif // SERIALGC | |
2027 | |
2028 VM_TYPES_CPU(GENERATE_VM_TYPE_ENTRY, | |
2029 GENERATE_TOPLEVEL_VM_TYPE_ENTRY, | |
2030 GENERATE_OOP_VM_TYPE_ENTRY, | |
2031 GENERATE_INTEGER_VM_TYPE_ENTRY, | |
2032 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, | |
2033 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, | |
2034 GENERATE_C2_VM_TYPE_ENTRY, | |
2035 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY, | |
2036 GENERATE_VM_TYPE_LAST_ENTRY) | |
2037 | |
2038 VM_TYPES_OS_CPU(GENERATE_VM_TYPE_ENTRY, | |
2039 GENERATE_TOPLEVEL_VM_TYPE_ENTRY, | |
2040 GENERATE_OOP_VM_TYPE_ENTRY, | |
2041 GENERATE_INTEGER_VM_TYPE_ENTRY, | |
2042 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, | |
2043 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, | |
2044 GENERATE_C2_VM_TYPE_ENTRY, | |
2045 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY, | |
2046 GENERATE_VM_TYPE_LAST_ENTRY) | |
2047 }; | |
2048 | |
2049 VMIntConstantEntry VMStructs::localHotSpotVMIntConstants[] = { | |
2050 | |
2051 VM_INT_CONSTANTS(GENERATE_VM_INT_CONSTANT_ENTRY, | |
2052 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | |
2053 GENERATE_C1_VM_INT_CONSTANT_ENTRY, | |
2054 GENERATE_C2_VM_INT_CONSTANT_ENTRY, | |
2055 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | |
2056 GENERATE_VM_INT_CONSTANT_LAST_ENTRY) | |
2057 | |
2058 #ifndef SERIALGC | |
2059 VM_INT_CONSTANTS_CMS(GENERATE_VM_INT_CONSTANT_ENTRY) | |
2060 | |
2061 VM_INT_CONSTANTS_PARNEW(GENERATE_VM_INT_CONSTANT_ENTRY) | |
2062 #endif // SERIALGC | |
2063 | |
2064 VM_INT_CONSTANTS_CPU(GENERATE_VM_INT_CONSTANT_ENTRY, | |
2065 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | |
2066 GENERATE_C1_VM_INT_CONSTANT_ENTRY, | |
2067 GENERATE_C2_VM_INT_CONSTANT_ENTRY, | |
2068 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | |
2069 GENERATE_VM_INT_CONSTANT_LAST_ENTRY) | |
2070 | |
2071 VM_INT_CONSTANTS_OS_CPU(GENERATE_VM_INT_CONSTANT_ENTRY, | |
2072 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | |
2073 GENERATE_C1_VM_INT_CONSTANT_ENTRY, | |
2074 GENERATE_C2_VM_INT_CONSTANT_ENTRY, | |
2075 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | |
2076 GENERATE_VM_INT_CONSTANT_LAST_ENTRY) | |
2077 }; | |
2078 | |
2079 VMLongConstantEntry VMStructs::localHotSpotVMLongConstants[] = { | |
2080 | |
2081 VM_LONG_CONSTANTS(GENERATE_VM_LONG_CONSTANT_ENTRY, | |
2082 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | |
2083 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, | |
2084 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, | |
2085 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | |
2086 GENERATE_VM_LONG_CONSTANT_LAST_ENTRY) | |
2087 | |
2088 VM_LONG_CONSTANTS_CPU(GENERATE_VM_LONG_CONSTANT_ENTRY, | |
2089 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | |
2090 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, | |
2091 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, | |
2092 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | |
2093 GENERATE_VM_LONG_CONSTANT_LAST_ENTRY) | |
2094 | |
2095 VM_LONG_CONSTANTS_OS_CPU(GENERATE_VM_LONG_CONSTANT_ENTRY, | |
2096 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | |
2097 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, | |
2098 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, | |
2099 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | |
2100 GENERATE_VM_LONG_CONSTANT_LAST_ENTRY) | |
2101 }; | |
2102 | |
2103 // This is used both to check the types of referenced fields and, in | |
2104 // debug builds, to ensure that all of the field types are present. | |
2105 void | |
2106 VMStructs::init() { | |
2107 VM_STRUCTS(CHECK_NONSTATIC_VM_STRUCT_ENTRY, | |
2108 CHECK_STATIC_VM_STRUCT_ENTRY, | |
2109 CHECK_NO_OP, | |
2110 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, | |
2111 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, | |
2112 CHECK_C1_NONSTATIC_VM_STRUCT_ENTRY, | |
2113 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, | |
2114 CHECK_NO_OP, | |
2115 CHECK_NO_OP, | |
2116 CHECK_SENTINEL); | |
2117 | |
2118 #ifndef SERIALGC | |
2119 VM_STRUCTS_PARALLELGC(CHECK_NONSTATIC_VM_STRUCT_ENTRY, | |
2120 CHECK_STATIC_VM_STRUCT_ENTRY); | |
2121 | |
2122 VM_STRUCTS_CMS(CHECK_NONSTATIC_VM_STRUCT_ENTRY, | |
187 | 2123 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, |
0 | 2124 CHECK_STATIC_VM_STRUCT_ENTRY); |
2125 #endif // SERIALGC | |
2126 | |
2127 VM_STRUCTS_CPU(CHECK_NONSTATIC_VM_STRUCT_ENTRY, | |
2128 CHECK_STATIC_VM_STRUCT_ENTRY, | |
2129 CHECK_NO_OP, | |
2130 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, | |
2131 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, | |
2132 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, | |
2133 CHECK_NO_OP, | |
2134 CHECK_NO_OP, | |
2135 CHECK_SENTINEL); | |
2136 | |
2137 VM_STRUCTS_OS_CPU(CHECK_NONSTATIC_VM_STRUCT_ENTRY, | |
2138 CHECK_STATIC_VM_STRUCT_ENTRY, | |
2139 CHECK_NO_OP, | |
2140 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, | |
2141 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, | |
2142 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, | |
2143 CHECK_NO_OP, | |
2144 CHECK_NO_OP, | |
2145 CHECK_SENTINEL); | |
2146 | |
2147 VM_TYPES(CHECK_VM_TYPE_ENTRY, | |
2148 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2149 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2150 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2151 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2152 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, | |
2153 CHECK_C2_VM_TYPE_ENTRY, | |
2154 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY, | |
2155 CHECK_SENTINEL); | |
2156 | |
2157 #ifndef SERIALGC | |
2158 VM_TYPES_PARALLELGC(CHECK_VM_TYPE_ENTRY, | |
2159 CHECK_SINGLE_ARG_VM_TYPE_NO_OP); | |
2160 | |
2161 VM_TYPES_CMS(CHECK_VM_TYPE_ENTRY, | |
2162 CHECK_SINGLE_ARG_VM_TYPE_NO_OP); | |
2163 | |
2164 VM_TYPES_PARNEW(CHECK_VM_TYPE_ENTRY) | |
2165 #endif // SERIALGC | |
2166 | |
2167 VM_TYPES_CPU(CHECK_VM_TYPE_ENTRY, | |
2168 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2169 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2170 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2171 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2172 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, | |
2173 CHECK_C2_VM_TYPE_ENTRY, | |
2174 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY, | |
2175 CHECK_SENTINEL); | |
2176 | |
2177 VM_TYPES_OS_CPU(CHECK_VM_TYPE_ENTRY, | |
2178 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2179 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2180 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2181 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | |
2182 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, | |
2183 CHECK_C2_VM_TYPE_ENTRY, | |
2184 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY, | |
2185 CHECK_SENTINEL); | |
2186 | |
2187 // | |
2188 // Split VM_STRUCTS() invocation into two parts to allow MS VC++ 6.0 | |
2189 // to build with the source mounted over SNC3.2. Symptom was that | |
2190 // debug build failed with an internal compiler error. Has been seen | |
2191 // mounting sources from Solaris 2.6 and 2.7 hosts, but so far not | |
2192 // 2.8 hosts. Appears to occur because line is too long. | |
2193 // | |
2194 // If an assertion failure is triggered here it means that an entry | |
2195 // in VMStructs::localHotSpotVMStructs[] was not found in | |
2196 // VMStructs::localHotSpotVMTypes[]. (The assertion itself had to be | |
2197 // made less descriptive because of this above bug -- see the | |
2198 // definition of ENSURE_FIELD_TYPE_PRESENT.) | |
2199 // | |
2200 // NOTE: taken out because this was just not working on everyone's | |
2201 // Solstice NFS setup. If everyone switches to local workspaces on | |
2202 // Win32, we can put this back in. | |
2203 #ifndef _WINDOWS | |
2204 debug_only(VM_STRUCTS(ENSURE_FIELD_TYPE_PRESENT, \ | |
2205 CHECK_NO_OP, \ | |
2206 CHECK_NO_OP, \ | |
2207 CHECK_NO_OP, \ | |
2208 CHECK_NO_OP, \ | |
2209 CHECK_NO_OP, \ | |
2210 CHECK_NO_OP, \ | |
2211 CHECK_NO_OP, \ | |
2212 CHECK_NO_OP, \ | |
2213 CHECK_SENTINEL)); | |
2214 debug_only(VM_STRUCTS(CHECK_NO_OP, \ | |
2215 ENSURE_FIELD_TYPE_PRESENT, \ | |
2216 CHECK_NO_OP, \ | |
2217 ENSURE_FIELD_TYPE_PRESENT, \ | |
2218 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, \ | |
2219 ENSURE_C1_FIELD_TYPE_PRESENT, \ | |
2220 ENSURE_C2_FIELD_TYPE_PRESENT, \ | |
2221 CHECK_NO_OP, \ | |
2222 CHECK_NO_OP, \ | |
2223 CHECK_SENTINEL)); | |
2224 #ifndef SERIALGC | |
2225 debug_only(VM_STRUCTS_PARALLELGC(ENSURE_FIELD_TYPE_PRESENT, \ | |
2226 ENSURE_FIELD_TYPE_PRESENT)); | |
2227 debug_only(VM_STRUCTS_CMS(ENSURE_FIELD_TYPE_PRESENT, \ | |
187 | 2228 ENSURE_FIELD_TYPE_PRESENT, \ |
0 | 2229 ENSURE_FIELD_TYPE_PRESENT)); |
2230 #endif // SERIALGC | |
2231 debug_only(VM_STRUCTS_CPU(ENSURE_FIELD_TYPE_PRESENT, \ | |
2232 ENSURE_FIELD_TYPE_PRESENT, \ | |
2233 CHECK_NO_OP, \ | |
2234 ENSURE_FIELD_TYPE_PRESENT, \ | |
2235 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, \ | |
2236 ENSURE_C2_FIELD_TYPE_PRESENT, \ | |
2237 CHECK_NO_OP, \ | |
2238 CHECK_NO_OP, \ | |
2239 CHECK_SENTINEL)); | |
2240 debug_only(VM_STRUCTS_OS_CPU(ENSURE_FIELD_TYPE_PRESENT, \ | |
2241 ENSURE_FIELD_TYPE_PRESENT, \ | |
2242 CHECK_NO_OP, \ | |
2243 ENSURE_FIELD_TYPE_PRESENT, \ | |
2244 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, \ | |
2245 ENSURE_C2_FIELD_TYPE_PRESENT, \ | |
2246 CHECK_NO_OP, \ | |
2247 CHECK_NO_OP, \ | |
2248 CHECK_SENTINEL)); | |
2249 #endif | |
2250 } | |
2251 | |
2252 extern "C" { | |
2253 | |
2254 // see comments on cast_uint64_t at the top of this file | |
2255 #define ASSIGN_CONST_TO_64BIT_VAR(var, expr) \ | |
2256 JNIEXPORT uint64_t var = cast_uint64_t(expr); | |
2257 #define ASSIGN_OFFSET_TO_64BIT_VAR(var, type, field) \ | |
2258 ASSIGN_CONST_TO_64BIT_VAR(var, offset_of(type, field)) | |
2259 #define ASSIGN_STRIDE_TO_64BIT_VAR(var, array) \ | |
2260 ASSIGN_CONST_TO_64BIT_VAR(var, (char*)&array[1] - (char*)&array[0]) | |
2261 | |
2262 JNIEXPORT VMStructEntry* gHotSpotVMStructs = VMStructs::localHotSpotVMStructs; | |
2263 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryTypeNameOffset, VMStructEntry, typeName); | |
2264 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryFieldNameOffset, VMStructEntry, fieldName); | |
2265 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryTypeStringOffset, VMStructEntry, typeString); | |
2266 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryIsStaticOffset, VMStructEntry, isStatic); | |
2267 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryOffsetOffset, VMStructEntry, offset); | |
2268 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryAddressOffset, VMStructEntry, address); | |
2269 ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMStructEntryArrayStride, gHotSpotVMStructs); | |
2270 JNIEXPORT VMTypeEntry* gHotSpotVMTypes = VMStructs::localHotSpotVMTypes; | |
2271 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntryTypeNameOffset, VMTypeEntry, typeName); | |
2272 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntrySuperclassNameOffset, VMTypeEntry, superclassName); | |
2273 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntryIsOopTypeOffset, VMTypeEntry, isOopType); | |
2274 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntryIsIntegerTypeOffset, VMTypeEntry, isIntegerType); | |
2275 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntryIsUnsignedOffset, VMTypeEntry, isUnsigned); | |
2276 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntrySizeOffset, VMTypeEntry, size); | |
2277 ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMTypeEntryArrayStride,gHotSpotVMTypes); | |
2278 JNIEXPORT VMIntConstantEntry* gHotSpotVMIntConstants = VMStructs::localHotSpotVMIntConstants; | |
2279 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMIntConstantEntryNameOffset, VMIntConstantEntry, name); | |
2280 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMIntConstantEntryValueOffset, VMIntConstantEntry, value); | |
2281 ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMIntConstantEntryArrayStride, gHotSpotVMIntConstants); | |
2282 JNIEXPORT VMLongConstantEntry* gHotSpotVMLongConstants = VMStructs::localHotSpotVMLongConstants; | |
2283 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMLongConstantEntryNameOffset, VMLongConstantEntry, name); | |
2284 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMLongConstantEntryValueOffset, VMLongConstantEntry, value); | |
2285 ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMLongConstantEntryArrayStride, gHotSpotVMLongConstants); | |
2286 } | |
2287 | |
2288 #ifdef ASSERT | |
2289 int | |
2290 VMStructs::findType(const char* typeName) { | |
2291 VMTypeEntry* types = gHotSpotVMTypes; | |
2292 | |
2293 while (types->typeName != NULL) { | |
2294 if (!strcmp(typeName, types->typeName)) { | |
2295 return 1; | |
2296 } | |
2297 ++types; | |
2298 } | |
2299 return 0; | |
2300 } | |
2301 #endif | |
2302 | |
2303 void vmStructs_init() { | |
2304 debug_only(VMStructs::init()); | |
2305 } |