< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page

        

*** 250,260 **** } return JNIHandles::make_local(obj); C2V_END C2V_VMENTRY_NULL(jbyteArray, getBytecode, (JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); int code_size = method->code_size(); jbyte* reconstituted_code = NEW_RESOURCE_ARRAY(jbyte, code_size); guarantee(method->method_holder()->is_rewritten(), "Method's holder should be rewritten"); --- 250,260 ---- } return JNIHandles::make_local(obj); C2V_END C2V_VMENTRY_NULL(jbyteArray, getBytecode, (JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method(THREAD, JVMCIENV->asMethod(jvmci_method)); int code_size = method->code_size(); jbyte* reconstituted_code = NEW_RESOURCE_ARRAY(jbyte, code_size); guarantee(method->method_holder()->is_rewritten(), "Method's holder should be rewritten");
*** 328,343 **** JVMCIENV->copy_bytes_from(reconstituted_code, result, 0, code_size); return JVMCIENV->get_jbyteArray(result); C2V_END C2V_VMENTRY_0(jint, getExceptionTableLength, (JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); return method->exception_table_length(); C2V_END C2V_VMENTRY_0(jlong, getExceptionTableStart, (JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); if (method->exception_table_length() == 0) { return 0L; } return (jlong) (address) method->exception_table_start(); C2V_END --- 328,343 ---- JVMCIENV->copy_bytes_from(reconstituted_code, result, 0, code_size); return JVMCIENV->get_jbyteArray(result); C2V_END C2V_VMENTRY_0(jint, getExceptionTableLength, (JNIEnv* env, jobject, jobject jvmci_method)) ! Method* method = JVMCIENV->asMethod(jvmci_method); return method->exception_table_length(); C2V_END C2V_VMENTRY_0(jlong, getExceptionTableStart, (JNIEnv* env, jobject, jobject jvmci_method)) ! Method* method = JVMCIENV->asMethod(jvmci_method); if (method->exception_table_length() == 0) { return 0L; } return (jlong) (address) method->exception_table_start(); C2V_END
*** 355,371 **** assert(executable->klass() == SystemDictionary::reflect_Method_klass(), "wrong type"); mirror = java_lang_reflect_Method::clazz(executable); slot = java_lang_reflect_Method::slot(executable); } Klass* holder = java_lang_Class::as_Klass(mirror); ! methodHandle method = InstanceKlass::cast(holder)->method_with_idnum(slot); JVMCIObject result = JVMCIENV->get_jvmci_method(method, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, getResolvedJavaMethod, (JNIEnv* env, jobject, jobject base, jlong offset)) ! methodHandle method; JVMCIObject base_object = JVMCIENV->wrap(base); if (base_object.is_null()) { method = *((Method**)(offset)); } else if (JVMCIENV->isa_HotSpotObjectConstantImpl(base_object)) { Handle obj = JVMCIENV->asConstant(base_object, JVMCI_CHECK_NULL); --- 355,371 ---- assert(executable->klass() == SystemDictionary::reflect_Method_klass(), "wrong type"); mirror = java_lang_reflect_Method::clazz(executable); slot = java_lang_reflect_Method::slot(executable); } Klass* holder = java_lang_Class::as_Klass(mirror); ! methodHandle method (THREAD, InstanceKlass::cast(holder)->method_with_idnum(slot)); JVMCIObject result = JVMCIENV->get_jvmci_method(method, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, getResolvedJavaMethod, (JNIEnv* env, jobject, jobject base, jlong offset)) ! Method* method; JVMCIObject base_object = JVMCIENV->wrap(base); if (base_object.is_null()) { method = *((Method**)(offset)); } else if (JVMCIENV->isa_HotSpotObjectConstantImpl(base_object)) { Handle obj = JVMCIENV->asConstant(base_object, JVMCI_CHECK_NULL);
*** 375,394 **** JVMCI_THROW_MSG_NULL(IllegalArgumentException, err_msg("Unexpected type: %s", obj->klass()->external_name())); } } else if (JVMCIENV->isa_HotSpotResolvedJavaMethodImpl(base_object)) { method = JVMCIENV->asMethod(base_object); } ! if (method.is_null()) { JVMCI_THROW_MSG_NULL(IllegalArgumentException, err_msg("Unexpected type: %s", JVMCIENV->klass_name(base_object))); } ! assert (method.is_null() || method->is_method(), "invalid read"); ! JVMCIObject result = JVMCIENV->get_jvmci_method(method, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, getConstantPool, (JNIEnv* env, jobject, jobject object_handle)) ! constantPoolHandle cp; JVMCIObject object = JVMCIENV->wrap(object_handle); if (object.is_null()) { JVMCI_THROW_NULL(NullPointerException); } if (JVMCIENV->isa_HotSpotResolvedJavaMethodImpl(object)) { --- 375,394 ---- JVMCI_THROW_MSG_NULL(IllegalArgumentException, err_msg("Unexpected type: %s", obj->klass()->external_name())); } } else if (JVMCIENV->isa_HotSpotResolvedJavaMethodImpl(base_object)) { method = JVMCIENV->asMethod(base_object); } ! if (method == NULL) { JVMCI_THROW_MSG_NULL(IllegalArgumentException, err_msg("Unexpected type: %s", JVMCIENV->klass_name(base_object))); } ! assert (method->is_method(), "invalid read"); ! JVMCIObject result = JVMCIENV->get_jvmci_method(methodHandle(THREAD, method), JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, getConstantPool, (JNIEnv* env, jobject, jobject object_handle)) ! ConstantPool* cp = NULL; JVMCIObject object = JVMCIENV->wrap(object_handle); if (object.is_null()) { JVMCI_THROW_NULL(NullPointerException); } if (JVMCIENV->isa_HotSpotResolvedJavaMethodImpl(object)) {
*** 397,409 **** cp = InstanceKlass::cast(JVMCIENV->asKlass(object))->constants(); } else { JVMCI_THROW_MSG_NULL(IllegalArgumentException, err_msg("Unexpected type: %s", JVMCIENV->klass_name(object))); } ! assert(!cp.is_null(), "npe"); ! JVMCIObject result = JVMCIENV->get_jvmci_constant_pool(cp, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, getResolvedJavaType0, (JNIEnv* env, jobject, jobject base, jlong offset, jboolean compressed)) JVMCIKlassHandle klass(THREAD); --- 397,409 ---- cp = InstanceKlass::cast(JVMCIENV->asKlass(object))->constants(); } else { JVMCI_THROW_MSG_NULL(IllegalArgumentException, err_msg("Unexpected type: %s", JVMCIENV->klass_name(object))); } ! assert(cp != NULL, "npe"); ! JVMCIObject result = JVMCIENV->get_jvmci_constant_pool(constantPoolHandle(THREAD, cp), JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, getResolvedJavaType0, (JNIEnv* env, jobject, jobject base, jlong offset, jboolean compressed)) JVMCIKlassHandle klass(THREAD);
*** 447,457 **** JVMCIObject result = JVMCIENV->get_jvmci_type(klass, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, findUniqueConcreteMethod, (JNIEnv* env, jobject, jobject jvmci_type, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); Klass* holder = JVMCIENV->asKlass(jvmci_type); if (holder->is_interface()) { JVMCI_THROW_MSG_NULL(InternalError, err_msg("Interface %s should be handled in Java code", holder->external_name())); } if (method->can_be_statically_bound()) { --- 447,457 ---- JVMCIObject result = JVMCIENV->get_jvmci_type(klass, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, findUniqueConcreteMethod, (JNIEnv* env, jobject, jobject jvmci_type, jobject jvmci_method)) ! methodHandle method (THREAD, JVMCIENV->asMethod(jvmci_method)); Klass* holder = JVMCIENV->asKlass(jvmci_type); if (holder->is_interface()) { JVMCI_THROW_MSG_NULL(InternalError, err_msg("Interface %s should be handled in Java code", holder->external_name())); } if (method->can_be_statically_bound()) {
*** 459,469 **** } methodHandle ucm; { MutexLocker locker(Compile_lock); ! ucm = Dependencies::find_unique_concrete_method(holder, method()); } JVMCIObject result = JVMCIENV->get_jvmci_method(ucm, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); C2V_END --- 459,469 ---- } methodHandle ucm; { MutexLocker locker(Compile_lock); ! ucm = methodHandle(THREAD, Dependencies::find_unique_concrete_method(holder, method())); } JVMCIObject result = JVMCIENV->get_jvmci_method(ucm, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); C2V_END
*** 483,511 **** JVMCIObject implementor = JVMCIENV->get_jvmci_type(handle, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(implementor); C2V_END C2V_VMENTRY_0(jboolean, methodIsIgnoredBySecurityStackWalk,(JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); return method->is_ignored_by_security_stack_walk(); C2V_END C2V_VMENTRY_0(jboolean, isCompilable,(JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); ! constantPoolHandle cp = method->constMethod()->constants(); ! assert(!cp.is_null(), "npe"); // don't inline method when constant pool contains a CONSTANT_Dynamic return !method->is_not_compilable(CompLevel_full_optimization) && !cp->has_dynamic_constant(); C2V_END C2V_VMENTRY_0(jboolean, hasNeverInlineDirective,(JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); return !Inline || CompilerOracle::should_not_inline(method) || method->dont_inline(); C2V_END C2V_VMENTRY_0(jboolean, shouldInlineMethod,(JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); return CompilerOracle::should_inline(method) || method->force_inline(); C2V_END C2V_VMENTRY_NULL(jobject, lookupType, (JNIEnv* env, jobject, jstring jname, jclass accessing_class, jboolean resolve)) JVMCIObject name = JVMCIENV->wrap(jname); --- 483,511 ---- JVMCIObject implementor = JVMCIENV->get_jvmci_type(handle, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(implementor); C2V_END C2V_VMENTRY_0(jboolean, methodIsIgnoredBySecurityStackWalk,(JNIEnv* env, jobject, jobject jvmci_method)) ! Method* method = JVMCIENV->asMethod(jvmci_method); return method->is_ignored_by_security_stack_walk(); C2V_END C2V_VMENTRY_0(jboolean, isCompilable,(JNIEnv* env, jobject, jobject jvmci_method)) ! Method* method = JVMCIENV->asMethod(jvmci_method); ! ConstantPool* cp = method->constMethod()->constants(); ! assert(cp != NULL, "npe"); // don't inline method when constant pool contains a CONSTANT_Dynamic return !method->is_not_compilable(CompLevel_full_optimization) && !cp->has_dynamic_constant(); C2V_END C2V_VMENTRY_0(jboolean, hasNeverInlineDirective,(JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method (THREAD, JVMCIENV->asMethod(jvmci_method)); return !Inline || CompilerOracle::should_not_inline(method) || method->dont_inline(); C2V_END C2V_VMENTRY_0(jboolean, shouldInlineMethod,(JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method (THREAD, JVMCIENV->asMethod(jvmci_method)); return CompilerOracle::should_inline(method) || method->force_inline(); C2V_END C2V_VMENTRY_NULL(jobject, lookupType, (JNIEnv* env, jobject, jstring jname, jclass accessing_class, jboolean resolve)) JVMCIObject name = JVMCIENV->wrap(jname);
*** 609,647 **** JVMCIObject result = JVMCIENV->get_jvmci_type(klass, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, resolvePossiblyCachedConstantInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); oop result = cp->resolve_possibly_cached_constant_at(index, CHECK_NULL); return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(result)); C2V_END C2V_VMENTRY_0(jint, lookupNameAndTypeRefIndexInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); return cp->name_and_type_ref_index_at(index); C2V_END C2V_VMENTRY_NULL(jobject, lookupNameInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint which)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); JVMCIObject sym = JVMCIENV->create_string(cp->name_ref_at(which), JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(sym); C2V_END C2V_VMENTRY_NULL(jobject, lookupSignatureInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint which)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); JVMCIObject sym = JVMCIENV->create_string(cp->signature_ref_at(which), JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(sym); C2V_END C2V_VMENTRY_0(jint, lookupKlassRefIndexInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); return cp->klass_ref_index_at(index); C2V_END C2V_VMENTRY_NULL(jobject, resolveTypeInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); Klass* klass = cp->klass_at(index, CHECK_NULL); JVMCIKlassHandle resolved_klass(THREAD, klass); if (resolved_klass->is_instance_klass()) { InstanceKlass::cast(resolved_klass())->link_class(CHECK_NULL); if (!InstanceKlass::cast(resolved_klass())->is_linked()) { --- 609,647 ---- JVMCIObject result = JVMCIENV->get_jvmci_type(klass, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); } C2V_VMENTRY_NULL(jobject, resolvePossiblyCachedConstantInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); oop result = cp->resolve_possibly_cached_constant_at(index, CHECK_NULL); return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(result)); C2V_END C2V_VMENTRY_0(jint, lookupNameAndTypeRefIndexInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); return cp->name_and_type_ref_index_at(index); C2V_END C2V_VMENTRY_NULL(jobject, lookupNameInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint which)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); JVMCIObject sym = JVMCIENV->create_string(cp->name_ref_at(which), JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(sym); C2V_END C2V_VMENTRY_NULL(jobject, lookupSignatureInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint which)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); JVMCIObject sym = JVMCIENV->create_string(cp->signature_ref_at(which), JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(sym); C2V_END C2V_VMENTRY_0(jint, lookupKlassRefIndexInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); return cp->klass_ref_index_at(index); C2V_END C2V_VMENTRY_NULL(jobject, resolveTypeInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); Klass* klass = cp->klass_at(index, CHECK_NULL); JVMCIKlassHandle resolved_klass(THREAD, klass); if (resolved_klass->is_instance_klass()) { InstanceKlass::cast(resolved_klass())->link_class(CHECK_NULL); if (!InstanceKlass::cast(resolved_klass())->is_linked()) {
*** 652,662 **** JVMCIObject klassObject = JVMCIENV->get_jvmci_type(resolved_klass, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(klassObject); C2V_END C2V_VMENTRY_NULL(jobject, lookupKlassInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); Klass* loading_klass = cp->pool_holder(); bool is_accessible = false; JVMCIKlassHandle klass(THREAD, JVMCIRuntime::get_klass_by_index(cp, index, is_accessible, loading_klass)); Symbol* symbol = NULL; if (klass.is_null()) { --- 652,662 ---- JVMCIObject klassObject = JVMCIENV->get_jvmci_type(resolved_klass, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(klassObject); C2V_END C2V_VMENTRY_NULL(jobject, lookupKlassInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); Klass* loading_klass = cp->pool_holder(); bool is_accessible = false; JVMCIKlassHandle klass(THREAD, JVMCIRuntime::get_klass_by_index(cp, index, is_accessible, loading_klass)); Symbol* symbol = NULL; if (klass.is_null()) {
*** 680,713 **** } return JVMCIENV->get_jobject(result); C2V_END C2V_VMENTRY_NULL(jobject, lookupAppendixInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index); return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(appendix_oop)); C2V_END C2V_VMENTRY_NULL(jobject, lookupMethodInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); InstanceKlass* pool_holder = cp->pool_holder(); Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF); ! methodHandle method = JVMCIRuntime::get_method_by_index(cp, index, bc, pool_holder); JVMCIObject result = JVMCIENV->get_jvmci_method(method, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); C2V_END C2V_VMENTRY_0(jint, constantPoolRemapInstructionOperandFromCache, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); return cp->remap_instruction_operand_from_cache(index); C2V_END C2V_VMENTRY_NULL(jobject, resolveFieldInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index, jobject jvmci_method, jbyte opcode, jintArray info_handle)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF); fieldDescriptor fd; ! LinkInfo link_info(cp, index, (jvmci_method != NULL) ? JVMCIENV->asMethod(jvmci_method) : NULL, CHECK_0); LinkResolver::resolve_field(fd, link_info, Bytecodes::java_code(code), false, CHECK_0); JVMCIPrimitiveArray info = JVMCIENV->wrap(info_handle); if (info.is_null() || JVMCIENV->get_length(info) != 3) { JVMCI_ERROR_NULL("info must not be null and have a length of 3"); } --- 680,714 ---- } return JVMCIENV->get_jobject(result); C2V_END C2V_VMENTRY_NULL(jobject, lookupAppendixInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index); return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(appendix_oop)); C2V_END C2V_VMENTRY_NULL(jobject, lookupMethodInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); InstanceKlass* pool_holder = cp->pool_holder(); Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF); ! methodHandle method(THREAD, JVMCIRuntime::get_method_by_index(cp, index, bc, pool_holder)); JVMCIObject result = JVMCIENV->get_jvmci_method(method, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); C2V_END C2V_VMENTRY_0(jint, constantPoolRemapInstructionOperandFromCache, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); return cp->remap_instruction_operand_from_cache(index); C2V_END C2V_VMENTRY_NULL(jobject, resolveFieldInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index, jobject jvmci_method, jbyte opcode, jintArray info_handle)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF); fieldDescriptor fd; ! methodHandle mh(THREAD, (jvmci_method != NULL) ? JVMCIENV->asMethod(jvmci_method) : NULL); ! LinkInfo link_info(cp, index, mh, CHECK_0); LinkResolver::resolve_field(fd, link_info, Bytecodes::java_code(code), false, CHECK_0); JVMCIPrimitiveArray info = JVMCIENV->wrap(info_handle); if (info.is_null() || JVMCIENV->get_length(info) != 3) { JVMCI_ERROR_NULL("info must not be null and have a length of 3"); }
*** 719,729 **** return JVMCIENV->get_jobject(field_holder); C2V_END C2V_VMENTRY_0(jint, getVtableIndexForInterfaceMethod, (JNIEnv* env, jobject, jobject jvmci_type, jobject jvmci_method)) Klass* klass = JVMCIENV->asKlass(jvmci_type); ! Method* method = JVMCIENV->asMethod(jvmci_method); if (klass->is_interface()) { JVMCI_THROW_MSG_0(InternalError, err_msg("Interface %s should be handled in Java code", klass->external_name())); } if (!method->method_holder()->is_interface()) { JVMCI_THROW_MSG_0(InternalError, err_msg("Method %s is not held by an interface, this case should be handled in Java code", method->name_and_sig_as_C_string())); --- 720,730 ---- return JVMCIENV->get_jobject(field_holder); C2V_END C2V_VMENTRY_0(jint, getVtableIndexForInterfaceMethod, (JNIEnv* env, jobject, jobject jvmci_type, jobject jvmci_method)) Klass* klass = JVMCIENV->asKlass(jvmci_type); ! methodHandle method(THREAD, JVMCIENV->asMethod(jvmci_method)); if (klass->is_interface()) { JVMCI_THROW_MSG_0(InternalError, err_msg("Interface %s should be handled in Java code", klass->external_name())); } if (!method->method_holder()->is_interface()) { JVMCI_THROW_MSG_0(InternalError, err_msg("Method %s is not held by an interface, this case should be handled in Java code", method->name_and_sig_as_C_string()));
*** 738,748 **** C2V_END C2V_VMENTRY_NULL(jobject, resolveMethod, (JNIEnv* env, jobject, jobject receiver_jvmci_type, jobject jvmci_method, jobject caller_jvmci_type)) Klass* recv_klass = JVMCIENV->asKlass(receiver_jvmci_type); Klass* caller_klass = JVMCIENV->asKlass(caller_jvmci_type); ! methodHandle method = JVMCIENV->asMethod(jvmci_method); Klass* resolved = method->method_holder(); Symbol* h_name = method->name(); Symbol* h_signature = method->signature(); --- 739,749 ---- C2V_END C2V_VMENTRY_NULL(jobject, resolveMethod, (JNIEnv* env, jobject, jobject receiver_jvmci_type, jobject jvmci_method, jobject caller_jvmci_type)) Klass* recv_klass = JVMCIENV->asKlass(receiver_jvmci_type); Klass* caller_klass = JVMCIENV->asKlass(caller_jvmci_type); ! methodHandle method(THREAD, JVMCIENV->asMethod(jvmci_method)); Klass* resolved = method->method_holder(); Symbol* h_name = method->name(); Symbol* h_signature = method->signature();
*** 761,771 **** // LinkResolver::check_method_accessability for the matching logic. resolved = recv_klass; } LinkInfo link_info(resolved, h_name, h_signature, caller_klass); ! methodHandle m; // Only do exact lookup if receiver klass has been linked. Otherwise, // the vtable has not been setup, and the LinkResolver will fail. if (recv_klass->is_array_klass() || (InstanceKlass::cast(recv_klass)->is_linked() && !recv_klass->is_interface())) { if (resolved->is_interface()) { --- 762,772 ---- // LinkResolver::check_method_accessability for the matching logic. resolved = recv_klass; } LinkInfo link_info(resolved, h_name, h_signature, caller_klass); ! Method* m = NULL; // Only do exact lookup if receiver klass has been linked. Otherwise, // the vtable has not been setup, and the LinkResolver will fail. if (recv_klass->is_array_klass() || (InstanceKlass::cast(recv_klass)->is_linked() && !recv_klass->is_interface())) { if (resolved->is_interface()) {
*** 773,788 **** } else { m = LinkResolver::resolve_virtual_call_or_null(recv_klass, link_info); } } ! if (m.is_null()) { // Return NULL if there was a problem with lookup (uninitialized class, etc.) return NULL; } ! JVMCIObject result = JVMCIENV->get_jvmci_method(m, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); C2V_END C2V_VMENTRY_0(jboolean, hasFinalizableSubclass,(JNIEnv* env, jobject, jobject jvmci_type)) Klass* klass = JVMCIENV->asKlass(jvmci_type); --- 774,789 ---- } else { m = LinkResolver::resolve_virtual_call_or_null(recv_klass, link_info); } } ! if (m == NULL) { // Return NULL if there was a problem with lookup (uninitialized class, etc.) return NULL; } ! JVMCIObject result = JVMCIENV->get_jvmci_method(methodHandle(THREAD, m), JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); C2V_END C2V_VMENTRY_0(jboolean, hasFinalizableSubclass,(JNIEnv* env, jobject, jobject jvmci_type)) Klass* klass = JVMCIENV->asKlass(jvmci_type);
*** 794,804 **** Klass* klass = JVMCIENV->asKlass(jvmci_type); if (!klass->is_instance_klass()) { return NULL; } InstanceKlass* iklass = InstanceKlass::cast(klass); ! JVMCIObject result = JVMCIENV->get_jvmci_method(iklass->class_initializer(), JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); C2V_END C2V_VMENTRY_0(jlong, getMaxCallTargetOffset, (JNIEnv* env, jobject, jlong addr)) address target_addr = (address) addr; --- 795,806 ---- Klass* klass = JVMCIENV->asKlass(jvmci_type); if (!klass->is_instance_klass()) { return NULL; } InstanceKlass* iklass = InstanceKlass::cast(klass); ! methodHandle clinit(THREAD, iklass->class_initializer()); ! JVMCIObject result = JVMCIENV->get_jvmci_method(clinit, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(result); C2V_END C2V_VMENTRY_0(jlong, getMaxCallTargetOffset, (JNIEnv* env, jobject, jlong addr)) address target_addr = (address) addr;
*** 809,819 **** } return -1; C2V_END C2V_VMENTRY(void, setNotInlinableOrCompilable,(JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); method->set_not_c1_compilable(); method->set_not_c2_compilable(); method->set_dont_inline(true); C2V_END --- 811,821 ---- } return -1; C2V_END C2V_VMENTRY(void, setNotInlinableOrCompilable,(JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method(THREAD, JVMCIENV->asMethod(jvmci_method)); method->set_not_c1_compilable(); method->set_not_c2_compilable(); method->set_dont_inline(true); C2V_END
*** 1005,1015 **** C2V_END C2V_VMENTRY_NULL(jobject, getStackTraceElement, (JNIEnv* env, jobject, jobject jvmci_method, int bci)) HandleMark hm; ! methodHandle method = JVMCIENV->asMethod(jvmci_method); JVMCIObject element = JVMCIENV->new_StackTraceElement(method, bci, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(element); C2V_END C2V_VMENTRY_NULL(jobject, executeHotSpotNmethod, (JNIEnv* env, jobject, jobject args, jobject hs_nmethod)) --- 1007,1017 ---- C2V_END C2V_VMENTRY_NULL(jobject, getStackTraceElement, (JNIEnv* env, jobject, jobject jvmci_method, int bci)) HandleMark hm; ! methodHandle method(THREAD, JVMCIENV->asMethod(jvmci_method)); JVMCIObject element = JVMCIENV->new_StackTraceElement(method, bci, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(element); C2V_END C2V_VMENTRY_NULL(jobject, executeHotSpotNmethod, (JNIEnv* env, jobject, jobject args, jobject hs_nmethod))
*** 1022,1032 **** JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod); nmethod* nm = JVMCIENV->asNmethod(nmethod_mirror); if (nm == NULL) { JVMCI_THROW_NULL(InvalidInstalledCodeException); } ! methodHandle mh = nm->method(); Symbol* signature = mh->signature(); JavaCallArguments jca(mh->size_of_parameters()); JavaArgumentUnboxer jap(signature, &jca, (arrayOop) JNIHandles::resolve(args), mh->is_static()); JavaValue result(jap.get_ret_type()); --- 1024,1034 ---- JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod); nmethod* nm = JVMCIENV->asNmethod(nmethod_mirror); if (nm == NULL) { JVMCI_THROW_NULL(InvalidInstalledCodeException); } ! methodHandle mh(THREAD, nm->method()); Symbol* signature = mh->signature(); JavaCallArguments jca(mh->size_of_parameters()); JavaArgumentUnboxer jap(signature, &jca, (arrayOop) JNIHandles::resolve(args), mh->is_static()); JavaValue result(jap.get_ret_type());
*** 1100,1110 **** Method* method = JVMCIENV->asMethod(jvmci_method); return method->localvariable_table_length(); C2V_END C2V_VMENTRY(void, reprofile, (JNIEnv* env, jobject, jobject jvmci_method)) ! Method* method = JVMCIENV->asMethod(jvmci_method); MethodCounters* mcs = method->method_counters(); if (mcs != NULL) { mcs->clear_counters(); } NOT_PRODUCT(method->set_compiled_invocation_count(0)); --- 1102,1112 ---- Method* method = JVMCIENV->asMethod(jvmci_method); return method->localvariable_table_length(); C2V_END C2V_VMENTRY(void, reprofile, (JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method(THREAD, JVMCIENV->asMethod(jvmci_method)); MethodCounters* mcs = method->method_counters(); if (mcs != NULL) { mcs->clear_counters(); } NOT_PRODUCT(method->set_compiled_invocation_count(0));
*** 1157,1167 **** C2V_VMENTRY_0(jint, allocateCompileId, (JNIEnv* env, jobject, jobject jvmci_method, int entry_bci)) HandleMark hm; if (jvmci_method == NULL) { JVMCI_THROW_0(NullPointerException); } ! Method* method = JVMCIENV->asMethod(jvmci_method); if (entry_bci >= method->code_size() || entry_bci < -1) { JVMCI_THROW_MSG_0(IllegalArgumentException, err_msg("Unexpected bci %d", entry_bci)); } return CompileBroker::assign_compile_id_unlocked(THREAD, method, entry_bci); C2V_END --- 1159,1169 ---- C2V_VMENTRY_0(jint, allocateCompileId, (JNIEnv* env, jobject, jobject jvmci_method, int entry_bci)) HandleMark hm; if (jvmci_method == NULL) { JVMCI_THROW_0(NullPointerException); } ! methodHandle method(THREAD, JVMCIENV->asMethod(jvmci_method)); if (entry_bci >= method->code_size() || entry_bci < -1) { JVMCI_THROW_MSG_0(IllegalArgumentException, err_msg("Unexpected bci %d", entry_bci)); } return CompileBroker::assign_compile_id_unlocked(THREAD, method, entry_bci); C2V_END
*** 1199,1209 **** Handle receiver = args->receiver(); Klass* recvrKlass = receiver.is_null() ? (Klass*)NULL : receiver->klass(); LinkInfo link_info(spec_klass, name, signature); LinkResolver::resolve_interface_call( callinfo, receiver, recvrKlass, link_info, true, CHECK); ! methodHandle method = callinfo.selected_method(); assert(method.not_null(), "should have thrown exception"); // Invoke the method JavaCalls::call(result, method, args, CHECK); } --- 1201,1211 ---- Handle receiver = args->receiver(); Klass* recvrKlass = receiver.is_null() ? (Klass*)NULL : receiver->klass(); LinkInfo link_info(spec_klass, name, signature); LinkResolver::resolve_interface_call( callinfo, receiver, recvrKlass, link_info, true, CHECK); ! methodHandle method(THREAD, callinfo.selected_method()); assert(method.not_null(), "should have thrown exception"); // Invoke the method JavaCalls::call(result, method, args, CHECK); }
*** 1273,1283 **** HotSpotJVMCI::HotSpotStackFrameReference::set_localIsVirtual(JVMCIENV, frame_reference(), NULL); } locals = cvf->locals(); HotSpotJVMCI::HotSpotStackFrameReference::set_bci(JVMCIENV, frame_reference(), cvf->bci()); ! JVMCIObject method = JVMCIENV->get_jvmci_method(cvf->method(), JVMCI_CHECK_NULL); HotSpotJVMCI::HotSpotStackFrameReference::set_method(JVMCIENV, frame_reference(), JNIHandles::resolve(method.as_jobject())); } } } else if (vf->is_interpreted_frame()) { // interpreted method frame --- 1275,1286 ---- HotSpotJVMCI::HotSpotStackFrameReference::set_localIsVirtual(JVMCIENV, frame_reference(), NULL); } locals = cvf->locals(); HotSpotJVMCI::HotSpotStackFrameReference::set_bci(JVMCIENV, frame_reference(), cvf->bci()); ! methodHandle mh(THREAD, cvf->method()); ! JVMCIObject method = JVMCIENV->get_jvmci_method(mh, JVMCI_CHECK_NULL); HotSpotJVMCI::HotSpotStackFrameReference::set_method(JVMCIENV, frame_reference(), JNIHandles::resolve(method.as_jobject())); } } } else if (vf->is_interpreted_frame()) { // interpreted method frame
*** 1286,1296 **** if (initialSkip > 0) { initialSkip--; } else { locals = ivf->locals(); HotSpotJVMCI::HotSpotStackFrameReference::set_bci(JVMCIENV, frame_reference(), ivf->bci()); ! JVMCIObject method = JVMCIENV->get_jvmci_method(ivf->method(), JVMCI_CHECK_NULL); HotSpotJVMCI::HotSpotStackFrameReference::set_method(JVMCIENV, frame_reference(), JNIHandles::resolve(method.as_jobject())); HotSpotJVMCI::HotSpotStackFrameReference::set_localIsVirtual(JVMCIENV, frame_reference(), NULL); } } } --- 1289,1300 ---- if (initialSkip > 0) { initialSkip--; } else { locals = ivf->locals(); HotSpotJVMCI::HotSpotStackFrameReference::set_bci(JVMCIENV, frame_reference(), ivf->bci()); ! methodHandle mh(THREAD, ivf->method()); ! JVMCIObject method = JVMCIENV->get_jvmci_method(mh, JVMCI_CHECK_NULL); HotSpotJVMCI::HotSpotStackFrameReference::set_method(JVMCIENV, frame_reference(), JNIHandles::resolve(method.as_jobject())); HotSpotJVMCI::HotSpotStackFrameReference::set_localIsVirtual(JVMCIENV, frame_reference(), NULL); } } }
*** 1366,1384 **** // the end was reached without finding a matching method return NULL; C2V_END C2V_VMENTRY(void, resolveInvokeDynamicInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); CallInfo callInfo; LinkResolver::resolve_invoke(callInfo, Handle(), cp, index, Bytecodes::_invokedynamic, CHECK); ConstantPoolCacheEntry* cp_cache_entry = cp->invokedynamic_cp_cache_entry_at(index); cp_cache_entry->set_dynamic_call(cp, callInfo); C2V_END C2V_VMENTRY(void, resolveInvokeHandleInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); Klass* holder = cp->klass_ref_at(index, CHECK); Symbol* name = cp->name_ref_at(index); if (MethodHandles::is_signature_polymorphic_name(holder, name)) { CallInfo callInfo; LinkResolver::resolve_invoke(callInfo, Handle(), cp, index, Bytecodes::_invokehandle, CHECK); --- 1370,1388 ---- // the end was reached without finding a matching method return NULL; C2V_END C2V_VMENTRY(void, resolveInvokeDynamicInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); CallInfo callInfo; LinkResolver::resolve_invoke(callInfo, Handle(), cp, index, Bytecodes::_invokedynamic, CHECK); ConstantPoolCacheEntry* cp_cache_entry = cp->invokedynamic_cp_cache_entry_at(index); cp_cache_entry->set_dynamic_call(cp, callInfo); C2V_END C2V_VMENTRY(void, resolveInvokeHandleInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); Klass* holder = cp->klass_ref_at(index, CHECK); Symbol* name = cp->name_ref_at(index); if (MethodHandles::is_signature_polymorphic_name(holder, name)) { CallInfo callInfo; LinkResolver::resolve_invoke(callInfo, Handle(), cp, index, Bytecodes::_invokehandle, CHECK);
*** 1386,1396 **** cp_cache_entry->set_method_handle(cp, callInfo); } C2V_END C2V_VMENTRY_0(jint, isResolvedInvokeHandleInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool); ConstantPoolCacheEntry* cp_cache_entry = cp->cache()->entry_at(cp->decode_cpcache_index(index)); if (cp_cache_entry->is_resolved(Bytecodes::_invokehandle)) { // MethodHandle.invoke* --> LambdaForm? ResourceMark rm; --- 1390,1400 ---- cp_cache_entry->set_method_handle(cp, callInfo); } C2V_END C2V_VMENTRY_0(jint, isResolvedInvokeHandleInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index)) ! constantPoolHandle cp(THREAD, JVMCIENV->asConstantPool(jvmci_constant_pool)); ConstantPoolCacheEntry* cp_cache_entry = cp->cache()->entry_at(cp->decode_cpcache_index(index)); if (cp_cache_entry->is_resolved(Bytecodes::_invokehandle)) { // MethodHandle.invoke* --> LambdaForm? ResourceMark rm;
*** 1401,1422 **** Symbol* name_sym = cp->name_ref_at(index); vmassert(MethodHandles::is_method_handle_invoke_name(resolved_klass, name_sym), "!"); vmassert(MethodHandles::is_signature_polymorphic_name(resolved_klass, name_sym), "!"); ! methodHandle adapter_method(cp_cache_entry->f1_as_method()); methodHandle resolved_method(adapter_method); // Can we treat it as a regular invokevirtual? if (resolved_method->method_holder() == resolved_klass && resolved_method->name() == name_sym) { vmassert(!resolved_method->is_static(),"!"); vmassert(MethodHandles::is_signature_polymorphic_method(resolved_method()),"!"); vmassert(!MethodHandles::is_signature_polymorphic_static(resolved_method->intrinsic_id()), "!"); vmassert(cp_cache_entry->appendix_if_resolved(cp) == NULL, "!"); ! methodHandle m(LinkResolver::linktime_resolve_virtual_method_or_null(link_info)); vmassert(m == resolved_method, "!!"); return -1; } return Bytecodes::_invokevirtual; --- 1405,1426 ---- Symbol* name_sym = cp->name_ref_at(index); vmassert(MethodHandles::is_method_handle_invoke_name(resolved_klass, name_sym), "!"); vmassert(MethodHandles::is_signature_polymorphic_name(resolved_klass, name_sym), "!"); ! methodHandle adapter_method(THREAD, cp_cache_entry->f1_as_method()); methodHandle resolved_method(adapter_method); // Can we treat it as a regular invokevirtual? if (resolved_method->method_holder() == resolved_klass && resolved_method->name() == name_sym) { vmassert(!resolved_method->is_static(),"!"); vmassert(MethodHandles::is_signature_polymorphic_method(resolved_method()),"!"); vmassert(!MethodHandles::is_signature_polymorphic_static(resolved_method->intrinsic_id()), "!"); vmassert(cp_cache_entry->appendix_if_resolved(cp) == NULL, "!"); ! methodHandle m(THREAD, LinkResolver::linktime_resolve_virtual_method_or_null(link_info)); vmassert(m == resolved_method, "!!"); return -1; } return Bytecodes::_invokevirtual;
*** 1905,1915 **** constructors_array.append(m); } } JVMCIObjectArray methods = JVMCIENV->new_ResolvedJavaMethod_array(constructors_array.length(), JVMCI_CHECK_NULL); for (int i = 0; i < constructors_array.length(); i++) { ! JVMCIObject method = JVMCIENV->get_jvmci_method(constructors_array.at(i), JVMCI_CHECK_NULL); JVMCIENV->put_object_at(methods, i, method); } return JVMCIENV->get_jobjectArray(methods); C2V_END --- 1909,1920 ---- constructors_array.append(m); } } JVMCIObjectArray methods = JVMCIENV->new_ResolvedJavaMethod_array(constructors_array.length(), JVMCI_CHECK_NULL); for (int i = 0; i < constructors_array.length(); i++) { ! methodHandle ctor(THREAD, constructors_array.at(i)); ! JVMCIObject method = JVMCIENV->get_jvmci_method(ctor, JVMCI_CHECK_NULL); JVMCIENV->put_object_at(methods, i, method); } return JVMCIENV->get_jobjectArray(methods); C2V_END
*** 1934,1944 **** methods_array.append(m); } } JVMCIObjectArray methods = JVMCIENV->new_ResolvedJavaMethod_array(methods_array.length(), JVMCI_CHECK_NULL); for (int i = 0; i < methods_array.length(); i++) { ! JVMCIObject method = JVMCIENV->get_jvmci_method(methods_array.at(i), JVMCI_CHECK_NULL); JVMCIENV->put_object_at(methods, i, method); } return JVMCIENV->get_jobjectArray(methods); C2V_END --- 1939,1950 ---- methods_array.append(m); } } JVMCIObjectArray methods = JVMCIENV->new_ResolvedJavaMethod_array(methods_array.length(), JVMCI_CHECK_NULL); for (int i = 0; i < methods_array.length(); i++) { ! methodHandle mh(THREAD, methods_array.at(i)); ! JVMCIObject method = JVMCIENV->get_jvmci_method(mh, JVMCI_CHECK_NULL); JVMCIENV->put_object_at(methods, i, method); } return JVMCIENV->get_jobjectArray(methods); C2V_END
*** 2255,2265 **** JVMCI_THROW_MSG_0(IllegalArgumentException, "clazz is for primitive type"); } InstanceKlass* iklass = InstanceKlass::cast(klass); for (int i = 0; i < iklass->methods()->length(); i++) { ! Method* method = iklass->methods()->at(i); if (method->is_native()) { // Compute argument size int args_size = 1 // JNIEnv + (method->is_static() ? 1 : 0) // class for static methods --- 2261,2271 ---- JVMCI_THROW_MSG_0(IllegalArgumentException, "clazz is for primitive type"); } InstanceKlass* iklass = InstanceKlass::cast(klass); for (int i = 0; i < iklass->methods()->length(); i++) { ! methodHandle method(THREAD, iklass->methods()->at(i)); if (method->is_native()) { // Compute argument size int args_size = 1 // JNIEnv + (method->is_static() ? 1 : 0) // class for static methods
*** 2423,2433 **** JVMCIEnv* thisEnv = JVMCIENV; JVMCIObject obj = thisEnv->wrap(obj_handle); JVMCIObject result; if (thisEnv->isa_HotSpotResolvedJavaMethodImpl(obj)) { ! Method* method = thisEnv->asMethod(obj); result = peerEnv->get_jvmci_method(method, JVMCI_CHECK_0); } else if (thisEnv->isa_HotSpotResolvedObjectTypeImpl(obj)) { Klass* klass = thisEnv->asKlass(obj); JVMCIKlassHandle klass_handle(THREAD); klass_handle = klass; --- 2429,2439 ---- JVMCIEnv* thisEnv = JVMCIENV; JVMCIObject obj = thisEnv->wrap(obj_handle); JVMCIObject result; if (thisEnv->isa_HotSpotResolvedJavaMethodImpl(obj)) { ! methodHandle method(THREAD, thisEnv->asMethod(obj)); result = peerEnv->get_jvmci_method(method, JVMCI_CHECK_0); } else if (thisEnv->isa_HotSpotResolvedObjectTypeImpl(obj)) { Klass* klass = thisEnv->asKlass(obj); JVMCIKlassHandle klass_handle(THREAD); klass_handle = klass;
*** 2454,2470 **** } } } if (result.is_null()) { JVMCIObject methodObject = thisEnv->get_HotSpotNmethod_method(obj); ! methodHandle mh = thisEnv->asMethod(methodObject); jboolean isDefault = thisEnv->get_HotSpotNmethod_isDefault(obj); jlong compileIdSnapshot = thisEnv->get_HotSpotNmethod_compileIdSnapshot(obj); JVMCIObject name_string = thisEnv->get_InstalledCode_name(obj); const char* cstring = name_string.is_null() ? NULL : thisEnv->as_utf8_string(name_string); // Create a new HotSpotNmethod instance in the peer runtime ! result = peerEnv->new_HotSpotNmethod(mh(), cstring, isDefault, compileIdSnapshot, JVMCI_CHECK_0); if (nm == NULL) { // nmethod must have been unloaded } else { // Link the new HotSpotNmethod to the nmethod peerEnv->initialize_installed_code(result, nm, JVMCI_CHECK_0); --- 2460,2476 ---- } } } if (result.is_null()) { JVMCIObject methodObject = thisEnv->get_HotSpotNmethod_method(obj); ! methodHandle mh(THREAD, thisEnv->asMethod(methodObject)); jboolean isDefault = thisEnv->get_HotSpotNmethod_isDefault(obj); jlong compileIdSnapshot = thisEnv->get_HotSpotNmethod_compileIdSnapshot(obj); JVMCIObject name_string = thisEnv->get_InstalledCode_name(obj); const char* cstring = name_string.is_null() ? NULL : thisEnv->as_utf8_string(name_string); // Create a new HotSpotNmethod instance in the peer runtime ! result = peerEnv->new_HotSpotNmethod(mh, cstring, isDefault, compileIdSnapshot, JVMCI_CHECK_0); if (nm == NULL) { // nmethod must have been unloaded } else { // Link the new HotSpotNmethod to the nmethod peerEnv->initialize_installed_code(result, nm, JVMCI_CHECK_0);
*** 2520,2530 **** return JVMCIENV->get_jbyteArray(result); } C2V_VMENTRY_NULL(jobject, asReflectionExecutable, (JNIEnv* env, jobject, jobject jvmci_method)) requireInHotSpot("asReflectionExecutable", JVMCI_CHECK_NULL); ! methodHandle m = JVMCIENV->asMethod(jvmci_method); oop executable; if (m->is_initializer()) { if (m->is_static_initializer()) { JVMCI_THROW_MSG_NULL(IllegalArgumentException, "Cannot create java.lang.reflect.Method for class initializer"); --- 2526,2536 ---- return JVMCIENV->get_jbyteArray(result); } C2V_VMENTRY_NULL(jobject, asReflectionExecutable, (JNIEnv* env, jobject, jobject jvmci_method)) requireInHotSpot("asReflectionExecutable", JVMCI_CHECK_NULL); ! methodHandle m(THREAD, JVMCIENV->asMethod(jvmci_method)); oop executable; if (m->is_initializer()) { if (m->is_static_initializer()) { JVMCI_THROW_MSG_NULL(IllegalArgumentException, "Cannot create java.lang.reflect.Method for class initializer");
*** 2585,2595 **** } return JVMCIENV->get_jobjectArray(result); } C2V_VMENTRY_0(jlong, getFailedSpeculationsAddress, (JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method = JVMCIENV->asMethod(jvmci_method); MethodData* method_data = method->method_data(); if (method_data == NULL) { ClassLoaderData* loader_data = method->method_holder()->class_loader_data(); method_data = MethodData::allocate(loader_data, method, CHECK_0); method->set_method_data(method_data); --- 2591,2601 ---- } return JVMCIENV->get_jobjectArray(result); } C2V_VMENTRY_0(jlong, getFailedSpeculationsAddress, (JNIEnv* env, jobject, jobject jvmci_method)) ! methodHandle method(THREAD, JVMCIENV->asMethod(jvmci_method)); MethodData* method_data = method->method_data(); if (method_data == NULL) { ClassLoaderData* loader_data = method->method_holder()->class_loader_data(); method_data = MethodData::allocate(loader_data, method, CHECK_0); method->set_method_data(method_data);
< prev index next >