81 #include "oops/methodOop.hpp" |
81 #include "oops/methodOop.hpp" |
82 #include "oops/objArrayKlass.hpp" |
82 #include "oops/objArrayKlass.hpp" |
83 #include "oops/objArrayKlassKlass.hpp" |
83 #include "oops/objArrayKlassKlass.hpp" |
84 #include "oops/objArrayOop.hpp" |
84 #include "oops/objArrayOop.hpp" |
85 #include "oops/oop.inline.hpp" |
85 #include "oops/oop.inline.hpp" |
86 #include "oops/symbolKlass.hpp" |
86 #include "oops/symbol.hpp" |
87 #include "oops/symbolOop.hpp" |
|
88 #include "oops/typeArrayKlass.hpp" |
87 #include "oops/typeArrayKlass.hpp" |
89 #include "oops/typeArrayKlassKlass.hpp" |
88 #include "oops/typeArrayKlassKlass.hpp" |
90 #include "oops/typeArrayOop.hpp" |
89 #include "oops/typeArrayOop.hpp" |
91 #include "prims/jvmtiAgentThread.hpp" |
90 #include "prims/jvmtiAgentThread.hpp" |
92 #include "runtime/arguments.hpp" |
91 #include "runtime/arguments.hpp" |
244 nonstatic_field(instanceKlass, _fields, typeArrayOop) \ |
243 nonstatic_field(instanceKlass, _fields, typeArrayOop) \ |
245 nonstatic_field(instanceKlass, _constants, constantPoolOop) \ |
244 nonstatic_field(instanceKlass, _constants, constantPoolOop) \ |
246 nonstatic_field(instanceKlass, _class_loader, oop) \ |
245 nonstatic_field(instanceKlass, _class_loader, oop) \ |
247 nonstatic_field(instanceKlass, _protection_domain, oop) \ |
246 nonstatic_field(instanceKlass, _protection_domain, oop) \ |
248 nonstatic_field(instanceKlass, _signers, objArrayOop) \ |
247 nonstatic_field(instanceKlass, _signers, objArrayOop) \ |
249 nonstatic_field(instanceKlass, _source_file_name, symbolOop) \ |
248 nonstatic_field(instanceKlass, _source_file_name, Symbol*) \ |
250 nonstatic_field(instanceKlass, _source_debug_extension, symbolOop) \ |
249 nonstatic_field(instanceKlass, _source_debug_extension, Symbol*) \ |
251 nonstatic_field(instanceKlass, _inner_classes, typeArrayOop) \ |
250 nonstatic_field(instanceKlass, _inner_classes, typeArrayOop) \ |
252 nonstatic_field(instanceKlass, _nonstatic_field_size, int) \ |
251 nonstatic_field(instanceKlass, _nonstatic_field_size, int) \ |
253 nonstatic_field(instanceKlass, _static_field_size, int) \ |
252 nonstatic_field(instanceKlass, _static_field_size, int) \ |
254 nonstatic_field(instanceKlass, _static_oop_field_size, int) \ |
253 nonstatic_field(instanceKlass, _static_oop_field_size, int) \ |
255 nonstatic_field(instanceKlass, _nonstatic_oop_map_size, int) \ |
254 nonstatic_field(instanceKlass, _nonstatic_oop_map_size, int) \ |
263 nonstatic_field(instanceKlass, _reference_type, ReferenceType) \ |
262 nonstatic_field(instanceKlass, _reference_type, ReferenceType) \ |
264 volatile_nonstatic_field(instanceKlass, _oop_map_cache, OopMapCache*) \ |
263 volatile_nonstatic_field(instanceKlass, _oop_map_cache, OopMapCache*) \ |
265 nonstatic_field(instanceKlass, _jni_ids, JNIid*) \ |
264 nonstatic_field(instanceKlass, _jni_ids, JNIid*) \ |
266 nonstatic_field(instanceKlass, _osr_nmethods_head, nmethod*) \ |
265 nonstatic_field(instanceKlass, _osr_nmethods_head, nmethod*) \ |
267 nonstatic_field(instanceKlass, _breakpoints, BreakpointInfo*) \ |
266 nonstatic_field(instanceKlass, _breakpoints, BreakpointInfo*) \ |
268 nonstatic_field(instanceKlass, _generic_signature, symbolOop) \ |
267 nonstatic_field(instanceKlass, _generic_signature, Symbol*) \ |
269 nonstatic_field(instanceKlass, _methods_jmethod_ids, jmethodID*) \ |
268 nonstatic_field(instanceKlass, _methods_jmethod_ids, jmethodID*) \ |
270 nonstatic_field(instanceKlass, _methods_cached_itable_indices, int*) \ |
269 nonstatic_field(instanceKlass, _methods_cached_itable_indices, int*) \ |
271 volatile_nonstatic_field(instanceKlass, _idnum_allocated_count, u2) \ |
270 volatile_nonstatic_field(instanceKlass, _idnum_allocated_count, u2) \ |
272 nonstatic_field(instanceKlass, _class_annotations, typeArrayOop) \ |
271 nonstatic_field(instanceKlass, _class_annotations, typeArrayOop) \ |
273 nonstatic_field(instanceKlass, _fields_annotations, objArrayOop) \ |
272 nonstatic_field(instanceKlass, _fields_annotations, objArrayOop) \ |
280 nonstatic_field(Klass, _primary_supers[0], klassOop) \ |
279 nonstatic_field(Klass, _primary_supers[0], klassOop) \ |
281 nonstatic_field(Klass, _java_mirror, oop) \ |
280 nonstatic_field(Klass, _java_mirror, oop) \ |
282 nonstatic_field(Klass, _modifier_flags, jint) \ |
281 nonstatic_field(Klass, _modifier_flags, jint) \ |
283 nonstatic_field(Klass, _super, klassOop) \ |
282 nonstatic_field(Klass, _super, klassOop) \ |
284 nonstatic_field(Klass, _layout_helper, jint) \ |
283 nonstatic_field(Klass, _layout_helper, jint) \ |
285 nonstatic_field(Klass, _name, symbolOop) \ |
284 nonstatic_field(Klass, _name, Symbol*) \ |
286 nonstatic_field(Klass, _access_flags, AccessFlags) \ |
285 nonstatic_field(Klass, _access_flags, AccessFlags) \ |
287 nonstatic_field(Klass, _subklass, klassOop) \ |
286 nonstatic_field(Klass, _subklass, klassOop) \ |
288 nonstatic_field(Klass, _next_sibling, klassOop) \ |
287 nonstatic_field(Klass, _next_sibling, klassOop) \ |
289 nonproduct_nonstatic_field(Klass, _verify_count, int) \ |
288 nonproduct_nonstatic_field(Klass, _verify_count, int) \ |
290 nonstatic_field(Klass, _alloc_count, juint) \ |
289 nonstatic_field(Klass, _alloc_count, juint) \ |
324 nonstatic_field(constMethodOopDesc, _signature_index, u2) \ |
323 nonstatic_field(constMethodOopDesc, _signature_index, u2) \ |
325 nonstatic_field(constMethodOopDesc, _method_idnum, u2) \ |
324 nonstatic_field(constMethodOopDesc, _method_idnum, u2) \ |
326 nonstatic_field(constMethodOopDesc, _generic_signature_index, u2) \ |
325 nonstatic_field(constMethodOopDesc, _generic_signature_index, u2) \ |
327 nonstatic_field(objArrayKlass, _element_klass, klassOop) \ |
326 nonstatic_field(objArrayKlass, _element_klass, klassOop) \ |
328 nonstatic_field(objArrayKlass, _bottom_klass, klassOop) \ |
327 nonstatic_field(objArrayKlass, _bottom_klass, klassOop) \ |
329 nonstatic_field(symbolKlass, _alloc_size, juint) \ |
328 volatile_nonstatic_field(Symbol, _refcount, int) \ |
330 nonstatic_field(symbolOopDesc, _length, unsigned short) \ |
329 nonstatic_field(Symbol, _identity_hash, int) \ |
331 unchecked_nonstatic_field(symbolOopDesc, _body, sizeof(jbyte)) /* NOTE: no type */ \ |
330 nonstatic_field(Symbol, _length, unsigned short) \ |
|
331 unchecked_nonstatic_field(Symbol, _body, sizeof(jbyte)) /* NOTE: no type */ \ |
332 nonstatic_field(typeArrayKlass, _max_length, int) \ |
332 nonstatic_field(typeArrayKlass, _max_length, int) \ |
333 \ |
333 \ |
334 /***********************/ \ |
334 /***********************/ \ |
335 /* Constant Pool Cache */ \ |
335 /* Constant Pool Cache */ \ |
336 /***********************/ \ |
336 /***********************/ \ |
373 static_field(Universe, _intArrayKlassObj, klassOop) \ |
373 static_field(Universe, _intArrayKlassObj, klassOop) \ |
374 static_field(Universe, _shortArrayKlassObj, klassOop) \ |
374 static_field(Universe, _shortArrayKlassObj, klassOop) \ |
375 static_field(Universe, _longArrayKlassObj, klassOop) \ |
375 static_field(Universe, _longArrayKlassObj, klassOop) \ |
376 static_field(Universe, _singleArrayKlassObj, klassOop) \ |
376 static_field(Universe, _singleArrayKlassObj, klassOop) \ |
377 static_field(Universe, _doubleArrayKlassObj, klassOop) \ |
377 static_field(Universe, _doubleArrayKlassObj, klassOop) \ |
378 static_field(Universe, _symbolKlassObj, klassOop) \ |
|
379 static_field(Universe, _methodKlassObj, klassOop) \ |
378 static_field(Universe, _methodKlassObj, klassOop) \ |
380 static_field(Universe, _constMethodKlassObj, klassOop) \ |
379 static_field(Universe, _constMethodKlassObj, klassOop) \ |
381 static_field(Universe, _methodDataKlassObj, klassOop) \ |
380 static_field(Universe, _methodDataKlassObj, klassOop) \ |
382 static_field(Universe, _klassKlassObj, klassOop) \ |
381 static_field(Universe, _klassKlassObj, klassOop) \ |
383 static_field(Universe, _arrayKlassKlassObj, klassOop) \ |
382 static_field(Universe, _arrayKlassKlassObj, klassOop) \ |
646 /* HashtableEntry */ \ |
645 /* HashtableEntry */ \ |
647 /******************/ \ |
646 /******************/ \ |
648 \ |
647 \ |
649 nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ |
648 nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ |
650 nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ |
649 nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ |
651 nonstatic_field(HashtableEntry, _literal, oop) \ |
650 nonstatic_field(HashtableEntry<intptr_t>, _literal, intptr_t) \ |
652 \ |
651 \ |
653 /*************/ \ |
652 /*************/ \ |
654 /* Hashtable */ \ |
653 /* Hashtable */ \ |
655 /*************/ \ |
654 /*************/ \ |
656 \ |
655 \ |
681 \ |
680 \ |
682 /*************************/ \ |
681 /*************************/ \ |
683 /* LoaderConstraintEntry */ \ |
682 /* LoaderConstraintEntry */ \ |
684 /*************************/ \ |
683 /*************************/ \ |
685 \ |
684 \ |
686 nonstatic_field(LoaderConstraintEntry, _name, symbolOop) \ |
685 nonstatic_field(LoaderConstraintEntry, _name, Symbol*) \ |
687 nonstatic_field(LoaderConstraintEntry, _num_loaders, int) \ |
686 nonstatic_field(LoaderConstraintEntry, _num_loaders, int) \ |
688 nonstatic_field(LoaderConstraintEntry, _max_loaders, int) \ |
687 nonstatic_field(LoaderConstraintEntry, _max_loaders, int) \ |
689 nonstatic_field(LoaderConstraintEntry, _loaders, oop*) \ |
688 nonstatic_field(LoaderConstraintEntry, _loaders, oop*) \ |
690 \ |
689 \ |
691 /********************************/ \ |
690 /********************************/ \ |
1086 declare_type(methodOopDesc, oopDesc) \ |
1085 declare_type(methodOopDesc, oopDesc) \ |
1087 declare_type(objArrayKlass, arrayKlass) \ |
1086 declare_type(objArrayKlass, arrayKlass) \ |
1088 declare_type(objArrayKlassKlass, arrayKlassKlass) \ |
1087 declare_type(objArrayKlassKlass, arrayKlassKlass) \ |
1089 declare_type(objArrayOopDesc, arrayOopDesc) \ |
1088 declare_type(objArrayOopDesc, arrayOopDesc) \ |
1090 declare_type(constMethodOopDesc, oopDesc) \ |
1089 declare_type(constMethodOopDesc, oopDesc) \ |
1091 declare_type(symbolKlass, Klass) \ |
|
1092 declare_type(symbolOopDesc, oopDesc) \ |
|
1093 declare_type(typeArrayKlass, arrayKlass) \ |
1090 declare_type(typeArrayKlass, arrayKlass) \ |
1094 declare_type(typeArrayKlassKlass, arrayKlassKlass) \ |
1091 declare_type(typeArrayKlassKlass, arrayKlassKlass) \ |
1095 declare_type(typeArrayOopDesc, arrayOopDesc) \ |
1092 declare_type(typeArrayOopDesc, arrayOopDesc) \ |
|
1093 declare_toplevel_type(Symbol) \ |
|
1094 declare_toplevel_type(Symbol*) \ |
1096 \ |
1095 \ |
1097 /********/ \ |
1096 /********/ \ |
1098 /* Oops */ \ |
1097 /* Oops */ \ |
1099 /********/ \ |
1098 /********/ \ |
1100 \ |
1099 \ |
1107 declare_oop_type(objArrayOop) \ |
1106 declare_oop_type(objArrayOop) \ |
1108 declare_oop_type(oop) \ |
1107 declare_oop_type(oop) \ |
1109 declare_oop_type(narrowOop) \ |
1108 declare_oop_type(narrowOop) \ |
1110 declare_oop_type(wideKlassOop) \ |
1109 declare_oop_type(wideKlassOop) \ |
1111 declare_oop_type(constMethodOop) \ |
1110 declare_oop_type(constMethodOop) \ |
1112 declare_oop_type(symbolOop) \ |
|
1113 declare_oop_type(typeArrayOop) \ |
1111 declare_oop_type(typeArrayOop) \ |
1114 \ |
1112 \ |
1115 /*************************************/ \ |
1113 /*************************************/ \ |
1116 /* MethodOop-related data structures */ \ |
1114 /* MethodOop-related data structures */ \ |
1117 /*************************************/ \ |
1115 /*************************************/ \ |
1205 /*********************************/ \ |
1203 /*********************************/ \ |
1206 /* SymbolTable, SystemDictionary */ \ |
1204 /* SymbolTable, SystemDictionary */ \ |
1207 /*********************************/ \ |
1205 /*********************************/ \ |
1208 \ |
1206 \ |
1209 declare_toplevel_type(BasicHashtable) \ |
1207 declare_toplevel_type(BasicHashtable) \ |
1210 declare_type(Hashtable, BasicHashtable) \ |
1208 declare_type(Hashtable<intptr_t>, BasicHashtable) \ |
1211 declare_type(SymbolTable, Hashtable) \ |
1209 declare_type(SymbolTable, Hashtable<Symbol*>) \ |
1212 declare_type(StringTable, Hashtable) \ |
1210 declare_type(StringTable, Hashtable<oop>) \ |
1213 declare_type(LoaderConstraintTable, Hashtable) \ |
1211 declare_type(LoaderConstraintTable, Hashtable<klassOop>) \ |
1214 declare_type(TwoOopHashtable, Hashtable) \ |
1212 declare_type(TwoOopHashtable<klassOop>, Hashtable<klassOop>) \ |
1215 declare_type(Dictionary, TwoOopHashtable) \ |
1213 declare_type(Dictionary, TwoOopHashtable<klassOop>) \ |
1216 declare_type(PlaceholderTable, TwoOopHashtable) \ |
1214 declare_type(PlaceholderTable, TwoOopHashtable<Symbol*>) \ |
1217 declare_toplevel_type(Hashtable*) \ |
|
1218 declare_toplevel_type(SymbolTable*) \ |
|
1219 declare_toplevel_type(StringTable*) \ |
|
1220 declare_toplevel_type(LoaderConstraintTable*) \ |
|
1221 declare_toplevel_type(TwoOopHashtable*) \ |
|
1222 declare_toplevel_type(Dictionary*) \ |
|
1223 declare_toplevel_type(PlaceholderTable*) \ |
|
1224 declare_toplevel_type(BasicHashtableEntry) \ |
1215 declare_toplevel_type(BasicHashtableEntry) \ |
1225 declare_toplevel_type(BasicHashtableEntry*) \ |
1216 declare_type(HashtableEntry<intptr_t>, BasicHashtableEntry) \ |
1226 declare_type(HashtableEntry, BasicHashtableEntry) \ |
1217 declare_type(DictionaryEntry, HashtableEntry<klassOop>) \ |
1227 declare_type(DictionaryEntry, HashtableEntry) \ |
1218 declare_type(PlaceholderEntry, HashtableEntry<Symbol*>) \ |
1228 declare_type(PlaceholderEntry, HashtableEntry) \ |
1219 declare_type(LoaderConstraintEntry, HashtableEntry<klassOop>) \ |
1229 declare_type(LoaderConstraintEntry, HashtableEntry) \ |
|
1230 declare_toplevel_type(HashtableEntry*) \ |
|
1231 declare_toplevel_type(DictionaryEntry*) \ |
|
1232 declare_toplevel_type(HashtableBucket) \ |
1220 declare_toplevel_type(HashtableBucket) \ |
1233 declare_toplevel_type(HashtableBucket*) \ |
|
1234 declare_toplevel_type(SystemDictionary) \ |
1221 declare_toplevel_type(SystemDictionary) \ |
1235 declare_toplevel_type(ProtectionDomainEntry) \ |
1222 declare_toplevel_type(ProtectionDomainEntry) \ |
1236 declare_toplevel_type(ProtectionDomainEntry*) \ |
|
1237 \ |
1223 \ |
1238 /***********************************************************/ \ |
1224 /***********************************************************/ \ |
1239 /* Thread hierarchy (needed for run-time type information) */ \ |
1225 /* Thread hierarchy (needed for run-time type information) */ \ |
1240 /***********************************************************/ \ |
1226 /***********************************************************/ \ |
1241 \ |
1227 \ |
1665 declare_constant(instanceKlass::being_initialized) \ |
1651 declare_constant(instanceKlass::being_initialized) \ |
1666 declare_constant(instanceKlass::fully_initialized) \ |
1652 declare_constant(instanceKlass::fully_initialized) \ |
1667 declare_constant(instanceKlass::initialization_error) \ |
1653 declare_constant(instanceKlass::initialization_error) \ |
1668 \ |
1654 \ |
1669 /*********************************/ \ |
1655 /*********************************/ \ |
1670 /* symbolOop - symbol max length */ \ |
1656 /* Symbol* - symbol max length */ \ |
1671 /*********************************/ \ |
1657 /*********************************/ \ |
1672 \ |
1658 \ |
1673 declare_constant(symbolOopDesc::max_symbol_length) \ |
1659 declare_constant(Symbol::max_symbol_length) \ |
1674 \ |
1660 \ |
1675 /*************************************************/ \ |
1661 /*************************************************/ \ |
1676 /* constantPoolOop layout enum for InvokeDynamic */ \ |
1662 /* constantPoolOop layout enum for InvokeDynamic */ \ |
1677 /*************************************************/ \ |
1663 /*************************************************/ \ |
1678 \ |
1664 \ |
2429 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMLongConstantEntryValueOffset, VMLongConstantEntry, value); |
2415 ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMLongConstantEntryValueOffset, VMLongConstantEntry, value); |
2430 ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMLongConstantEntryArrayStride, gHotSpotVMLongConstants); |
2416 ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMLongConstantEntryArrayStride, gHotSpotVMLongConstants); |
2431 } |
2417 } |
2432 |
2418 |
2433 #ifdef ASSERT |
2419 #ifdef ASSERT |
|
2420 static int recursiveFindType(VMTypeEntry* origtypes, const char* typeName, bool isRecurse) { |
|
2421 { |
|
2422 VMTypeEntry* types = origtypes; |
|
2423 while (types->typeName != NULL) { |
|
2424 if (!strcmp(typeName, types->typeName)) { |
|
2425 return 1; |
|
2426 } |
|
2427 ++types; |
|
2428 } |
|
2429 } |
|
2430 size_t len = strlen(typeName); |
|
2431 if (typeName[len-1] == '*') { |
|
2432 char * s = new char[len]; |
|
2433 strncpy(s, typeName, len - 1); |
|
2434 s[len-1] = '\0'; |
|
2435 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); |
|
2436 if (recursiveFindType(origtypes, s, true) == 1) { |
|
2437 delete s; |
|
2438 return 1; |
|
2439 } |
|
2440 delete s; |
|
2441 } |
|
2442 if (strstr(typeName, "GrowableArray<") == typeName) { |
|
2443 const char * start = typeName + strlen("GrowableArray<"); |
|
2444 const char * end = strrchr(typeName, '>'); |
|
2445 int len = end - start + 1; |
|
2446 char * s = new char[len]; |
|
2447 strncpy(s, start, len - 1); |
|
2448 s[len-1] = '\0'; |
|
2449 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); |
|
2450 if (recursiveFindType(origtypes, s, true) == 1) { |
|
2451 delete s; |
|
2452 return 1; |
|
2453 } |
|
2454 delete s; |
|
2455 } |
|
2456 if (strstr(typeName, "const ") == typeName) { |
|
2457 const char * s = typeName + strlen("const "); |
|
2458 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); |
|
2459 if (recursiveFindType(origtypes, s, true) == 1) { |
|
2460 return 1; |
|
2461 } |
|
2462 } |
|
2463 if (strstr(typeName, " const") == typeName + len - 6) { |
|
2464 char * s = strdup(typeName); |
|
2465 s[len - 6] = '\0'; |
|
2466 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); |
|
2467 if (recursiveFindType(origtypes, s, true) == 1) { |
|
2468 return 1; |
|
2469 } |
|
2470 } |
|
2471 if (!isRecurse) { |
|
2472 tty->print_cr("type \"%s\" not found", typeName); |
|
2473 } |
|
2474 return 2; |
|
2475 } |
|
2476 |
|
2477 |
2434 int |
2478 int |
2435 VMStructs::findType(const char* typeName) { |
2479 VMStructs::findType(const char* typeName) { |
2436 VMTypeEntry* types = gHotSpotVMTypes; |
2480 VMTypeEntry* types = gHotSpotVMTypes; |
2437 |
2481 |
2438 while (types->typeName != NULL) { |
2482 return recursiveFindType(types, typeName, false); |
2439 if (!strcmp(typeName, types->typeName)) { |
|
2440 return 1; |
|
2441 } |
|
2442 ++types; |
|
2443 } |
|
2444 return 0; |
|
2445 } |
2483 } |
2446 #endif |
2484 #endif |
2447 |
2485 |
2448 void vmStructs_init() { |
2486 void vmStructs_init() { |
2449 debug_only(VMStructs::init()); |
2487 debug_only(VMStructs::init()); |