hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp
changeset 40372 ee472073dab0
parent 39441 7464b1552bf7
child 40872 6364f752fdc5
equal deleted inserted replaced
40371:98d4822ec8ef 40372:ee472073dab0
   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)},