1 /*
2 * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_CLASSFILE_VMCLASSMACROS_HPP
26 #define SHARE_CLASSFILE_VMCLASSMACROS_HPP
27
28 // _VM_CLASS_ENUM - internal: should be used only by vmClass*.{hpp,cpp}
29 #define _VM_CLASS_ENUM(kname) kname##_knum
30
31 #define VM_CLASS_ID(kname) vmClassID::_VM_CLASS_ENUM(kname)
32
33 // VM_CLASSES_DO iterates the classes that are directly referenced
34 // by the VM, such as java.lang.Object and java.lang.String. These
35 // classes are resolved at VM bootstrap, before any Java code is executed,
36 // so no class loader is able to provide a different definition.
37 //
38 // Each VM class has a short klass name (like Object_klass),
39 // and a vmSymbol name (like java_lang_Object). Both of these can
40 // be used to find the vmClassID for this class. The following two
41 // macros will evaluate to the same value:
42 //
43 // VM_CLASS_ID(Object_klass)
44 // VM_CLASS_ID(java_lang_Object)
45 //
46 // The order of these definitions is significant: the classes are
47 // resolved by vmClasses::resolve_all() in this order. Changing the
48 // order may require careful restructuring of the VM start-up sequence.
49 //
50 #define VM_CLASSES_DO(do_klass) \
51 /* well-known classes */ \
52 do_klass(Object_klass, java_lang_Object ) \
53 do_klass(String_klass, java_lang_String ) \
54 do_klass(Class_klass, java_lang_Class ) \
55 do_klass(Cloneable_klass, java_lang_Cloneable ) \
56 do_klass(ClassLoader_klass, java_lang_ClassLoader ) \
57 do_klass(Serializable_klass, java_io_Serializable ) \
58 do_klass(System_klass, java_lang_System ) \
59 do_klass(Throwable_klass, java_lang_Throwable ) \
60 do_klass(Error_klass, java_lang_Error ) \
61 do_klass(Exception_klass, java_lang_Exception ) \
62 do_klass(RuntimeException_klass, java_lang_RuntimeException ) \
63 do_klass(ProtectionDomain_klass, java_security_ProtectionDomain ) \
64 do_klass(SecureClassLoader_klass, java_security_SecureClassLoader ) \
65 do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException ) \
66 do_klass(Record_klass, java_lang_Record ) \
67 do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError ) \
68 do_klass(LinkageError_klass, java_lang_LinkageError ) \
69 do_klass(ClassCastException_klass, java_lang_ClassCastException ) \
70 do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException ) \
71 do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError ) \
72 do_klass(InternalError_klass, java_lang_InternalError ) \
73 do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError ) \
74 do_klass(StackOverflowError_klass, java_lang_StackOverflowError ) \
75 do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \
76 do_klass(Reference_klass, java_lang_ref_Reference ) \
77 do_klass(IllegalCallerException_klass, java_lang_IllegalCallerException ) \
78 \
79 /* ref klasses and set reference types */ \
80 do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \
81 do_klass(WeakReference_klass, java_lang_ref_WeakReference ) \
82 do_klass(FinalReference_klass, java_lang_ref_FinalReference ) \
83 do_klass(PhantomReference_klass, java_lang_ref_PhantomReference ) \
84 do_klass(Finalizer_klass, java_lang_ref_Finalizer ) \
85 \
86 do_klass(Thread_klass, java_lang_Thread ) \
87 do_klass(Thread_FieldHolder_klass, java_lang_Thread_FieldHolder ) \
88 do_klass(Thread_Constants_klass, java_lang_Thread_Constants ) \
89 do_klass(ThreadGroup_klass, java_lang_ThreadGroup ) \
90 do_klass(BaseVirtualThread_klass, java_lang_BaseVirtualThread ) \
91 do_klass(VirtualThread_klass, java_lang_VirtualThread ) \
92 do_klass(BoundVirtualThread_klass, java_lang_BoundVirtualThread ) \
93 do_klass(Properties_klass, java_util_Properties ) \
94 do_klass(Module_klass, java_lang_Module ) \
95 do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject ) \
96 do_klass(reflect_Field_klass, java_lang_reflect_Field ) \
97 do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter ) \
98 do_klass(reflect_Method_klass, java_lang_reflect_Method ) \
99 do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor ) \
100 \
101 do_klass(Runnable_klass, java_lang_Runnable ) \
102 do_klass(ContinuationScope_klass, jdk_internal_vm_ContinuationScope ) \
103 do_klass(Continuation_klass, jdk_internal_vm_Continuation ) \
104 do_klass(StackChunk_klass, jdk_internal_vm_StackChunk ) \
105 \
106 do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl ) \
107 do_klass(reflect_ConstantPool_klass, reflect_ConstantPool ) \
108 do_klass(reflect_CallerSensitive_klass, reflect_CallerSensitive ) \
109 do_klass(reflect_DirectConstructorHandleAccessor_NativeAccessor_klass, reflect_DirectConstructorHandleAccessor_NativeAccessor) \
110 \
111 /* support for dynamic typing */ \
112 do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle ) \
113 do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle ) \
114 do_klass(VarHandle_klass, java_lang_invoke_VarHandle ) \
115 do_klass(MemberName_klass, java_lang_invoke_MemberName ) \
116 do_klass(ResolvedMethodName_klass, java_lang_invoke_ResolvedMethodName ) \
117 do_klass(MethodHandleImpl_klass, java_lang_invoke_MethodHandleImpl ) \
118 do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives ) \
119 do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm ) \
120 do_klass(MethodType_klass, java_lang_invoke_MethodType ) \
121 do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError ) \
122 do_klass(CallSite_klass, java_lang_invoke_CallSite ) \
123 do_klass(NativeEntryPoint_klass, jdk_internal_foreign_abi_NativeEntryPoint ) \
124 do_klass(ABIDescriptor_klass, jdk_internal_foreign_abi_ABIDescriptor ) \
125 do_klass(VMStorage_klass, jdk_internal_foreign_abi_VMStorage ) \
126 do_klass(CallConv_klass, jdk_internal_foreign_abi_CallConv ) \
127 do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite ) \
128 do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite ) \
129 do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite ) \
130 \
131 do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives ) \
132 do_klass(StringBuffer_klass, java_lang_StringBuffer ) \
133 do_klass(StringBuilder_klass, java_lang_StringBuilder ) \
134 do_klass(UnsafeConstants_klass, jdk_internal_misc_UnsafeConstants ) \
135 do_klass(internal_Unsafe_klass, jdk_internal_misc_Unsafe ) \
136 do_klass(module_Modules_klass, jdk_internal_module_Modules ) \
137 \
138 /* support for CDS */ \
139 do_klass(ByteArrayInputStream_klass, java_io_ByteArrayInputStream ) \
140 do_klass(URL_klass, java_net_URL ) \
141 do_klass(Enum_klass, java_lang_Enum ) \
142 do_klass(Jar_Manifest_klass, java_util_jar_Manifest ) \
143 do_klass(jdk_internal_loader_BuiltinClassLoader_klass,jdk_internal_loader_BuiltinClassLoader ) \
144 do_klass(jdk_internal_loader_ClassLoaders_klass, jdk_internal_loader_ClassLoaders ) \
145 do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader) \
146 do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader) \
147 do_klass(CodeSource_klass, java_security_CodeSource ) \
148 do_klass(ConcurrentHashMap_klass, java_util_concurrent_ConcurrentHashMap ) \
149 do_klass(ArrayList_klass, java_util_ArrayList ) \
150 \
151 do_klass(StackTraceElement_klass, java_lang_StackTraceElement ) \
152 \
153 do_klass(nio_Buffer_klass, java_nio_Buffer ) \
154 \
155 /* Stack Walking */ \
156 do_klass(StackWalker_klass, java_lang_StackWalker ) \
157 do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker ) \
158 do_klass(ClassFrameInfo_klass, java_lang_ClassFrameInfo ) \
159 do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo ) \
160 do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo ) \
161 \
162 /* support for stack dump lock analysis */ \
163 do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer) \
164 \
165 /* boxing klasses */ \
166 do_klass(Boolean_klass, java_lang_Boolean ) \
167 do_klass(Character_klass, java_lang_Character ) \
168 do_klass(Float_klass, java_lang_Float ) \
169 do_klass(Double_klass, java_lang_Double ) \
170 do_klass(Byte_klass, java_lang_Byte ) \
171 do_klass(Short_klass, java_lang_Short ) \
172 do_klass(Integer_klass, java_lang_Integer ) \
173 do_klass(Long_klass, java_lang_Long ) \
174 do_klass(Void_klass, java_lang_Void ) \
175 \
176 /* force inline of iterators */ \
177 do_klass(Iterator_klass, java_util_Iterator ) \
178 \
179 /* support for records */ \
180 do_klass(RecordComponent_klass, java_lang_reflect_RecordComponent ) \
181 \
182 /* support for vectors*/ \
183 do_klass(vector_VectorSupport_klass, jdk_internal_vm_vector_VectorSupport ) \
184 do_klass(vector_VectorPayload_klass, jdk_internal_vm_vector_VectorPayload ) \
185 do_klass(vector_Vector_klass, jdk_internal_vm_vector_Vector ) \
186 do_klass(vector_VectorMask_klass, jdk_internal_vm_vector_VectorMask ) \
187 do_klass(vector_VectorShuffle_klass, jdk_internal_vm_vector_VectorShuffle ) \
188 \
189 /* GC support */ \
190 do_klass(FillerObject_klass, jdk_internal_vm_FillerObject ) \
191 \
192 /*end*/
193
194 #endif // SHARE_CLASSFILE_VMCLASSMACROS_HPP