Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/vmStructs.cpp @ 7643:3ac7d10a6572
Merge with hsx25/hotspot.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Thu, 31 Jan 2013 15:42:25 +0100 |
parents | 989155e2d07a 557bda927cc2 |
children | 5fc51c1ecdeb |
comparison
equal
deleted
inserted
replaced
7573:17b6a63fe7c2 | 7643:3ac7d10a6572 |
---|---|
255 volatile_nonstatic_field, \ | 255 volatile_nonstatic_field, \ |
256 nonproduct_nonstatic_field, \ | 256 nonproduct_nonstatic_field, \ |
257 c1_nonstatic_field, \ | 257 c1_nonstatic_field, \ |
258 c2_nonstatic_field, \ | 258 c2_nonstatic_field, \ |
259 unchecked_c1_static_field, \ | 259 unchecked_c1_static_field, \ |
260 unchecked_c2_static_field, \ | 260 unchecked_c2_static_field) \ |
261 last_entry) \ | |
262 \ | 261 \ |
263 /******************************************************************/ \ | 262 /******************************************************************/ \ |
264 /* OopDesc and Klass hierarchies (NOTE: MethodData* incomplete) */ \ | 263 /* OopDesc and Klass hierarchies (NOTE: MethodData* incomplete) */ \ |
265 /******************************************************************/ \ | 264 /******************************************************************/ \ |
266 \ | 265 \ |
716 \ | 715 \ |
717 nonstatic_field(ClassLoaderData, _class_loader, oop) \ | 716 nonstatic_field(ClassLoaderData, _class_loader, oop) \ |
718 nonstatic_field(ClassLoaderData, _next, ClassLoaderData*) \ | 717 nonstatic_field(ClassLoaderData, _next, ClassLoaderData*) \ |
719 \ | 718 \ |
720 static_field(ClassLoaderDataGraph, _head, ClassLoaderData*) \ | 719 static_field(ClassLoaderDataGraph, _head, ClassLoaderData*) \ |
721 nonstatic_field(ClassLoaderDataGraph, _unloading, ClassLoaderData*) \ | |
722 \ | 720 \ |
723 /*******************/ \ | 721 /*******************/ \ |
724 /* GrowableArrays */ \ | 722 /* GrowableArrays */ \ |
725 /*******************/ \ | 723 /*******************/ \ |
726 \ | 724 \ |
1198 /*********************************/ \ | 1196 /*********************************/ \ |
1199 /* java_lang_Class fields */ \ | 1197 /* java_lang_Class fields */ \ |
1200 /*********************************/ \ | 1198 /*********************************/ \ |
1201 \ | 1199 \ |
1202 static_field(java_lang_Class, _klass_offset, int) \ | 1200 static_field(java_lang_Class, _klass_offset, int) \ |
1203 static_field(java_lang_Class, _resolved_constructor_offset, int) \ | |
1204 static_field(java_lang_Class, _array_klass_offset, int) \ | 1201 static_field(java_lang_Class, _array_klass_offset, int) \ |
1205 static_field(java_lang_Class, _oop_size_offset, int) \ | 1202 static_field(java_lang_Class, _oop_size_offset, int) \ |
1206 static_field(java_lang_Class, _static_oop_field_count_offset, int) \ | 1203 static_field(java_lang_Class, _static_oop_field_count_offset, int) \ |
1207 \ | 1204 \ |
1208 /************************/ \ | 1205 /************************/ \ |
1236 nonstatic_field(FreeList<Metablock>, _size, size_t) \ | 1233 nonstatic_field(FreeList<Metablock>, _size, size_t) \ |
1237 nonstatic_field(FreeList<FreeChunk>, _count, ssize_t) \ | 1234 nonstatic_field(FreeList<FreeChunk>, _count, ssize_t) \ |
1238 nonstatic_field(FreeList<Metablock>, _count, ssize_t) \ | 1235 nonstatic_field(FreeList<Metablock>, _count, ssize_t) \ |
1239 nonstatic_field(MetablockTreeDictionary, _total_size, size_t) | 1236 nonstatic_field(MetablockTreeDictionary, _total_size, size_t) |
1240 | 1237 |
1241 /* NOTE that we do not use the last_entry() macro here; it is used */ | |
1242 /* in vmStructs_<os>_<cpu>.hpp's VM_STRUCTS_OS_CPU macro (and must */ | |
1243 /* be present there) */ | |
1244 | 1238 |
1245 //-------------------------------------------------------------------------------- | 1239 //-------------------------------------------------------------------------------- |
1246 // VM_TYPES | 1240 // VM_TYPES |
1247 // | 1241 // |
1248 // This list must enumerate at least all of the types in the above | 1242 // This list must enumerate at least all of the types in the above |
1278 declare_oop_type, \ | 1272 declare_oop_type, \ |
1279 declare_integer_type, \ | 1273 declare_integer_type, \ |
1280 declare_unsigned_integer_type, \ | 1274 declare_unsigned_integer_type, \ |
1281 declare_c1_toplevel_type, \ | 1275 declare_c1_toplevel_type, \ |
1282 declare_c2_type, \ | 1276 declare_c2_type, \ |
1283 declare_c2_toplevel_type, \ | 1277 declare_c2_toplevel_type) \ |
1284 last_entry) \ | |
1285 \ | 1278 \ |
1286 /*************************************************************/ \ | 1279 /*************************************************************/ \ |
1287 /* Java primitive types -- required by the SA implementation */ \ | 1280 /* Java primitive types -- required by the SA implementation */ \ |
1288 /* in order to determine the size of Java fields in this VM */ \ | 1281 /* in order to determine the size of Java fields in this VM */ \ |
1289 /* (the implementation looks up these names specifically) */ \ | 1282 /* (the implementation looks up these names specifically) */ \ |
2096 declare_toplevel_type(FreeList<Metablock>) \ | 2089 declare_toplevel_type(FreeList<Metablock>) \ |
2097 declare_toplevel_type(MetablockTreeDictionary*) \ | 2090 declare_toplevel_type(MetablockTreeDictionary*) \ |
2098 declare_type(MetablockTreeDictionary, FreeBlockDictionary<Metablock>) | 2091 declare_type(MetablockTreeDictionary, FreeBlockDictionary<Metablock>) |
2099 | 2092 |
2100 | 2093 |
2101 /* NOTE that we do not use the last_entry() macro here; it is used */ | |
2102 /* in vmStructs_<os>_<cpu>.hpp's VM_TYPES_OS_CPU macro (and must be */ | |
2103 /* present there) */ | |
2104 | |
2105 //-------------------------------------------------------------------------------- | 2094 //-------------------------------------------------------------------------------- |
2106 // VM_INT_CONSTANTS | 2095 // VM_INT_CONSTANTS |
2107 // | 2096 // |
2108 // This table contains integer constants required over in the | 2097 // This table contains integer constants required over in the |
2109 // serviceability agent. The "declare_constant" macro is used for all | 2098 // serviceability agent. The "declare_constant" macro is used for all |
2112 | 2101 |
2113 #define VM_INT_CONSTANTS(declare_constant, \ | 2102 #define VM_INT_CONSTANTS(declare_constant, \ |
2114 declare_preprocessor_constant, \ | 2103 declare_preprocessor_constant, \ |
2115 declare_c1_constant, \ | 2104 declare_c1_constant, \ |
2116 declare_c2_constant, \ | 2105 declare_c2_constant, \ |
2117 declare_c2_preprocessor_constant, \ | 2106 declare_c2_preprocessor_constant) \ |
2118 last_entry) \ | |
2119 \ | 2107 \ |
2120 /******************/ \ | 2108 /******************/ \ |
2121 /* Useful globals */ \ | 2109 /* Useful globals */ \ |
2122 /******************/ \ | 2110 /******************/ \ |
2123 \ | 2111 \ |
2292 \ | 2280 \ |
2293 declare_constant(FieldInfo::access_flags_offset) \ | 2281 declare_constant(FieldInfo::access_flags_offset) \ |
2294 declare_constant(FieldInfo::name_index_offset) \ | 2282 declare_constant(FieldInfo::name_index_offset) \ |
2295 declare_constant(FieldInfo::signature_index_offset) \ | 2283 declare_constant(FieldInfo::signature_index_offset) \ |
2296 declare_constant(FieldInfo::initval_index_offset) \ | 2284 declare_constant(FieldInfo::initval_index_offset) \ |
2297 declare_constant(FieldInfo::low_offset) \ | 2285 declare_constant(FieldInfo::low_packed_offset) \ |
2298 declare_constant(FieldInfo::high_offset) \ | 2286 declare_constant(FieldInfo::high_packed_offset) \ |
2299 declare_constant(FieldInfo::field_slots) \ | 2287 declare_constant(FieldInfo::field_slots) \ |
2288 \ | |
2289 /*************************************/ \ | |
2290 /* FieldInfo tag constants */ \ | |
2291 /*************************************/ \ | |
2292 \ | |
2293 declare_preprocessor_constant("FIELDINFO_TAG_SIZE", FIELDINFO_TAG_SIZE) \ | |
2294 declare_preprocessor_constant("FIELDINFO_TAG_MASK", FIELDINFO_TAG_MASK) \ | |
2295 declare_preprocessor_constant("FIELDINFO_TAG_OFFSET", FIELDINFO_TAG_OFFSET) \ | |
2300 \ | 2296 \ |
2301 /************************************************/ \ | 2297 /************************************************/ \ |
2302 /* InstanceKlass InnerClassAttributeOffset enum */ \ | 2298 /* InstanceKlass InnerClassAttributeOffset enum */ \ |
2303 /************************************************/ \ | 2299 /************************************************/ \ |
2304 \ | 2300 \ |
2487 declare_constant(ConcreteRegisterImpl::number_of_registers) \ | 2483 declare_constant(ConcreteRegisterImpl::number_of_registers) \ |
2488 declare_preprocessor_constant("REG_COUNT", REG_COUNT) \ | 2484 declare_preprocessor_constant("REG_COUNT", REG_COUNT) \ |
2489 declare_c2_preprocessor_constant("SAVED_ON_ENTRY_REG_COUNT", SAVED_ON_ENTRY_REG_COUNT) \ | 2485 declare_c2_preprocessor_constant("SAVED_ON_ENTRY_REG_COUNT", SAVED_ON_ENTRY_REG_COUNT) \ |
2490 declare_c2_preprocessor_constant("C_SAVED_ON_ENTRY_REG_COUNT", C_SAVED_ON_ENTRY_REG_COUNT) | 2486 declare_c2_preprocessor_constant("C_SAVED_ON_ENTRY_REG_COUNT", C_SAVED_ON_ENTRY_REG_COUNT) |
2491 | 2487 |
2492 /* NOTE that we do not use the last_entry() macro here; it is used */ | |
2493 /* in vmStructs_<os>_<cpu>.hpp's VM_INT_CONSTANTS_OS_CPU macro (and */ | |
2494 /* must be present there) */ | |
2495 | 2488 |
2496 //-------------------------------------------------------------------------------- | 2489 //-------------------------------------------------------------------------------- |
2497 // VM_LONG_CONSTANTS | 2490 // VM_LONG_CONSTANTS |
2498 // | 2491 // |
2499 // This table contains long constants required over in the | 2492 // This table contains long constants required over in the |
2500 // serviceability agent. The "declare_constant" macro is used for all | 2493 // serviceability agent. The "declare_constant" macro is used for all |
2501 // enums, etc., while "declare_preprocessor_constant" must be used for | 2494 // enums, etc., while "declare_preprocessor_constant" must be used for |
2502 // all #defined constants. | 2495 // all #defined constants. |
2503 | 2496 |
2504 #define VM_LONG_CONSTANTS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant, last_entry) \ | 2497 #define VM_LONG_CONSTANTS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \ |
2505 \ | 2498 \ |
2506 /*********************/ \ | 2499 /*********************/ \ |
2507 /* MarkOop constants */ \ | 2500 /* MarkOop constants */ \ |
2508 /*********************/ \ | 2501 /*********************/ \ |
2509 \ | 2502 \ |
2545 declare_constant(markOopDesc::max_age) \ | 2538 declare_constant(markOopDesc::max_age) \ |
2546 \ | 2539 \ |
2547 /* Constants in markOop used by CMS. */ \ | 2540 /* Constants in markOop used by CMS. */ \ |
2548 declare_constant(markOopDesc::cms_shift) \ | 2541 declare_constant(markOopDesc::cms_shift) \ |
2549 declare_constant(markOopDesc::cms_mask) \ | 2542 declare_constant(markOopDesc::cms_mask) \ |
2550 declare_constant(markOopDesc::size_shift) \ | 2543 declare_constant(markOopDesc::size_shift) |
2551 | |
2552 /* NOTE that we do not use the last_entry() macro here; it is used */ | |
2553 /* in vmStructs_<os>_<cpu>.hpp's VM_LONG_CONSTANTS_OS_CPU macro (and */ | |
2554 /* must be present there) */ | |
2555 | 2544 |
2556 | 2545 |
2557 //-------------------------------------------------------------------------------- | 2546 //-------------------------------------------------------------------------------- |
2558 // Macros operating on the above lists | 2547 // Macros operating on the above lists |
2559 //-------------------------------------------------------------------------------- | 2548 //-------------------------------------------------------------------------------- |
2589 #define GENERATE_VM_STRUCT_LAST_ENTRY() \ | 2578 #define GENERATE_VM_STRUCT_LAST_ENTRY() \ |
2590 { NULL, NULL, NULL, 0, 0, NULL } | 2579 { NULL, NULL, NULL, 0, 0, NULL } |
2591 | 2580 |
2592 // This macro checks the type of a VMStructEntry by comparing pointer types | 2581 // This macro checks the type of a VMStructEntry by comparing pointer types |
2593 #define CHECK_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ | 2582 #define CHECK_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ |
2594 {typeName *dummyObj = NULL; type* dummy = &dummyObj->fieldName; } | 2583 {typeName *dummyObj = NULL; type* dummy = &dummyObj->fieldName; \ |
2584 assert(offset_of(typeName, fieldName) < sizeof(typeName), "Illegal nonstatic struct entry, field offset too large"); } | |
2595 | 2585 |
2596 // This macro checks the type of a volatile VMStructEntry by comparing pointer types | 2586 // This macro checks the type of a volatile VMStructEntry by comparing pointer types |
2597 #define CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ | 2587 #define CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \ |
2598 {typedef type dummyvtype; typeName *dummyObj = NULL; volatile dummyvtype* dummy = &dummyObj->fieldName; } | 2588 {typedef type dummyvtype; typeName *dummyObj = NULL; volatile dummyvtype* dummy = &dummyObj->fieldName; } |
2599 | 2589 |
2611 { assert(findType(QUOTE(typeName)) != 0, "type \"" QUOTE(typeName) "\" not found in type table"); \ | 2601 { assert(findType(QUOTE(typeName)) != 0, "type \"" QUOTE(typeName) "\" not found in type table"); \ |
2612 assert(findType(QUOTE(type)) != 0, "type \"" QUOTE(type) "\" not found in type table"); } | 2602 assert(findType(QUOTE(type)) != 0, "type \"" QUOTE(type) "\" not found in type table"); } |
2613 | 2603 |
2614 // This is a no-op macro for unchecked fields | 2604 // This is a no-op macro for unchecked fields |
2615 #define CHECK_NO_OP(a, b, c) | 2605 #define CHECK_NO_OP(a, b, c) |
2616 | |
2617 // This is a no-op macro for the sentinel value | |
2618 #define CHECK_SENTINEL() | |
2619 | 2606 |
2620 // | 2607 // |
2621 // Build-specific macros: | 2608 // Build-specific macros: |
2622 // | 2609 // |
2623 | 2610 |
2793 | 2780 |
2794 // These initializers are allowed to access private fields in classes | 2781 // These initializers are allowed to access private fields in classes |
2795 // as long as class VMStructs is a friend | 2782 // as long as class VMStructs is a friend |
2796 VMStructEntry VMStructs::localHotSpotVMStructs[] = { | 2783 VMStructEntry VMStructs::localHotSpotVMStructs[] = { |
2797 | 2784 |
2798 VM_STRUCTS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2785 VM_STRUCTS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2799 GENERATE_STATIC_VM_STRUCT_ENTRY, \ | 2786 GENERATE_STATIC_VM_STRUCT_ENTRY, |
2800 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, \ | 2787 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, |
2801 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2788 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2802 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, \ | 2789 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, |
2803 GENERATE_C1_NONSTATIC_VM_STRUCT_ENTRY, \ | 2790 GENERATE_C1_NONSTATIC_VM_STRUCT_ENTRY, |
2804 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, \ | 2791 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, |
2805 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | 2792 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, |
2806 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | 2793 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY) |
2807 GENERATE_VM_STRUCT_LAST_ENTRY) | |
2808 | 2794 |
2809 #ifndef SERIALGC | 2795 #ifndef SERIALGC |
2810 VM_STRUCTS_PARALLELGC(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2796 VM_STRUCTS_PARALLELGC(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2811 GENERATE_STATIC_VM_STRUCT_ENTRY) | 2797 GENERATE_STATIC_VM_STRUCT_ENTRY) |
2812 | 2798 |
2813 VM_STRUCTS_CMS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2799 VM_STRUCTS_CMS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2814 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2800 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2815 GENERATE_STATIC_VM_STRUCT_ENTRY) | 2801 GENERATE_STATIC_VM_STRUCT_ENTRY) |
2816 | 2802 |
2817 VM_STRUCTS_G1(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2803 VM_STRUCTS_G1(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2818 GENERATE_STATIC_VM_STRUCT_ENTRY) | 2804 GENERATE_STATIC_VM_STRUCT_ENTRY) |
2819 #endif // SERIALGC | 2805 #endif // SERIALGC |
2820 | 2806 |
2821 VM_STRUCTS_CPU(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2807 VM_STRUCTS_CPU(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2822 GENERATE_STATIC_VM_STRUCT_ENTRY, \ | 2808 GENERATE_STATIC_VM_STRUCT_ENTRY, |
2823 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, \ | 2809 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, |
2824 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2810 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2825 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, \ | 2811 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, |
2826 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, \ | 2812 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, |
2827 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | 2813 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, |
2828 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | 2814 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY) |
2829 GENERATE_VM_STRUCT_LAST_ENTRY) | 2815 |
2830 | 2816 VM_STRUCTS_OS_CPU(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2831 VM_STRUCTS_OS_CPU(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2817 GENERATE_STATIC_VM_STRUCT_ENTRY, |
2832 GENERATE_STATIC_VM_STRUCT_ENTRY, \ | 2818 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, |
2833 GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, \ | 2819 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
2834 GENERATE_NONSTATIC_VM_STRUCT_ENTRY, \ | 2820 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, |
2835 GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, \ | 2821 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, |
2836 GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, \ | 2822 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, |
2837 GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | 2823 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY) |
2838 GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY, \ | 2824 |
2839 GENERATE_VM_STRUCT_LAST_ENTRY) | 2825 GENERATE_VM_STRUCT_LAST_ENTRY() |
2840 }; | 2826 }; |
2841 | 2827 |
2842 VMTypeEntry VMStructs::localHotSpotVMTypes[] = { | 2828 VMTypeEntry VMStructs::localHotSpotVMTypes[] = { |
2843 | 2829 |
2844 VM_TYPES(GENERATE_VM_TYPE_ENTRY, | 2830 VM_TYPES(GENERATE_VM_TYPE_ENTRY, |
2846 GENERATE_OOP_VM_TYPE_ENTRY, | 2832 GENERATE_OOP_VM_TYPE_ENTRY, |
2847 GENERATE_INTEGER_VM_TYPE_ENTRY, | 2833 GENERATE_INTEGER_VM_TYPE_ENTRY, |
2848 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, | 2834 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, |
2849 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, | 2835 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, |
2850 GENERATE_C2_VM_TYPE_ENTRY, | 2836 GENERATE_C2_VM_TYPE_ENTRY, |
2851 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY, | 2837 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY) |
2852 GENERATE_VM_TYPE_LAST_ENTRY) | |
2853 | 2838 |
2854 #ifndef SERIALGC | 2839 #ifndef SERIALGC |
2855 VM_TYPES_PARALLELGC(GENERATE_VM_TYPE_ENTRY, | 2840 VM_TYPES_PARALLELGC(GENERATE_VM_TYPE_ENTRY, |
2856 GENERATE_TOPLEVEL_VM_TYPE_ENTRY) | 2841 GENERATE_TOPLEVEL_VM_TYPE_ENTRY) |
2857 | 2842 |
2869 GENERATE_OOP_VM_TYPE_ENTRY, | 2854 GENERATE_OOP_VM_TYPE_ENTRY, |
2870 GENERATE_INTEGER_VM_TYPE_ENTRY, | 2855 GENERATE_INTEGER_VM_TYPE_ENTRY, |
2871 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, | 2856 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, |
2872 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, | 2857 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, |
2873 GENERATE_C2_VM_TYPE_ENTRY, | 2858 GENERATE_C2_VM_TYPE_ENTRY, |
2874 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY, | 2859 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY) |
2875 GENERATE_VM_TYPE_LAST_ENTRY) | |
2876 | 2860 |
2877 VM_TYPES_OS_CPU(GENERATE_VM_TYPE_ENTRY, | 2861 VM_TYPES_OS_CPU(GENERATE_VM_TYPE_ENTRY, |
2878 GENERATE_TOPLEVEL_VM_TYPE_ENTRY, | 2862 GENERATE_TOPLEVEL_VM_TYPE_ENTRY, |
2879 GENERATE_OOP_VM_TYPE_ENTRY, | 2863 GENERATE_OOP_VM_TYPE_ENTRY, |
2880 GENERATE_INTEGER_VM_TYPE_ENTRY, | 2864 GENERATE_INTEGER_VM_TYPE_ENTRY, |
2881 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, | 2865 GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, |
2882 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, | 2866 GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, |
2883 GENERATE_C2_VM_TYPE_ENTRY, | 2867 GENERATE_C2_VM_TYPE_ENTRY, |
2884 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY, | 2868 GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY) |
2885 GENERATE_VM_TYPE_LAST_ENTRY) | 2869 |
2870 GENERATE_VM_TYPE_LAST_ENTRY() | |
2886 }; | 2871 }; |
2887 | 2872 |
2888 VMIntConstantEntry VMStructs::localHotSpotVMIntConstants[] = { | 2873 VMIntConstantEntry VMStructs::localHotSpotVMIntConstants[] = { |
2889 | 2874 |
2890 VM_INT_CONSTANTS(GENERATE_VM_INT_CONSTANT_ENTRY, | 2875 VM_INT_CONSTANTS(GENERATE_VM_INT_CONSTANT_ENTRY, |
2891 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | 2876 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, |
2892 GENERATE_C1_VM_INT_CONSTANT_ENTRY, | 2877 GENERATE_C1_VM_INT_CONSTANT_ENTRY, |
2893 GENERATE_C2_VM_INT_CONSTANT_ENTRY, | 2878 GENERATE_C2_VM_INT_CONSTANT_ENTRY, |
2894 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | 2879 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) |
2895 GENERATE_VM_INT_CONSTANT_LAST_ENTRY) | |
2896 | 2880 |
2897 #ifndef SERIALGC | 2881 #ifndef SERIALGC |
2898 VM_INT_CONSTANTS_CMS(GENERATE_VM_INT_CONSTANT_ENTRY) | 2882 VM_INT_CONSTANTS_CMS(GENERATE_VM_INT_CONSTANT_ENTRY) |
2899 | 2883 |
2900 VM_INT_CONSTANTS_PARNEW(GENERATE_VM_INT_CONSTANT_ENTRY) | 2884 VM_INT_CONSTANTS_PARNEW(GENERATE_VM_INT_CONSTANT_ENTRY) |
2902 | 2886 |
2903 VM_INT_CONSTANTS_CPU(GENERATE_VM_INT_CONSTANT_ENTRY, | 2887 VM_INT_CONSTANTS_CPU(GENERATE_VM_INT_CONSTANT_ENTRY, |
2904 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | 2888 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, |
2905 GENERATE_C1_VM_INT_CONSTANT_ENTRY, | 2889 GENERATE_C1_VM_INT_CONSTANT_ENTRY, |
2906 GENERATE_C2_VM_INT_CONSTANT_ENTRY, | 2890 GENERATE_C2_VM_INT_CONSTANT_ENTRY, |
2907 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | 2891 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) |
2908 GENERATE_VM_INT_CONSTANT_LAST_ENTRY) | |
2909 | 2892 |
2910 VM_INT_CONSTANTS_OS_CPU(GENERATE_VM_INT_CONSTANT_ENTRY, | 2893 VM_INT_CONSTANTS_OS_CPU(GENERATE_VM_INT_CONSTANT_ENTRY, |
2911 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | 2894 GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, |
2912 GENERATE_C1_VM_INT_CONSTANT_ENTRY, | 2895 GENERATE_C1_VM_INT_CONSTANT_ENTRY, |
2913 GENERATE_C2_VM_INT_CONSTANT_ENTRY, | 2896 GENERATE_C2_VM_INT_CONSTANT_ENTRY, |
2914 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, | 2897 GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) |
2915 GENERATE_VM_INT_CONSTANT_LAST_ENTRY) | 2898 |
2899 GENERATE_VM_INT_CONSTANT_LAST_ENTRY() | |
2916 }; | 2900 }; |
2917 | 2901 |
2918 VMLongConstantEntry VMStructs::localHotSpotVMLongConstants[] = { | 2902 VMLongConstantEntry VMStructs::localHotSpotVMLongConstants[] = { |
2919 | 2903 |
2920 VM_LONG_CONSTANTS(GENERATE_VM_LONG_CONSTANT_ENTRY, | 2904 VM_LONG_CONSTANTS(GENERATE_VM_LONG_CONSTANT_ENTRY, |
2921 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | 2905 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, |
2922 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, | 2906 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, |
2923 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, | 2907 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, |
2924 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | 2908 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY) |
2925 GENERATE_VM_LONG_CONSTANT_LAST_ENTRY) | |
2926 | 2909 |
2927 VM_LONG_CONSTANTS_CPU(GENERATE_VM_LONG_CONSTANT_ENTRY, | 2910 VM_LONG_CONSTANTS_CPU(GENERATE_VM_LONG_CONSTANT_ENTRY, |
2928 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | 2911 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, |
2929 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, | 2912 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, |
2930 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, | 2913 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, |
2931 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | 2914 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY) |
2932 GENERATE_VM_LONG_CONSTANT_LAST_ENTRY) | |
2933 | 2915 |
2934 VM_LONG_CONSTANTS_OS_CPU(GENERATE_VM_LONG_CONSTANT_ENTRY, | 2916 VM_LONG_CONSTANTS_OS_CPU(GENERATE_VM_LONG_CONSTANT_ENTRY, |
2935 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | 2917 GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, |
2936 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, | 2918 GENERATE_C1_VM_LONG_CONSTANT_ENTRY, |
2937 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, | 2919 GENERATE_C2_VM_LONG_CONSTANT_ENTRY, |
2938 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, | 2920 GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY) |
2939 GENERATE_VM_LONG_CONSTANT_LAST_ENTRY) | 2921 |
2922 GENERATE_VM_LONG_CONSTANT_LAST_ENTRY() | |
2940 }; | 2923 }; |
2941 | 2924 |
2942 // This is used both to check the types of referenced fields and, in | 2925 // This is used both to check the types of referenced fields and, in |
2943 // debug builds, to ensure that all of the field types are present. | 2926 // debug builds, to ensure that all of the field types are present. |
2944 void | 2927 void |
2949 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, | 2932 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, |
2950 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, | 2933 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, |
2951 CHECK_C1_NONSTATIC_VM_STRUCT_ENTRY, | 2934 CHECK_C1_NONSTATIC_VM_STRUCT_ENTRY, |
2952 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, | 2935 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, |
2953 CHECK_NO_OP, | 2936 CHECK_NO_OP, |
2954 CHECK_NO_OP, | 2937 CHECK_NO_OP); |
2955 CHECK_SENTINEL); | |
2956 | 2938 |
2957 #ifndef SERIALGC | 2939 #ifndef SERIALGC |
2958 VM_STRUCTS_PARALLELGC(CHECK_NONSTATIC_VM_STRUCT_ENTRY, | 2940 VM_STRUCTS_PARALLELGC(CHECK_NONSTATIC_VM_STRUCT_ENTRY, |
2959 CHECK_STATIC_VM_STRUCT_ENTRY); | 2941 CHECK_STATIC_VM_STRUCT_ENTRY); |
2960 | 2942 |
2971 CHECK_NO_OP, | 2953 CHECK_NO_OP, |
2972 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, | 2954 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, |
2973 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, | 2955 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, |
2974 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, | 2956 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, |
2975 CHECK_NO_OP, | 2957 CHECK_NO_OP, |
2976 CHECK_NO_OP, | 2958 CHECK_NO_OP); |
2977 CHECK_SENTINEL); | |
2978 | 2959 |
2979 VM_STRUCTS_OS_CPU(CHECK_NONSTATIC_VM_STRUCT_ENTRY, | 2960 VM_STRUCTS_OS_CPU(CHECK_NONSTATIC_VM_STRUCT_ENTRY, |
2980 CHECK_STATIC_VM_STRUCT_ENTRY, | 2961 CHECK_STATIC_VM_STRUCT_ENTRY, |
2981 CHECK_NO_OP, | 2962 CHECK_NO_OP, |
2982 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, | 2963 CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, |
2983 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, | 2964 CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, |
2984 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, | 2965 CHECK_C2_NONSTATIC_VM_STRUCT_ENTRY, |
2985 CHECK_NO_OP, | 2966 CHECK_NO_OP, |
2986 CHECK_NO_OP, | 2967 CHECK_NO_OP); |
2987 CHECK_SENTINEL); | |
2988 | 2968 |
2989 VM_TYPES(CHECK_VM_TYPE_ENTRY, | 2969 VM_TYPES(CHECK_VM_TYPE_ENTRY, |
2990 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 2970 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
2991 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 2971 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
2992 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 2972 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
2993 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 2973 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
2994 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, | 2974 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, |
2995 CHECK_C2_VM_TYPE_ENTRY, | 2975 CHECK_C2_VM_TYPE_ENTRY, |
2996 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY, | 2976 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY); |
2997 CHECK_SENTINEL); | |
2998 | 2977 |
2999 #ifndef SERIALGC | 2978 #ifndef SERIALGC |
3000 VM_TYPES_PARALLELGC(CHECK_VM_TYPE_ENTRY, | 2979 VM_TYPES_PARALLELGC(CHECK_VM_TYPE_ENTRY, |
3001 CHECK_SINGLE_ARG_VM_TYPE_NO_OP); | 2980 CHECK_SINGLE_ARG_VM_TYPE_NO_OP); |
3002 | 2981 |
3014 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 2993 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
3015 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 2994 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
3016 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 2995 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
3017 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, | 2996 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, |
3018 CHECK_C2_VM_TYPE_ENTRY, | 2997 CHECK_C2_VM_TYPE_ENTRY, |
3019 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY, | 2998 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY); |
3020 CHECK_SENTINEL); | |
3021 | 2999 |
3022 VM_TYPES_OS_CPU(CHECK_VM_TYPE_ENTRY, | 3000 VM_TYPES_OS_CPU(CHECK_VM_TYPE_ENTRY, |
3023 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 3001 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
3024 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 3002 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
3025 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 3003 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
3026 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, | 3004 CHECK_SINGLE_ARG_VM_TYPE_NO_OP, |
3027 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, | 3005 CHECK_C1_TOPLEVEL_VM_TYPE_ENTRY, |
3028 CHECK_C2_VM_TYPE_ENTRY, | 3006 CHECK_C2_VM_TYPE_ENTRY, |
3029 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY, | 3007 CHECK_C2_TOPLEVEL_VM_TYPE_ENTRY); |
3030 CHECK_SENTINEL); | |
3031 | 3008 |
3032 // | 3009 // |
3033 // Split VM_STRUCTS() invocation into two parts to allow MS VC++ 6.0 | 3010 // Split VM_STRUCTS() invocation into two parts to allow MS VC++ 6.0 |
3034 // to build with the source mounted over SNC3.2. Symptom was that | 3011 // to build with the source mounted over SNC3.2. Symptom was that |
3035 // debug build failed with an internal compiler error. Has been seen | 3012 // debug build failed with an internal compiler error. Has been seen |
3044 // | 3021 // |
3045 // NOTE: taken out because this was just not working on everyone's | 3022 // NOTE: taken out because this was just not working on everyone's |
3046 // Solstice NFS setup. If everyone switches to local workspaces on | 3023 // Solstice NFS setup. If everyone switches to local workspaces on |
3047 // Win32, we can put this back in. | 3024 // Win32, we can put this back in. |
3048 #ifndef _WINDOWS | 3025 #ifndef _WINDOWS |
3049 debug_only(VM_STRUCTS(ENSURE_FIELD_TYPE_PRESENT, \ | 3026 debug_only(VM_STRUCTS(ENSURE_FIELD_TYPE_PRESENT, |
3050 CHECK_NO_OP, \ | 3027 CHECK_NO_OP, |
3051 CHECK_NO_OP, \ | 3028 CHECK_NO_OP, |
3052 CHECK_NO_OP, \ | 3029 CHECK_NO_OP, |
3053 CHECK_NO_OP, \ | 3030 CHECK_NO_OP, |
3054 CHECK_NO_OP, \ | 3031 CHECK_NO_OP, |
3055 CHECK_NO_OP, \ | 3032 CHECK_NO_OP, |
3056 CHECK_NO_OP, \ | 3033 CHECK_NO_OP, |
3057 CHECK_NO_OP, \ | 3034 CHECK_NO_OP)); |
3058 CHECK_SENTINEL)); | 3035 debug_only(VM_STRUCTS(CHECK_NO_OP, |
3059 debug_only(VM_STRUCTS(CHECK_NO_OP, \ | 3036 ENSURE_FIELD_TYPE_PRESENT, |
3060 ENSURE_FIELD_TYPE_PRESENT, \ | 3037 CHECK_NO_OP, |
3061 CHECK_NO_OP, \ | 3038 ENSURE_FIELD_TYPE_PRESENT, |
3062 ENSURE_FIELD_TYPE_PRESENT, \ | 3039 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, |
3063 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, \ | 3040 ENSURE_C1_FIELD_TYPE_PRESENT, |
3064 ENSURE_C1_FIELD_TYPE_PRESENT, \ | 3041 ENSURE_C2_FIELD_TYPE_PRESENT, |
3065 ENSURE_C2_FIELD_TYPE_PRESENT, \ | 3042 CHECK_NO_OP, |
3066 CHECK_NO_OP, \ | 3043 CHECK_NO_OP)); |
3067 CHECK_NO_OP, \ | |
3068 CHECK_SENTINEL)); | |
3069 #ifndef SERIALGC | 3044 #ifndef SERIALGC |
3070 debug_only(VM_STRUCTS_PARALLELGC(ENSURE_FIELD_TYPE_PRESENT, \ | 3045 debug_only(VM_STRUCTS_PARALLELGC(ENSURE_FIELD_TYPE_PRESENT, |
3071 ENSURE_FIELD_TYPE_PRESENT)); | 3046 ENSURE_FIELD_TYPE_PRESENT)); |
3072 debug_only(VM_STRUCTS_CMS(ENSURE_FIELD_TYPE_PRESENT, \ | 3047 debug_only(VM_STRUCTS_CMS(ENSURE_FIELD_TYPE_PRESENT, |
3073 ENSURE_FIELD_TYPE_PRESENT, \ | 3048 ENSURE_FIELD_TYPE_PRESENT, |
3074 ENSURE_FIELD_TYPE_PRESENT)); | 3049 ENSURE_FIELD_TYPE_PRESENT)); |
3075 debug_only(VM_STRUCTS_G1(ENSURE_FIELD_TYPE_PRESENT, \ | 3050 debug_only(VM_STRUCTS_G1(ENSURE_FIELD_TYPE_PRESENT, |
3076 ENSURE_FIELD_TYPE_PRESENT)); | 3051 ENSURE_FIELD_TYPE_PRESENT)); |
3077 #endif // SERIALGC | 3052 #endif // SERIALGC |
3078 debug_only(VM_STRUCTS_CPU(ENSURE_FIELD_TYPE_PRESENT, \ | 3053 debug_only(VM_STRUCTS_CPU(ENSURE_FIELD_TYPE_PRESENT, |
3079 ENSURE_FIELD_TYPE_PRESENT, \ | 3054 ENSURE_FIELD_TYPE_PRESENT, |
3080 CHECK_NO_OP, \ | 3055 CHECK_NO_OP, |
3081 ENSURE_FIELD_TYPE_PRESENT, \ | 3056 ENSURE_FIELD_TYPE_PRESENT, |
3082 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, \ | 3057 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, |
3083 ENSURE_C2_FIELD_TYPE_PRESENT, \ | 3058 ENSURE_C2_FIELD_TYPE_PRESENT, |
3084 CHECK_NO_OP, \ | 3059 CHECK_NO_OP, |
3085 CHECK_NO_OP, \ | 3060 CHECK_NO_OP)); |
3086 CHECK_SENTINEL)); | 3061 debug_only(VM_STRUCTS_OS_CPU(ENSURE_FIELD_TYPE_PRESENT, |
3087 debug_only(VM_STRUCTS_OS_CPU(ENSURE_FIELD_TYPE_PRESENT, \ | 3062 ENSURE_FIELD_TYPE_PRESENT, |
3088 ENSURE_FIELD_TYPE_PRESENT, \ | 3063 CHECK_NO_OP, |
3089 CHECK_NO_OP, \ | 3064 ENSURE_FIELD_TYPE_PRESENT, |
3090 ENSURE_FIELD_TYPE_PRESENT, \ | 3065 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, |
3091 ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT, \ | 3066 ENSURE_C2_FIELD_TYPE_PRESENT, |
3092 ENSURE_C2_FIELD_TYPE_PRESENT, \ | 3067 CHECK_NO_OP, |
3093 CHECK_NO_OP, \ | 3068 CHECK_NO_OP)); |
3094 CHECK_NO_OP, \ | |
3095 CHECK_SENTINEL)); | |
3096 #endif | 3069 #endif |
3097 } | 3070 } |
3098 | 3071 |
3099 extern "C" { | 3072 extern "C" { |
3100 | 3073 |
3150 char * s = new char[len]; | 3123 char * s = new char[len]; |
3151 strncpy(s, typeName, len - 1); | 3124 strncpy(s, typeName, len - 1); |
3152 s[len-1] = '\0'; | 3125 s[len-1] = '\0'; |
3153 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); | 3126 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); |
3154 if (recursiveFindType(origtypes, s, true) == 1) { | 3127 if (recursiveFindType(origtypes, s, true) == 1) { |
3155 delete s; | 3128 delete [] s; |
3156 return 1; | 3129 return 1; |
3157 } | 3130 } |
3158 delete s; | 3131 delete [] s; |
3159 } | 3132 } |
3160 const char* start = NULL; | 3133 const char* start = NULL; |
3161 if (strstr(typeName, "GrowableArray<") == typeName) { | 3134 if (strstr(typeName, "GrowableArray<") == typeName) { |
3162 start = typeName + strlen("GrowableArray<"); | 3135 start = typeName + strlen("GrowableArray<"); |
3163 } else if (strstr(typeName, "Array<") == typeName) { | 3136 } else if (strstr(typeName, "Array<") == typeName) { |
3169 char * s = new char[len]; | 3142 char * s = new char[len]; |
3170 strncpy(s, start, len - 1); | 3143 strncpy(s, start, len - 1); |
3171 s[len-1] = '\0'; | 3144 s[len-1] = '\0'; |
3172 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); | 3145 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); |
3173 if (recursiveFindType(origtypes, s, true) == 1) { | 3146 if (recursiveFindType(origtypes, s, true) == 1) { |
3174 delete s; | 3147 delete [] s; |
3175 return 1; | 3148 return 1; |
3176 } | 3149 } |
3177 delete s; | 3150 delete [] s; |
3178 } | 3151 } |
3179 if (strstr(typeName, "const ") == typeName) { | 3152 if (strstr(typeName, "const ") == typeName) { |
3180 const char * s = typeName + strlen("const "); | 3153 const char * s = typeName + strlen("const "); |
3181 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); | 3154 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); |
3182 if (recursiveFindType(origtypes, s, true) == 1) { | 3155 if (recursiveFindType(origtypes, s, true) == 1) { |
3186 if (strstr(typeName, " const") == typeName + len - 6) { | 3159 if (strstr(typeName, " const") == typeName + len - 6) { |
3187 char * s = strdup(typeName); | 3160 char * s = strdup(typeName); |
3188 s[len - 6] = '\0'; | 3161 s[len - 6] = '\0'; |
3189 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); | 3162 // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName); |
3190 if (recursiveFindType(origtypes, s, true) == 1) { | 3163 if (recursiveFindType(origtypes, s, true) == 1) { |
3164 free(s); | |
3191 return 1; | 3165 return 1; |
3192 } | 3166 } |
3167 free(s); | |
3193 } | 3168 } |
3194 if (!isRecurse) { | 3169 if (!isRecurse) { |
3195 tty->print_cr("type \"%s\" not found", typeName); | 3170 tty->print_cr("type \"%s\" not found", typeName); |
3196 } | 3171 } |
3197 return 0; | 3172 return 0; |
3210 debug_only(VMStructs::init()); | 3185 debug_only(VMStructs::init()); |
3211 } | 3186 } |
3212 | 3187 |
3213 #ifndef PRODUCT | 3188 #ifndef PRODUCT |
3214 void VMStructs::test() { | 3189 void VMStructs::test() { |
3190 // Make sure last entry in the each array is indeed the correct end marker. | |
3191 // The reason why these are static is to make sure they are zero initialized. | |
3192 // Putting them on the stack will leave some garbage in the padding of some fields. | |
3193 static VMStructEntry struct_last_entry = GENERATE_VM_STRUCT_LAST_ENTRY(); | |
3194 assert(memcmp(&localHotSpotVMStructs[(sizeof(localHotSpotVMStructs) / sizeof(VMStructEntry)) - 1], | |
3195 &struct_last_entry, | |
3196 sizeof(VMStructEntry)) == 0, "Incorrect last entry in localHotSpotVMStructs"); | |
3197 | |
3198 static VMTypeEntry type_last_entry = GENERATE_VM_TYPE_LAST_ENTRY(); | |
3199 assert(memcmp(&localHotSpotVMTypes[sizeof(localHotSpotVMTypes) / sizeof(VMTypeEntry) - 1], | |
3200 &type_last_entry, | |
3201 sizeof(VMTypeEntry)) == 0, "Incorrect last entry in localHotSpotVMTypes"); | |
3202 | |
3203 static VMIntConstantEntry int_last_entry = GENERATE_VM_INT_CONSTANT_LAST_ENTRY(); | |
3204 assert(memcmp(&localHotSpotVMIntConstants[sizeof(localHotSpotVMIntConstants) / sizeof(VMIntConstantEntry) - 1], | |
3205 &int_last_entry, | |
3206 sizeof(VMIntConstantEntry)) == 0, "Incorrect last entry in localHotSpotVMIntConstants"); | |
3207 | |
3208 static VMLongConstantEntry long_last_entry = GENERATE_VM_LONG_CONSTANT_LAST_ENTRY(); | |
3209 assert(memcmp(&localHotSpotVMLongConstants[sizeof(localHotSpotVMLongConstants) / sizeof(VMLongConstantEntry) - 1], | |
3210 &long_last_entry, | |
3211 sizeof(VMLongConstantEntry)) == 0, "Incorrect last entry in localHotSpotVMLongConstants"); | |
3212 | |
3213 | |
3215 // Check for duplicate entries in type array | 3214 // Check for duplicate entries in type array |
3216 for (int i = 0; localHotSpotVMTypes[i].typeName != NULL; i++) { | 3215 for (int i = 0; localHotSpotVMTypes[i].typeName != NULL; i++) { |
3217 for (int j = i + 1; localHotSpotVMTypes[j].typeName != NULL; j++) { | 3216 for (int j = i + 1; localHotSpotVMTypes[j].typeName != NULL; j++) { |
3218 if (strcmp(localHotSpotVMTypes[i].typeName, localHotSpotVMTypes[j].typeName) == 0) { | 3217 if (strcmp(localHotSpotVMTypes[i].typeName, localHotSpotVMTypes[j].typeName) == 0) { |
3219 tty->print_cr("Duplicate entries for '%s'", localHotSpotVMTypes[i].typeName); | 3218 tty->print_cr("Duplicate entries for '%s'", localHotSpotVMTypes[i].typeName); |