@@ -94,6 +94,12 @@ static void requireInHotSpot(const char* caller, JVMCI_TRAPS) {
9494 }
9595}
9696
97+ static void requireNotInHotSpot (const char * caller, JVMCI_TRAPS) {
98+ if (JVMCIENV->is_hotspot ()) {
99+ JVMCI_THROW_MSG (IllegalStateException, err_msg (" Cannot call %s from HotSpot" , caller));
100+ }
101+ }
102+
97103class JVMCITraceMark : public StackObj {
98104 const char * _msg;
99105 public:
@@ -702,6 +708,17 @@ C2V_VMENTRY_NULL(jobject, lookupJClass, (JNIEnv* env, jobject, jlong jclass_valu
702708 return JVMCIENV->get_jobject (result);
703709C2V_END
704710
711+ C2V_VMENTRY_0 (jlong, getJObjectValue, (JNIEnv* env, jobject, jobject constant_jobject))
712+ requireNotInHotSpot(" getJObjectValue" , JVMCI_CHECK_0);
713+ if (!THREAD->has_last_Java_frame ()) {
714+ JVMCI_THROW_MSG_0 (IllegalStateException, err_msg (" Cannot call getJObjectValue without Java frame anchor" ));
715+ }
716+ JVMCIObject constant = JVMCIENV->wrap (constant_jobject);
717+ Handle constant_value = JVMCIENV->asConstant (constant, JVMCI_CHECK_0);
718+ jobject jni_handle = JNIHandles::make_local(THREAD, constant_value());
719+ return reinterpret_cast <jlong>(jni_handle);
720+ C2V_END
721+
705722C2V_VMENTRY_NULL (jobject, getUncachedStringInPool, (JNIEnv* env, jobject, ARGUMENT_PAIR(cp), jint index))
706723 constantPoolHandle cp(THREAD, UNPACK_PAIR(ConstantPool, cp));
707724 constantTag tag = cp->tag_at (index);
@@ -3254,6 +3271,7 @@ JNINativeMethod CompilerToVM::methods[] = {
32543271 {CC " shouldInlineMethod" , CC " (" HS_METHOD2 " )Z" , FN_PTR (shouldInlineMethod)},
32553272 {CC " lookupType" , CC " (" STRING HS_KLASS2 " IZ)" HS_RESOLVED_TYPE, FN_PTR (lookupType)},
32563273 {CC " lookupJClass" , CC " (J)" HS_RESOLVED_TYPE, FN_PTR (lookupJClass)},
3274+ {CC " getJObjectValue" , CC " (" OBJECTCONSTANT " )J" , FN_PTR (getJObjectValue)},
32573275 {CC " getArrayType" , CC " (C" HS_KLASS2 " )" HS_KLASS, FN_PTR (getArrayType)},
32583276 {CC " lookupClass" , CC " (" CLASS " )" HS_RESOLVED_TYPE, FN_PTR (lookupClass)},
32593277 {CC " lookupNameInPool" , CC " (" HS_CONSTANT_POOL2 " II)" STRING, FN_PTR (lookupNameInPool)},
0 commit comments