459 assert (method.is_null() || method->is_method(), "invalid read"); |
459 assert (method.is_null() || method->is_method(), "invalid read"); |
460 oop result = CompilerToVM::get_jvmci_method(method, CHECK_NULL); |
460 oop result = CompilerToVM::get_jvmci_method(method, CHECK_NULL); |
461 return JNIHandles::make_local(THREAD, result); |
461 return JNIHandles::make_local(THREAD, result); |
462 } |
462 } |
463 |
463 |
464 C2V_VMENTRY(jobject, getConstantPool, (JNIEnv *, jobject, jobject base, jlong offset)) |
464 C2V_VMENTRY(jobject, getConstantPool, (JNIEnv *, jobject, jobject object_handle)) |
465 constantPoolHandle cp; |
465 constantPoolHandle cp; |
466 oop base_object = JNIHandles::resolve(base); |
466 oop object = JNIHandles::resolve(object_handle); |
467 jlong base_address = 0; |
467 if (object == NULL) { |
468 if (base_object != NULL) { |
468 THROW_0(vmSymbols::java_lang_NullPointerException()); |
469 if (base_object->is_a(SystemDictionary::HotSpotResolvedJavaMethodImpl_klass())) { |
469 } |
470 base_address = HotSpotResolvedJavaMethodImpl::metaspaceMethod(base_object); |
470 if (object->is_a(SystemDictionary::HotSpotResolvedJavaMethodImpl_klass())) { |
471 } else if (base_object->is_a(SystemDictionary::HotSpotConstantPool_klass())) { |
471 cp = CompilerToVM::asMethod(object)->constMethod()->constants(); |
472 base_address = HotSpotConstantPool::metaspaceConstantPool(base_object); |
472 } else if (object->is_a(SystemDictionary::HotSpotResolvedObjectTypeImpl_klass())) { |
473 } else if (base_object->is_a(SystemDictionary::HotSpotResolvedObjectTypeImpl_klass())) { |
473 cp = InstanceKlass::cast(CompilerToVM::asKlass(object))->constants(); |
474 base_address = (jlong) CompilerToVM::asKlass(base_object); |
474 } else { |
475 } else { |
475 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), |
476 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), |
476 err_msg("Unexpected type: %s", object->klass()->external_name())); |
477 err_msg("Unexpected type: %s", base_object->klass()->external_name())); |
477 } |
478 } |
478 assert(!cp.is_null(), "npe"); |
479 } |
479 JavaValue method_result(T_OBJECT); |
480 cp = *((ConstantPool**) (intptr_t) (base_address + offset)); |
480 JavaCallArguments args; |
481 if (!cp.is_null()) { |
481 args.push_long((jlong) (address) cp()); |
482 JavaValue method_result(T_OBJECT); |
482 JavaCalls::call_static(&method_result, SystemDictionary::HotSpotConstantPool_klass(), vmSymbols::fromMetaspace_name(), vmSymbols::constantPool_fromMetaspace_signature(), &args, CHECK_NULL); |
483 JavaCallArguments args; |
483 return JNIHandles::make_local(THREAD, (oop)method_result.get_jobject()); |
484 args.push_long((jlong) (address) cp()); |
|
485 JavaCalls::call_static(&method_result, SystemDictionary::HotSpotConstantPool_klass(), vmSymbols::fromMetaspace_name(), vmSymbols::constantPool_fromMetaspace_signature(), &args, CHECK_NULL); |
|
486 return JNIHandles::make_local(THREAD, (oop)method_result.get_jobject()); |
|
487 } |
|
488 return NULL; |
|
489 } |
484 } |
490 |
485 |
491 C2V_VMENTRY(jobject, getResolvedJavaType, (JNIEnv *, jobject, jobject base, jlong offset, jboolean compressed)) |
486 C2V_VMENTRY(jobject, getResolvedJavaType, (JNIEnv *, jobject, jobject base, jlong offset, jboolean compressed)) |
492 KlassHandle klass; |
487 KlassHandle klass; |
493 oop base_object = JNIHandles::resolve(base); |
488 oop base_object = JNIHandles::resolve(base); |
1520 {CC "getClassInitializer", CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_METHOD, FN_PTR(getClassInitializer)}, |
1515 {CC "getClassInitializer", CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_METHOD, FN_PTR(getClassInitializer)}, |
1521 {CC "hasFinalizableSubclass", CC "(" HS_RESOLVED_KLASS ")Z", FN_PTR(hasFinalizableSubclass)}, |
1516 {CC "hasFinalizableSubclass", CC "(" HS_RESOLVED_KLASS ")Z", FN_PTR(hasFinalizableSubclass)}, |
1522 {CC "getMaxCallTargetOffset", CC "(J)J", FN_PTR(getMaxCallTargetOffset)}, |
1517 {CC "getMaxCallTargetOffset", CC "(J)J", FN_PTR(getMaxCallTargetOffset)}, |
1523 {CC "getResolvedJavaMethodAtSlot", CC "(" CLASS "I)" HS_RESOLVED_METHOD, FN_PTR(getResolvedJavaMethodAtSlot)}, |
1518 {CC "getResolvedJavaMethodAtSlot", CC "(" CLASS "I)" HS_RESOLVED_METHOD, FN_PTR(getResolvedJavaMethodAtSlot)}, |
1524 {CC "getResolvedJavaMethod", CC "(Ljava/lang/Object;J)" HS_RESOLVED_METHOD, FN_PTR(getResolvedJavaMethod)}, |
1519 {CC "getResolvedJavaMethod", CC "(Ljava/lang/Object;J)" HS_RESOLVED_METHOD, FN_PTR(getResolvedJavaMethod)}, |
1525 {CC "getConstantPool", CC "(Ljava/lang/Object;J)" HS_CONSTANT_POOL, FN_PTR(getConstantPool)}, |
1520 {CC "getConstantPool", CC "(Ljava/lang/Object;)" HS_CONSTANT_POOL, FN_PTR(getConstantPool)}, |
1526 {CC "getResolvedJavaType", CC "(Ljava/lang/Object;JZ)" HS_RESOLVED_KLASS, FN_PTR(getResolvedJavaType)}, |
1521 {CC "getResolvedJavaType", CC "(Ljava/lang/Object;JZ)" HS_RESOLVED_KLASS, FN_PTR(getResolvedJavaType)}, |
1527 {CC "readConfiguration", CC "()[" OBJECT, FN_PTR(readConfiguration)}, |
1522 {CC "readConfiguration", CC "()[" OBJECT, FN_PTR(readConfiguration)}, |
1528 {CC "installCode", CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE INSTALLED_CODE HS_SPECULATION_LOG ")I", FN_PTR(installCode)}, |
1523 {CC "installCode", CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE INSTALLED_CODE HS_SPECULATION_LOG ")I", FN_PTR(installCode)}, |
1529 {CC "getMetadata", CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE HS_METADATA ")I", FN_PTR(getMetadata)}, |
1524 {CC "getMetadata", CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE HS_METADATA ")I", FN_PTR(getMetadata)}, |
1530 {CC "resetCompilationStatistics", CC "()V", FN_PTR(resetCompilationStatistics)}, |
1525 {CC "resetCompilationStatistics", CC "()V", FN_PTR(resetCompilationStatistics)}, |