1481 callee_parameters = method->size_of_parameters(); 1482 callee_locals = method->max_locals(); 1483 extra_args = 0; 1484 bytecode_frame = BytecodePosition::caller(bytecode_frame); 1485 } 1486 return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord; 1487 C2V_END 1488 1489 C2V_VMENTRY(void, compileToBytecode, (JNIEnv*, jobject, jobject lambda_form_handle)) 1490 Handle lambda_form(THREAD, JNIHandles::resolve_non_null(lambda_form_handle)); 1491 if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) { 1492 TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode", CHECK); 1493 JavaValue result(T_VOID); 1494 JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK); 1495 } else { 1496 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 1497 err_msg("Unexpected type: %s", lambda_form->klass()->external_name())); 1498 } 1499 C2V_END 1500 1501 #define CC (char*) /*cast a literal from (const char*)*/ 1502 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f)) 1503 1504 #define STRING "Ljava/lang/String;" 1505 #define OBJECT "Ljava/lang/Object;" 1506 #define CLASS "Ljava/lang/Class;" 1507 #define EXECUTABLE "Ljava/lang/reflect/Executable;" 1508 #define STACK_TRACE_ELEMENT "Ljava/lang/StackTraceElement;" 1509 #define INSTALLED_CODE "Ljdk/vm/ci/code/InstalledCode;" 1510 #define TARGET_DESCRIPTION "Ljdk/vm/ci/code/TargetDescription;" 1511 #define BYTECODE_FRAME "Ljdk/vm/ci/code/BytecodeFrame;" 1512 #define INSPECTED_FRAME_VISITOR "Ljdk/vm/ci/code/stack/InspectedFrameVisitor;" 1513 #define RESOLVED_METHOD "Ljdk/vm/ci/meta/ResolvedJavaMethod;" 1514 #define HS_RESOLVED_METHOD "Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl;" 1515 #define HS_RESOLVED_KLASS "Ljdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl;" 1516 #define HS_CONSTANT_POOL "Ljdk/vm/ci/hotspot/HotSpotConstantPool;" 1517 #define HS_COMPILED_CODE "Ljdk/vm/ci/hotspot/HotSpotCompiledCode;" 1518 #define HS_CONFIG "Ljdk/vm/ci/hotspot/HotSpotVMConfig;" 1519 #define HS_METADATA "Ljdk/vm/ci/hotspot/HotSpotMetaData;" 1520 #define HS_STACK_FRAME_REF "Ljdk/vm/ci/hotspot/HotSpotStackFrameReference;" 1521 #define HS_SPECULATION_LOG "Ljdk/vm/ci/hotspot/HotSpotSpeculationLog;" 1522 #define METASPACE_METHOD_DATA "J" 1523 1524 JNINativeMethod CompilerToVM::methods[] = { 1525 {CC "getBytecode", CC "(" HS_RESOLVED_METHOD ")[B", FN_PTR(getBytecode)}, 1526 {CC "getExceptionTableStart", CC "(" HS_RESOLVED_METHOD ")J", FN_PTR(getExceptionTableStart)}, 1527 {CC "getExceptionTableLength", CC "(" HS_RESOLVED_METHOD ")I", FN_PTR(getExceptionTableLength)}, 1528 {CC "findUniqueConcreteMethod", CC "(" HS_RESOLVED_KLASS HS_RESOLVED_METHOD ")" HS_RESOLVED_METHOD, FN_PTR(findUniqueConcreteMethod)}, 1529 {CC "getImplementor", CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS, FN_PTR(getImplementor)}, 1530 {CC "getStackTraceElement", CC "(" HS_RESOLVED_METHOD "I)" STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, 1531 {CC "methodIsIgnoredBySecurityStackWalk", CC "(" HS_RESOLVED_METHOD ")Z", FN_PTR(methodIsIgnoredBySecurityStackWalk)}, 1532 {CC "setNotInlinableOrCompilable", CC "(" HS_RESOLVED_METHOD ")V", FN_PTR(setNotInlinableOrCompilable)}, 1533 {CC "isCompilable", CC "(" HS_RESOLVED_METHOD ")Z", FN_PTR(isCompilable)}, 1534 {CC "hasNeverInlineDirective", CC "(" HS_RESOLVED_METHOD ")Z", FN_PTR(hasNeverInlineDirective)}, 1535 {CC "shouldInlineMethod", CC "(" HS_RESOLVED_METHOD ")Z", FN_PTR(shouldInlineMethod)}, 1536 {CC "lookupType", CC "(" STRING CLASS "Z)" HS_RESOLVED_KLASS, FN_PTR(lookupType)}, 1537 {CC "lookupNameInPool", CC "(" HS_CONSTANT_POOL "I)" STRING, FN_PTR(lookupNameInPool)}, 1538 {CC "lookupNameAndTypeRefIndexInPool", CC "(" HS_CONSTANT_POOL "I)I", FN_PTR(lookupNameAndTypeRefIndexInPool)}, 1539 {CC "lookupSignatureInPool", CC "(" HS_CONSTANT_POOL "I)" STRING, FN_PTR(lookupSignatureInPool)}, 1540 {CC "lookupKlassRefIndexInPool", CC "(" HS_CONSTANT_POOL "I)I", FN_PTR(lookupKlassRefIndexInPool)}, 1541 {CC "lookupKlassInPool", CC "(" HS_CONSTANT_POOL "I)Ljava/lang/Object;", FN_PTR(lookupKlassInPool)}, 1569 {CC "getLocalVariableTableStart", CC "(" HS_RESOLVED_METHOD ")J", FN_PTR(getLocalVariableTableStart)}, 1570 {CC "getLocalVariableTableLength", CC "(" HS_RESOLVED_METHOD ")I", FN_PTR(getLocalVariableTableLength)}, 1571 {CC "reprofile", CC "(" HS_RESOLVED_METHOD ")V", FN_PTR(reprofile)}, 1572 {CC "invalidateInstalledCode", CC "(" INSTALLED_CODE ")V", FN_PTR(invalidateInstalledCode)}, 1573 {CC "collectCounters", CC "()[J", FN_PTR(collectCounters)}, 1574 {CC "allocateCompileId", CC "(" HS_RESOLVED_METHOD "I)I", FN_PTR(allocateCompileId)}, 1575 {CC "isMature", CC "(" METASPACE_METHOD_DATA ")Z", FN_PTR(isMature)}, 1576 {CC "hasCompiledCodeForOSR", CC "(" HS_RESOLVED_METHOD "II)Z", FN_PTR(hasCompiledCodeForOSR)}, 1577 {CC "getSymbol", CC "(J)" STRING, FN_PTR(getSymbol)}, 1578 {CC "iterateFrames", CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT, FN_PTR(iterateFrames)}, 1579 {CC "materializeVirtualObjects", CC "(" HS_STACK_FRAME_REF "Z)V", FN_PTR(materializeVirtualObjects)}, 1580 {CC "shouldDebugNonSafepoints", CC "()Z", FN_PTR(shouldDebugNonSafepoints)}, 1581 {CC "writeDebugOutput", CC "([BII)V", FN_PTR(writeDebugOutput)}, 1582 {CC "flushDebugOutput", CC "()V", FN_PTR(flushDebugOutput)}, 1583 {CC "methodDataProfileDataSize", CC "(JI)I", FN_PTR(methodDataProfileDataSize)}, 1584 {CC "getFingerprint", CC "(J)J", FN_PTR(getFingerprint)}, 1585 {CC "getHostClass", CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS, FN_PTR(getHostClass)}, 1586 {CC "interpreterFrameSize", CC "(" BYTECODE_FRAME ")I", FN_PTR(interpreterFrameSize)}, 1587 {CC "compileToBytecode", CC "(" OBJECT ")V", FN_PTR(compileToBytecode)}, 1588 {CC "getFlagValue", CC "(" STRING ")" OBJECT, FN_PTR(getFlagValue)}, 1589 }; 1590 1591 int CompilerToVM::methods_count() { 1592 return sizeof(methods) / sizeof(JNINativeMethod); 1593 } | 1481 callee_parameters = method->size_of_parameters(); 1482 callee_locals = method->max_locals(); 1483 extra_args = 0; 1484 bytecode_frame = BytecodePosition::caller(bytecode_frame); 1485 } 1486 return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord; 1487 C2V_END 1488 1489 C2V_VMENTRY(void, compileToBytecode, (JNIEnv*, jobject, jobject lambda_form_handle)) 1490 Handle lambda_form(THREAD, JNIHandles::resolve_non_null(lambda_form_handle)); 1491 if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) { 1492 TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode", CHECK); 1493 JavaValue result(T_VOID); 1494 JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK); 1495 } else { 1496 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 1497 err_msg("Unexpected type: %s", lambda_form->klass()->external_name())); 1498 } 1499 C2V_END 1500 1501 C2V_VMENTRY(jobject, asReflectionExecutable, (JNIEnv* env, jobject, jobject jvmci_method)) 1502 methodHandle m = CompilerToVM::asMethod(jvmci_method); 1503 oop executable; 1504 if (m->is_initializer()) { 1505 if (m->is_static_initializer()) { 1506 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), 1507 "Cannot create java.lang.reflect.Method for class initializer"); 1508 } 1509 executable = Reflection::new_constructor(m, CHECK_NULL); 1510 } else { 1511 executable = Reflection::new_method(m, false, CHECK_NULL); 1512 } 1513 return JNIHandles::make_local(thread, executable); 1514 } 1515 1516 C2V_VMENTRY(jobject, asReflectionField, (JNIEnv* env, jobject, jobject jvmci_type, jint index)) 1517 Klass* klass = CompilerToVM::asKlass(jvmci_type); 1518 if (!klass->is_instance_klass()) { 1519 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), 1520 err_msg("Expected non-primitive type, got %s", klass->external_name())); 1521 } 1522 InstanceKlass* iklass = InstanceKlass::cast(klass); 1523 Array<u2>* fields = iklass->fields(); 1524 if (index < 0 || index > fields->length()) { 1525 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), 1526 err_msg("Field index %d out of bounds for %s", index, klass->external_name())); 1527 } 1528 fieldDescriptor fd(iklass, index); 1529 oop reflected = Reflection::new_field(&fd, CHECK_NULL); 1530 return JNIHandles::make_local(env, reflected); 1531 } 1532 1533 #define CC (char*) /*cast a literal from (const char*)*/ 1534 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f)) 1535 1536 #define STRING "Ljava/lang/String;" 1537 #define OBJECT "Ljava/lang/Object;" 1538 #define CLASS "Ljava/lang/Class;" 1539 #define EXECUTABLE "Ljava/lang/reflect/Executable;" 1540 #define STACK_TRACE_ELEMENT "Ljava/lang/StackTraceElement;" 1541 #define INSTALLED_CODE "Ljdk/vm/ci/code/InstalledCode;" 1542 #define TARGET_DESCRIPTION "Ljdk/vm/ci/code/TargetDescription;" 1543 #define BYTECODE_FRAME "Ljdk/vm/ci/code/BytecodeFrame;" 1544 #define INSPECTED_FRAME_VISITOR "Ljdk/vm/ci/code/stack/InspectedFrameVisitor;" 1545 #define RESOLVED_METHOD "Ljdk/vm/ci/meta/ResolvedJavaMethod;" 1546 #define HS_RESOLVED_METHOD "Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl;" 1547 #define HS_RESOLVED_KLASS "Ljdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl;" 1548 #define HS_CONSTANT_POOL "Ljdk/vm/ci/hotspot/HotSpotConstantPool;" 1549 #define HS_COMPILED_CODE "Ljdk/vm/ci/hotspot/HotSpotCompiledCode;" 1550 #define HS_CONFIG "Ljdk/vm/ci/hotspot/HotSpotVMConfig;" 1551 #define HS_METADATA "Ljdk/vm/ci/hotspot/HotSpotMetaData;" 1552 #define HS_STACK_FRAME_REF "Ljdk/vm/ci/hotspot/HotSpotStackFrameReference;" 1553 #define HS_SPECULATION_LOG "Ljdk/vm/ci/hotspot/HotSpotSpeculationLog;" 1554 #define REFLECTION_EXECUTABLE "Ljava/lang/reflect/Executable;" 1555 #define REFLECTION_FIELD "Ljava/lang/reflect/Field;" 1556 #define METASPACE_METHOD_DATA "J" 1557 1558 JNINativeMethod CompilerToVM::methods[] = { 1559 {CC "getBytecode", CC "(" HS_RESOLVED_METHOD ")[B", FN_PTR(getBytecode)}, 1560 {CC "getExceptionTableStart", CC "(" HS_RESOLVED_METHOD ")J", FN_PTR(getExceptionTableStart)}, 1561 {CC "getExceptionTableLength", CC "(" HS_RESOLVED_METHOD ")I", FN_PTR(getExceptionTableLength)}, 1562 {CC "findUniqueConcreteMethod", CC "(" HS_RESOLVED_KLASS HS_RESOLVED_METHOD ")" HS_RESOLVED_METHOD, FN_PTR(findUniqueConcreteMethod)}, 1563 {CC "getImplementor", CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS, FN_PTR(getImplementor)}, 1564 {CC "getStackTraceElement", CC "(" HS_RESOLVED_METHOD "I)" STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, 1565 {CC "methodIsIgnoredBySecurityStackWalk", CC "(" HS_RESOLVED_METHOD ")Z", FN_PTR(methodIsIgnoredBySecurityStackWalk)}, 1566 {CC "setNotInlinableOrCompilable", CC "(" HS_RESOLVED_METHOD ")V", FN_PTR(setNotInlinableOrCompilable)}, 1567 {CC "isCompilable", CC "(" HS_RESOLVED_METHOD ")Z", FN_PTR(isCompilable)}, 1568 {CC "hasNeverInlineDirective", CC "(" HS_RESOLVED_METHOD ")Z", FN_PTR(hasNeverInlineDirective)}, 1569 {CC "shouldInlineMethod", CC "(" HS_RESOLVED_METHOD ")Z", FN_PTR(shouldInlineMethod)}, 1570 {CC "lookupType", CC "(" STRING CLASS "Z)" HS_RESOLVED_KLASS, FN_PTR(lookupType)}, 1571 {CC "lookupNameInPool", CC "(" HS_CONSTANT_POOL "I)" STRING, FN_PTR(lookupNameInPool)}, 1572 {CC "lookupNameAndTypeRefIndexInPool", CC "(" HS_CONSTANT_POOL "I)I", FN_PTR(lookupNameAndTypeRefIndexInPool)}, 1573 {CC "lookupSignatureInPool", CC "(" HS_CONSTANT_POOL "I)" STRING, FN_PTR(lookupSignatureInPool)}, 1574 {CC "lookupKlassRefIndexInPool", CC "(" HS_CONSTANT_POOL "I)I", FN_PTR(lookupKlassRefIndexInPool)}, 1575 {CC "lookupKlassInPool", CC "(" HS_CONSTANT_POOL "I)Ljava/lang/Object;", FN_PTR(lookupKlassInPool)}, 1603 {CC "getLocalVariableTableStart", CC "(" HS_RESOLVED_METHOD ")J", FN_PTR(getLocalVariableTableStart)}, 1604 {CC "getLocalVariableTableLength", CC "(" HS_RESOLVED_METHOD ")I", FN_PTR(getLocalVariableTableLength)}, 1605 {CC "reprofile", CC "(" HS_RESOLVED_METHOD ")V", FN_PTR(reprofile)}, 1606 {CC "invalidateInstalledCode", CC "(" INSTALLED_CODE ")V", FN_PTR(invalidateInstalledCode)}, 1607 {CC "collectCounters", CC "()[J", FN_PTR(collectCounters)}, 1608 {CC "allocateCompileId", CC "(" HS_RESOLVED_METHOD "I)I", FN_PTR(allocateCompileId)}, 1609 {CC "isMature", CC "(" METASPACE_METHOD_DATA ")Z", FN_PTR(isMature)}, 1610 {CC "hasCompiledCodeForOSR", CC "(" HS_RESOLVED_METHOD "II)Z", FN_PTR(hasCompiledCodeForOSR)}, 1611 {CC "getSymbol", CC "(J)" STRING, FN_PTR(getSymbol)}, 1612 {CC "iterateFrames", CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT, FN_PTR(iterateFrames)}, 1613 {CC "materializeVirtualObjects", CC "(" HS_STACK_FRAME_REF "Z)V", FN_PTR(materializeVirtualObjects)}, 1614 {CC "shouldDebugNonSafepoints", CC "()Z", FN_PTR(shouldDebugNonSafepoints)}, 1615 {CC "writeDebugOutput", CC "([BII)V", FN_PTR(writeDebugOutput)}, 1616 {CC "flushDebugOutput", CC "()V", FN_PTR(flushDebugOutput)}, 1617 {CC "methodDataProfileDataSize", CC "(JI)I", FN_PTR(methodDataProfileDataSize)}, 1618 {CC "getFingerprint", CC "(J)J", FN_PTR(getFingerprint)}, 1619 {CC "getHostClass", CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS, FN_PTR(getHostClass)}, 1620 {CC "interpreterFrameSize", CC "(" BYTECODE_FRAME ")I", FN_PTR(interpreterFrameSize)}, 1621 {CC "compileToBytecode", CC "(" OBJECT ")V", FN_PTR(compileToBytecode)}, 1622 {CC "getFlagValue", CC "(" STRING ")" OBJECT, FN_PTR(getFlagValue)}, 1623 {CC "asReflectionExecutable", CC "(" HS_RESOLVED_METHOD ")" REFLECTION_EXECUTABLE, FN_PTR(asReflectionExecutable)}, 1624 {CC "asReflectionField", CC "(" HS_RESOLVED_KLASS "I)" REFLECTION_FIELD, FN_PTR(asReflectionField)}, 1625 }; 1626 1627 int CompilerToVM::methods_count() { 1628 return sizeof(methods) / sizeof(JNINativeMethod); 1629 } |