1190 if (PrintCodeCacheOnCompilation) {
1191 stringStream s;
1192 // Dump code cache into a buffer before locking the tty,
1193 {
1194 MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
1195 CodeCache::print_summary(&s, false);
1196 }
1197 ttyLocker ttyl;
1198 tty->print_raw_cr(s.freeze());
1199 }
1200
1201 if (result != JVMCI::ok) {
1202 assert(cb == nullptr, "should be");
1203 } else {
1204 stats->on_install(cb);
1205 if (installed_code_handle.is_non_null()) {
1206 if (cb->is_nmethod()) {
1207 assert(JVMCIENV->isa_HotSpotNmethod(installed_code_handle), "wrong type");
1208 // Clear the link to an old nmethod first
1209 JVMCIObject nmethod_mirror = installed_code_handle;
1210 JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, true, nmethod::ChangeReason::JVMCI_replacing_with_new_code, JVMCI_CHECK_0);
1211 } else {
1212 assert(JVMCIENV->isa_InstalledCode(installed_code_handle), "wrong type");
1213 }
1214 // Initialize the link to the new code blob
1215 JVMCIENV->initialize_installed_code(installed_code_handle, cb, JVMCI_CHECK_0);
1216 }
1217 }
1218 return result;
1219 C2V_END
1220
1221 C2V_VMENTRY(void, resetCompilationStatistics, (JNIEnv* env, jobject))
1222 JVMCICompiler* compiler = JVMCICompiler::instance(true, CHECK);
1223 CompilerStatistics* stats = compiler->stats();
1224 stats->_standard.reset();
1225 stats->_osr.reset();
1226 C2V_END
1227
1228 C2V_VMENTRY_NULL(jobject, disassembleCodeBlob, (JNIEnv* env, jobject, jobject installedCode))
1229 HandleMark hm(THREAD);
1230
1231 if (installedCode == nullptr) {
1232 JVMCI_THROW_MSG_NULL(NullPointerException, "installedCode is null");
1233 }
1234
1235 JVMCIObject installedCodeObject = JVMCIENV->wrap(installedCode);
1236 CodeBlob* cb = JVMCIENV->get_code_blob(installedCodeObject);
1237 if (cb == nullptr) {
1238 return nullptr;
1239 }
1240
1366 if (method_data == nullptr) {
1367 method->build_profiling_method_data(method, CHECK_NULL);
1368 method_data = method->method_data();
1369 if (method_data == nullptr) {
1370 THROW_MSG_NULL(vmSymbols::java_lang_OutOfMemoryError(), "cannot allocate MethodData")
1371 }
1372 }
1373 return method_data;
1374 }
1375
1376 C2V_VMENTRY(void, reprofile, (JNIEnv* env, jobject, ARGUMENT_PAIR(method)))
1377 methodHandle method(THREAD, UNPACK_PAIR(Method, method));
1378 MethodCounters* mcs = method->method_counters();
1379 if (mcs != nullptr) {
1380 mcs->clear_counters();
1381 }
1382 NOT_PRODUCT(method->set_compiled_invocation_count(0));
1383
1384 nmethod* code = method->code();
1385 if (code != nullptr) {
1386 code->make_not_entrant(nmethod::ChangeReason::JVMCI_reprofile);
1387 }
1388
1389 MethodData* method_data = method->method_data();
1390 if (method_data == nullptr) {
1391 method_data = get_profiling_method_data(method, CHECK);
1392 } else {
1393 CompilerThreadCanCallJava canCallJava(THREAD, true);
1394 method_data->reinitialize();
1395 }
1396 C2V_END
1397
1398
1399 C2V_VMENTRY(void, invalidateHotSpotNmethod, (JNIEnv* env, jobject, jobject hs_nmethod, jboolean deoptimize))
1400 JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod);
1401 JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, deoptimize, nmethod::ChangeReason::JVMCI_invalidate_nmethod, JVMCI_CHECK);
1402 C2V_END
1403
1404 C2V_VMENTRY_NULL(jlongArray, collectCounters, (JNIEnv* env, jobject))
1405 // Returns a zero length array if counters aren't enabled
1406 JVMCIPrimitiveArray array = JVMCIENV->new_longArray(JVMCICounterSize, JVMCI_CHECK_NULL);
1407 if (JVMCICounterSize > 0) {
1408 jlong* temp_array = NEW_RESOURCE_ARRAY(jlong, JVMCICounterSize);
1409 JavaThread::collect_counters(temp_array, JVMCICounterSize);
1410 JVMCIENV->copy_longs_from(temp_array, array, 0, JVMCICounterSize);
1411 }
1412 return (jlongArray) JVMCIENV->get_jobject(array);
1413 C2V_END
1414
1415 C2V_VMENTRY_0(jint, getCountersSize, (JNIEnv* env, jobject))
1416 return (jint) JVMCICounterSize;
1417 C2V_END
1418
1419 C2V_VMENTRY_0(jboolean, setCountersSize, (JNIEnv* env, jobject, jint new_size))
1420 return JavaThread::resize_all_jvmci_counters(new_size);
1421 C2V_END
1806 }
1807
1808 requireInHotSpot("materializeVirtualObjects", JVMCI_CHECK);
1809
1810 JVMCIENV->HotSpotStackFrameReference_initialize(JVMCI_CHECK);
1811
1812 // look for the given stack frame
1813 StackFrameStream fst(thread, false /* update */, true /* process_frames */);
1814 intptr_t* stack_pointer = (intptr_t*) JVMCIENV->get_HotSpotStackFrameReference_stackPointer(hs_frame);
1815 while (fst.current()->id() != stack_pointer && !fst.is_done()) {
1816 fst.next();
1817 }
1818 if (fst.current()->id() != stack_pointer) {
1819 JVMCI_THROW_MSG(IllegalStateException, "stack frame not found");
1820 }
1821
1822 if (invalidate) {
1823 if (!fst.current()->is_compiled_frame()) {
1824 JVMCI_THROW_MSG(IllegalStateException, "compiled stack frame expected");
1825 }
1826 fst.current()->cb()->as_nmethod()->make_not_entrant(nmethod::ChangeReason::JVMCI_materialize_virtual_object);
1827 }
1828 Deoptimization::deoptimize(thread, *fst.current(), Deoptimization::Reason_none);
1829 // look for the frame again as it has been updated by deopt (pc, deopt state...)
1830 StackFrameStream fstAfterDeopt(thread, true /* update */, true /* process_frames */);
1831 while (fstAfterDeopt.current()->id() != stack_pointer && !fstAfterDeopt.is_done()) {
1832 fstAfterDeopt.next();
1833 }
1834 if (fstAfterDeopt.current()->id() != stack_pointer) {
1835 JVMCI_THROW_MSG(IllegalStateException, "stack frame not found after deopt");
1836 }
1837
1838 vframe* vf = vframe::new_vframe(fstAfterDeopt.current(), fstAfterDeopt.register_map(), thread);
1839 if (!vf->is_compiled_frame()) {
1840 JVMCI_THROW_MSG(IllegalStateException, "compiled stack frame expected");
1841 }
1842
1843 GrowableArray<compiledVFrame*>* virtualFrames = new GrowableArray<compiledVFrame*>(10);
1844 while (true) {
1845 assert(vf->is_compiled_frame(), "Wrong frame type");
1846 virtualFrames->push(compiledVFrame::cast(vf));
3335 {CC "getUncachedStringInPool", CC "(" HS_CONSTANT_POOL2 "I)" JAVACONSTANT, FN_PTR(getUncachedStringInPool)},
3336 {CC "resolveTypeInPool", CC "(" HS_CONSTANT_POOL2 "I)" HS_KLASS, FN_PTR(resolveTypeInPool)},
3337 {CC "resolveFieldInPool", CC "(" HS_CONSTANT_POOL2 "I" HS_METHOD2 "B[I)" HS_KLASS, FN_PTR(resolveFieldInPool)},
3338 {CC "decodeFieldIndexToCPIndex", CC "(" HS_CONSTANT_POOL2 "I)I", FN_PTR(decodeFieldIndexToCPIndex)},
3339 {CC "decodeMethodIndexToCPIndex", CC "(" HS_CONSTANT_POOL2 "I)I", FN_PTR(decodeMethodIndexToCPIndex)},
3340 {CC "decodeIndyIndexToCPIndex", CC "(" HS_CONSTANT_POOL2 "IZ)I", FN_PTR(decodeIndyIndexToCPIndex)},
3341 {CC "resolveInvokeHandleInPool", CC "(" HS_CONSTANT_POOL2 "I)V", FN_PTR(resolveInvokeHandleInPool)},
3342 {CC "isResolvedInvokeHandleInPool", CC "(" HS_CONSTANT_POOL2 "II)I", FN_PTR(isResolvedInvokeHandleInPool)},
3343 {CC "resolveMethod", CC "(" HS_KLASS2 HS_METHOD2 HS_KLASS2 ")" HS_METHOD, FN_PTR(resolveMethod)},
3344 {CC "getSignaturePolymorphicHolders", CC "()[" STRING, FN_PTR(getSignaturePolymorphicHolders)},
3345 {CC "getVtableIndexForInterfaceMethod", CC "(" HS_KLASS2 HS_METHOD2 ")I", FN_PTR(getVtableIndexForInterfaceMethod)},
3346 {CC "getClassInitializer", CC "(" HS_KLASS2 ")" HS_METHOD, FN_PTR(getClassInitializer)},
3347 {CC "hasFinalizableSubclass", CC "(" HS_KLASS2 ")Z", FN_PTR(hasFinalizableSubclass)},
3348 {CC "getMaxCallTargetOffset", CC "(J)J", FN_PTR(getMaxCallTargetOffset)},
3349 {CC "asResolvedJavaMethod", CC "(" EXECUTABLE ")" HS_METHOD, FN_PTR(asResolvedJavaMethod)},
3350 {CC "getResolvedJavaMethod", CC "(" OBJECTCONSTANT "J)" HS_METHOD, FN_PTR(getResolvedJavaMethod)},
3351 {CC "getConstantPool", CC "(" OBJECT "JZ)" HS_CONSTANT_POOL, FN_PTR(getConstantPool)},
3352 {CC "getResolvedJavaType0", CC "(Ljava/lang/Object;JZ)" HS_KLASS, FN_PTR(getResolvedJavaType0)},
3353 {CC "readConfiguration", CC "()[" OBJECT, FN_PTR(readConfiguration)},
3354 {CC "installCode0", CC "(JJZ" HS_COMPILED_CODE "[" OBJECT INSTALLED_CODE "J[B)I", FN_PTR(installCode0)},
3355 {CC "getInstallCodeFlags", CC "()I", FN_PTR(getInstallCodeFlags)},
3356 {CC "resetCompilationStatistics", CC "()V", FN_PTR(resetCompilationStatistics)},
3357 {CC "disassembleCodeBlob", CC "(" INSTALLED_CODE ")" STRING, FN_PTR(disassembleCodeBlob)},
3358 {CC "executeHotSpotNmethod", CC "([" OBJECT HS_NMETHOD ")" OBJECT, FN_PTR(executeHotSpotNmethod)},
3359 {CC "getLineNumberTable", CC "(" HS_METHOD2 ")[J", FN_PTR(getLineNumberTable)},
3360 {CC "getLocalVariableTableStart", CC "(" HS_METHOD2 ")J", FN_PTR(getLocalVariableTableStart)},
3361 {CC "getLocalVariableTableLength", CC "(" HS_METHOD2 ")I", FN_PTR(getLocalVariableTableLength)},
3362 {CC "reprofile", CC "(" HS_METHOD2 ")V", FN_PTR(reprofile)},
3363 {CC "invalidateHotSpotNmethod", CC "(" HS_NMETHOD "Z)V", FN_PTR(invalidateHotSpotNmethod)},
3364 {CC "collectCounters", CC "()[J", FN_PTR(collectCounters)},
3365 {CC "getCountersSize", CC "()I", FN_PTR(getCountersSize)},
3366 {CC "setCountersSize", CC "(I)Z", FN_PTR(setCountersSize)},
3367 {CC "allocateCompileId", CC "(" HS_METHOD2 "I)I", FN_PTR(allocateCompileId)},
3368 {CC "isMature", CC "(J)Z", FN_PTR(isMature)},
3369 {CC "hasCompiledCodeForOSR", CC "(" HS_METHOD2 "II)Z", FN_PTR(hasCompiledCodeForOSR)},
3370 {CC "getSymbol", CC "(J)" STRING, FN_PTR(getSymbol)},
3371 {CC "getSignatureName", CC "(J)" STRING, FN_PTR(getSignatureName)},
3372 {CC "iterateFrames", CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT, FN_PTR(iterateFrames)},
3373 {CC "materializeVirtualObjects", CC "(" HS_STACK_FRAME_REF "Z)V", FN_PTR(materializeVirtualObjects)},
3374 {CC "shouldDebugNonSafepoints", CC "()Z", FN_PTR(shouldDebugNonSafepoints)},
3375 {CC "writeDebugOutput", CC "(JIZ)V", FN_PTR(writeDebugOutput)},
3376 {CC "flushDebugOutput", CC "()V", FN_PTR(flushDebugOutput)},
3377 {CC "methodDataProfileDataSize", CC "(JI)I", FN_PTR(methodDataProfileDataSize)},
3378 {CC "methodDataExceptionSeen", CC "(JI)I", FN_PTR(methodDataExceptionSeen)},
3379 {CC "interpreterFrameSize", CC "(" BYTECODE_FRAME ")I", FN_PTR(interpreterFrameSize)},
3380 {CC "compileToBytecode", CC "(" OBJECTCONSTANT ")V", FN_PTR(compileToBytecode)},
3381 {CC "getFlagValue", CC "(" STRING ")" OBJECT, FN_PTR(getFlagValue)},
3382 {CC "getInterfaces", CC "(" HS_KLASS2 ")[" HS_KLASS, FN_PTR(getInterfaces)},
3383 {CC "getComponentType", CC "(" HS_KLASS2 ")" HS_RESOLVED_TYPE, FN_PTR(getComponentType)},
|
1190 if (PrintCodeCacheOnCompilation) {
1191 stringStream s;
1192 // Dump code cache into a buffer before locking the tty,
1193 {
1194 MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
1195 CodeCache::print_summary(&s, false);
1196 }
1197 ttyLocker ttyl;
1198 tty->print_raw_cr(s.freeze());
1199 }
1200
1201 if (result != JVMCI::ok) {
1202 assert(cb == nullptr, "should be");
1203 } else {
1204 stats->on_install(cb);
1205 if (installed_code_handle.is_non_null()) {
1206 if (cb->is_nmethod()) {
1207 assert(JVMCIENV->isa_HotSpotNmethod(installed_code_handle), "wrong type");
1208 // Clear the link to an old nmethod first
1209 JVMCIObject nmethod_mirror = installed_code_handle;
1210 JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, true, nmethod::InvalidationReason::JVMCI_REPLACED_WITH_NEW_CODE, JVMCI_CHECK_0);
1211 } else {
1212 assert(JVMCIENV->isa_InstalledCode(installed_code_handle), "wrong type");
1213 }
1214 // Initialize the link to the new code blob
1215 JVMCIENV->initialize_installed_code(installed_code_handle, cb, JVMCI_CHECK_0);
1216 }
1217 }
1218 return result;
1219 C2V_END
1220
1221 C2V_VMENTRY_0(jobject, getInvalidationReasonDescription, (JNIEnv *env, jobject, jint invalidation_reason))
1222 HandleMark hm(THREAD);
1223 JNIHandleMark jni_hm(thread);
1224 nmethod::InvalidationReason reason = static_cast<nmethod::InvalidationReason>(invalidation_reason);
1225 JVMCIObject desc = JVMCIENV->create_string(nmethod::invalidation_reason_to_string(reason), JVMCI_CHECK_NULL);
1226 return JVMCIENV->get_jobject(desc);
1227 C2V_END
1228
1229 C2V_VMENTRY(void, resetCompilationStatistics, (JNIEnv* env, jobject))
1230 JVMCICompiler* compiler = JVMCICompiler::instance(true, CHECK);
1231 CompilerStatistics* stats = compiler->stats();
1232 stats->_standard.reset();
1233 stats->_osr.reset();
1234 C2V_END
1235
1236 C2V_VMENTRY_NULL(jobject, disassembleCodeBlob, (JNIEnv* env, jobject, jobject installedCode))
1237 HandleMark hm(THREAD);
1238
1239 if (installedCode == nullptr) {
1240 JVMCI_THROW_MSG_NULL(NullPointerException, "installedCode is null");
1241 }
1242
1243 JVMCIObject installedCodeObject = JVMCIENV->wrap(installedCode);
1244 CodeBlob* cb = JVMCIENV->get_code_blob(installedCodeObject);
1245 if (cb == nullptr) {
1246 return nullptr;
1247 }
1248
1374 if (method_data == nullptr) {
1375 method->build_profiling_method_data(method, CHECK_NULL);
1376 method_data = method->method_data();
1377 if (method_data == nullptr) {
1378 THROW_MSG_NULL(vmSymbols::java_lang_OutOfMemoryError(), "cannot allocate MethodData")
1379 }
1380 }
1381 return method_data;
1382 }
1383
1384 C2V_VMENTRY(void, reprofile, (JNIEnv* env, jobject, ARGUMENT_PAIR(method)))
1385 methodHandle method(THREAD, UNPACK_PAIR(Method, method));
1386 MethodCounters* mcs = method->method_counters();
1387 if (mcs != nullptr) {
1388 mcs->clear_counters();
1389 }
1390 NOT_PRODUCT(method->set_compiled_invocation_count(0));
1391
1392 nmethod* code = method->code();
1393 if (code != nullptr) {
1394 code->make_not_entrant(nmethod::InvalidationReason::JVMCI_REPROFILE);
1395 }
1396
1397 MethodData* method_data = method->method_data();
1398 if (method_data == nullptr) {
1399 method_data = get_profiling_method_data(method, CHECK);
1400 } else {
1401 CompilerThreadCanCallJava canCallJava(THREAD, true);
1402 method_data->reinitialize();
1403 }
1404 C2V_END
1405
1406
1407 C2V_VMENTRY(void, invalidateHotSpotNmethod, (JNIEnv* env, jobject, jobject hs_nmethod, jboolean deoptimize, jint invalidation_reason))
1408 int first = static_cast<int>(nmethod::InvalidationReason::C1_CODEPATCH);
1409 int last = static_cast<int>(nmethod::InvalidationReason::INVALIDATION_REASONS_COUNT);
1410 if (invalidation_reason < first || invalidation_reason >= last) {
1411 JVMCI_THROW_MSG(IllegalArgumentException, err_msg("Invalid invalidation_reason: %d", invalidation_reason));
1412 }
1413 JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod);
1414 JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, deoptimize, static_cast<nmethod::InvalidationReason>(invalidation_reason), JVMCI_CHECK);
1415 C2V_END
1416
1417 C2V_VMENTRY_NULL(jlongArray, collectCounters, (JNIEnv* env, jobject))
1418 // Returns a zero length array if counters aren't enabled
1419 JVMCIPrimitiveArray array = JVMCIENV->new_longArray(JVMCICounterSize, JVMCI_CHECK_NULL);
1420 if (JVMCICounterSize > 0) {
1421 jlong* temp_array = NEW_RESOURCE_ARRAY(jlong, JVMCICounterSize);
1422 JavaThread::collect_counters(temp_array, JVMCICounterSize);
1423 JVMCIENV->copy_longs_from(temp_array, array, 0, JVMCICounterSize);
1424 }
1425 return (jlongArray) JVMCIENV->get_jobject(array);
1426 C2V_END
1427
1428 C2V_VMENTRY_0(jint, getCountersSize, (JNIEnv* env, jobject))
1429 return (jint) JVMCICounterSize;
1430 C2V_END
1431
1432 C2V_VMENTRY_0(jboolean, setCountersSize, (JNIEnv* env, jobject, jint new_size))
1433 return JavaThread::resize_all_jvmci_counters(new_size);
1434 C2V_END
1819 }
1820
1821 requireInHotSpot("materializeVirtualObjects", JVMCI_CHECK);
1822
1823 JVMCIENV->HotSpotStackFrameReference_initialize(JVMCI_CHECK);
1824
1825 // look for the given stack frame
1826 StackFrameStream fst(thread, false /* update */, true /* process_frames */);
1827 intptr_t* stack_pointer = (intptr_t*) JVMCIENV->get_HotSpotStackFrameReference_stackPointer(hs_frame);
1828 while (fst.current()->id() != stack_pointer && !fst.is_done()) {
1829 fst.next();
1830 }
1831 if (fst.current()->id() != stack_pointer) {
1832 JVMCI_THROW_MSG(IllegalStateException, "stack frame not found");
1833 }
1834
1835 if (invalidate) {
1836 if (!fst.current()->is_compiled_frame()) {
1837 JVMCI_THROW_MSG(IllegalStateException, "compiled stack frame expected");
1838 }
1839 fst.current()->cb()->as_nmethod()->make_not_entrant(nmethod::InvalidationReason::JVMCI_MATERIALIZE_VIRTUAL_OBJECT);
1840 }
1841 Deoptimization::deoptimize(thread, *fst.current(), Deoptimization::Reason_none);
1842 // look for the frame again as it has been updated by deopt (pc, deopt state...)
1843 StackFrameStream fstAfterDeopt(thread, true /* update */, true /* process_frames */);
1844 while (fstAfterDeopt.current()->id() != stack_pointer && !fstAfterDeopt.is_done()) {
1845 fstAfterDeopt.next();
1846 }
1847 if (fstAfterDeopt.current()->id() != stack_pointer) {
1848 JVMCI_THROW_MSG(IllegalStateException, "stack frame not found after deopt");
1849 }
1850
1851 vframe* vf = vframe::new_vframe(fstAfterDeopt.current(), fstAfterDeopt.register_map(), thread);
1852 if (!vf->is_compiled_frame()) {
1853 JVMCI_THROW_MSG(IllegalStateException, "compiled stack frame expected");
1854 }
1855
1856 GrowableArray<compiledVFrame*>* virtualFrames = new GrowableArray<compiledVFrame*>(10);
1857 while (true) {
1858 assert(vf->is_compiled_frame(), "Wrong frame type");
1859 virtualFrames->push(compiledVFrame::cast(vf));
3348 {CC "getUncachedStringInPool", CC "(" HS_CONSTANT_POOL2 "I)" JAVACONSTANT, FN_PTR(getUncachedStringInPool)},
3349 {CC "resolveTypeInPool", CC "(" HS_CONSTANT_POOL2 "I)" HS_KLASS, FN_PTR(resolveTypeInPool)},
3350 {CC "resolveFieldInPool", CC "(" HS_CONSTANT_POOL2 "I" HS_METHOD2 "B[I)" HS_KLASS, FN_PTR(resolveFieldInPool)},
3351 {CC "decodeFieldIndexToCPIndex", CC "(" HS_CONSTANT_POOL2 "I)I", FN_PTR(decodeFieldIndexToCPIndex)},
3352 {CC "decodeMethodIndexToCPIndex", CC "(" HS_CONSTANT_POOL2 "I)I", FN_PTR(decodeMethodIndexToCPIndex)},
3353 {CC "decodeIndyIndexToCPIndex", CC "(" HS_CONSTANT_POOL2 "IZ)I", FN_PTR(decodeIndyIndexToCPIndex)},
3354 {CC "resolveInvokeHandleInPool", CC "(" HS_CONSTANT_POOL2 "I)V", FN_PTR(resolveInvokeHandleInPool)},
3355 {CC "isResolvedInvokeHandleInPool", CC "(" HS_CONSTANT_POOL2 "II)I", FN_PTR(isResolvedInvokeHandleInPool)},
3356 {CC "resolveMethod", CC "(" HS_KLASS2 HS_METHOD2 HS_KLASS2 ")" HS_METHOD, FN_PTR(resolveMethod)},
3357 {CC "getSignaturePolymorphicHolders", CC "()[" STRING, FN_PTR(getSignaturePolymorphicHolders)},
3358 {CC "getVtableIndexForInterfaceMethod", CC "(" HS_KLASS2 HS_METHOD2 ")I", FN_PTR(getVtableIndexForInterfaceMethod)},
3359 {CC "getClassInitializer", CC "(" HS_KLASS2 ")" HS_METHOD, FN_PTR(getClassInitializer)},
3360 {CC "hasFinalizableSubclass", CC "(" HS_KLASS2 ")Z", FN_PTR(hasFinalizableSubclass)},
3361 {CC "getMaxCallTargetOffset", CC "(J)J", FN_PTR(getMaxCallTargetOffset)},
3362 {CC "asResolvedJavaMethod", CC "(" EXECUTABLE ")" HS_METHOD, FN_PTR(asResolvedJavaMethod)},
3363 {CC "getResolvedJavaMethod", CC "(" OBJECTCONSTANT "J)" HS_METHOD, FN_PTR(getResolvedJavaMethod)},
3364 {CC "getConstantPool", CC "(" OBJECT "JZ)" HS_CONSTANT_POOL, FN_PTR(getConstantPool)},
3365 {CC "getResolvedJavaType0", CC "(Ljava/lang/Object;JZ)" HS_KLASS, FN_PTR(getResolvedJavaType0)},
3366 {CC "readConfiguration", CC "()[" OBJECT, FN_PTR(readConfiguration)},
3367 {CC "installCode0", CC "(JJZ" HS_COMPILED_CODE "[" OBJECT INSTALLED_CODE "J[B)I", FN_PTR(installCode0)},
3368 {CC "getInvalidationReasonDescription", CC "(I)" STRING, FN_PTR(getInvalidationReasonDescription)},
3369 {CC "getInstallCodeFlags", CC "()I", FN_PTR(getInstallCodeFlags)},
3370 {CC "resetCompilationStatistics", CC "()V", FN_PTR(resetCompilationStatistics)},
3371 {CC "disassembleCodeBlob", CC "(" INSTALLED_CODE ")" STRING, FN_PTR(disassembleCodeBlob)},
3372 {CC "executeHotSpotNmethod", CC "([" OBJECT HS_NMETHOD ")" OBJECT, FN_PTR(executeHotSpotNmethod)},
3373 {CC "getLineNumberTable", CC "(" HS_METHOD2 ")[J", FN_PTR(getLineNumberTable)},
3374 {CC "getLocalVariableTableStart", CC "(" HS_METHOD2 ")J", FN_PTR(getLocalVariableTableStart)},
3375 {CC "getLocalVariableTableLength", CC "(" HS_METHOD2 ")I", FN_PTR(getLocalVariableTableLength)},
3376 {CC "reprofile", CC "(" HS_METHOD2 ")V", FN_PTR(reprofile)},
3377 {CC "invalidateHotSpotNmethod", CC "(" HS_NMETHOD "ZI)V", FN_PTR(invalidateHotSpotNmethod)},
3378 {CC "collectCounters", CC "()[J", FN_PTR(collectCounters)},
3379 {CC "getCountersSize", CC "()I", FN_PTR(getCountersSize)},
3380 {CC "setCountersSize", CC "(I)Z", FN_PTR(setCountersSize)},
3381 {CC "allocateCompileId", CC "(" HS_METHOD2 "I)I", FN_PTR(allocateCompileId)},
3382 {CC "isMature", CC "(J)Z", FN_PTR(isMature)},
3383 {CC "hasCompiledCodeForOSR", CC "(" HS_METHOD2 "II)Z", FN_PTR(hasCompiledCodeForOSR)},
3384 {CC "getSymbol", CC "(J)" STRING, FN_PTR(getSymbol)},
3385 {CC "getSignatureName", CC "(J)" STRING, FN_PTR(getSignatureName)},
3386 {CC "iterateFrames", CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT, FN_PTR(iterateFrames)},
3387 {CC "materializeVirtualObjects", CC "(" HS_STACK_FRAME_REF "Z)V", FN_PTR(materializeVirtualObjects)},
3388 {CC "shouldDebugNonSafepoints", CC "()Z", FN_PTR(shouldDebugNonSafepoints)},
3389 {CC "writeDebugOutput", CC "(JIZ)V", FN_PTR(writeDebugOutput)},
3390 {CC "flushDebugOutput", CC "()V", FN_PTR(flushDebugOutput)},
3391 {CC "methodDataProfileDataSize", CC "(JI)I", FN_PTR(methodDataProfileDataSize)},
3392 {CC "methodDataExceptionSeen", CC "(JI)I", FN_PTR(methodDataExceptionSeen)},
3393 {CC "interpreterFrameSize", CC "(" BYTECODE_FRAME ")I", FN_PTR(interpreterFrameSize)},
3394 {CC "compileToBytecode", CC "(" OBJECTCONSTANT ")V", FN_PTR(compileToBytecode)},
3395 {CC "getFlagValue", CC "(" STRING ")" OBJECT, FN_PTR(getFlagValue)},
3396 {CC "getInterfaces", CC "(" HS_KLASS2 ")[" HS_KLASS, FN_PTR(getInterfaces)},
3397 {CC "getComponentType", CC "(" HS_KLASS2 ")" HS_RESOLVED_TYPE, FN_PTR(getComponentType)},
|