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);