< prev index next >

src/hotspot/share/prims/jvm.cpp

Print this page

1345     oop result = java_security_AccessControlContext::create(objArrayHandle(), is_privileged, privileged_context, CHECK_NULL);
1346     return JNIHandles::make_local(THREAD, result);
1347   }
1348 
1349   objArrayOop context = oopFactory::new_objArray(vmClasses::ProtectionDomain_klass(),
1350                                                  local_array->length(), CHECK_NULL);
1351   objArrayHandle h_context(thread, context);
1352   for (int index = 0; index < local_array->length(); index++) {
1353     h_context->obj_at_put(index, local_array->at(index)());
1354   }
1355 
1356   oop result = java_security_AccessControlContext::create(h_context, is_privileged, privileged_context, CHECK_NULL);
1357 
1358   return JNIHandles::make_local(THREAD, result);
1359 JVM_END
1360 
1361 class ScopedValueBindingsResolver {
1362 public:
1363   InstanceKlass* Carrier_klass;
1364   ScopedValueBindingsResolver(JavaThread* THREAD) {
1365     Klass *k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_incubator_concurrent_ScopedValue_Carrier(), true, THREAD);
1366     Carrier_klass = InstanceKlass::cast(k);
1367   }
1368 };
1369 
1370 JVM_ENTRY(jobject, JVM_FindScopedValueBindings(JNIEnv *env, jclass cls))
1371   ResourceMark rm(THREAD);
1372   GrowableArray<Handle>* local_array = new GrowableArray<Handle>(12);
1373   JvmtiVMObjectAllocEventCollector oam;
1374 
1375   static ScopedValueBindingsResolver resolver(THREAD);
1376 
1377   // Iterate through Java frames
1378   vframeStream vfst(thread);
1379   for(; !vfst.at_end(); vfst.next()) {
1380     int loc = -1;
1381     // get method of frame
1382     Method* method = vfst.method();
1383 
1384     Symbol *name = method->name();
1385 
1386     InstanceKlass* holder = method->method_holder();
1387     if (name == vmSymbols::runWith_method_name()) {
1388       if ((holder == resolver.Carrier_klass
1389            || holder == vmClasses::VirtualThread_klass()
1390            || holder == vmClasses::Thread_klass())) {
1391         loc = 1;
1392       }
1393     }
1394 
1395     if (loc != -1) {
1396       javaVFrame *frame = vfst.asJavaVFrame();
1397       StackValueCollection* locals = frame->locals();
1398       StackValue* head_sv = locals->at(loc); // jdk/incubator/concurrent/ScopedValue$Snapshot
1399       Handle result = head_sv->get_obj();
1400       assert(!head_sv->obj_is_scalar_replaced(), "found scalar-replaced object");
1401       if (result() != nullptr) {
1402         return JNIHandles::make_local(THREAD, result());
1403       }
1404     }
1405   }
1406 
1407   return nullptr;
1408 JVM_END
1409 
1410 JVM_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls))
1411   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1412   return (k != nullptr) && k->is_array_klass() ? true : false;
1413 JVM_END
1414 
1415 
1416 JVM_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls))
1417   oop mirror = JNIHandles::resolve_non_null(cls);
1418   return (jboolean) java_lang_Class::is_primitive(mirror);

1345     oop result = java_security_AccessControlContext::create(objArrayHandle(), is_privileged, privileged_context, CHECK_NULL);
1346     return JNIHandles::make_local(THREAD, result);
1347   }
1348 
1349   objArrayOop context = oopFactory::new_objArray(vmClasses::ProtectionDomain_klass(),
1350                                                  local_array->length(), CHECK_NULL);
1351   objArrayHandle h_context(thread, context);
1352   for (int index = 0; index < local_array->length(); index++) {
1353     h_context->obj_at_put(index, local_array->at(index)());
1354   }
1355 
1356   oop result = java_security_AccessControlContext::create(h_context, is_privileged, privileged_context, CHECK_NULL);
1357 
1358   return JNIHandles::make_local(THREAD, result);
1359 JVM_END
1360 
1361 class ScopedValueBindingsResolver {
1362 public:
1363   InstanceKlass* Carrier_klass;
1364   ScopedValueBindingsResolver(JavaThread* THREAD) {
1365     Klass *k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ScopedValue_Carrier(), true, THREAD);
1366     Carrier_klass = InstanceKlass::cast(k);
1367   }
1368 };
1369 
1370 JVM_ENTRY(jobject, JVM_FindScopedValueBindings(JNIEnv *env, jclass cls))
1371   ResourceMark rm(THREAD);
1372   GrowableArray<Handle>* local_array = new GrowableArray<Handle>(12);
1373   JvmtiVMObjectAllocEventCollector oam;
1374 
1375   static ScopedValueBindingsResolver resolver(THREAD);
1376 
1377   // Iterate through Java frames
1378   vframeStream vfst(thread);
1379   for(; !vfst.at_end(); vfst.next()) {
1380     int loc = -1;
1381     // get method of frame
1382     Method* method = vfst.method();
1383 
1384     Symbol *name = method->name();
1385 
1386     InstanceKlass* holder = method->method_holder();
1387     if (name == vmSymbols::runWith_method_name()) {
1388       if ((holder == resolver.Carrier_klass
1389            || holder == vmClasses::VirtualThread_klass()
1390            || holder == vmClasses::Thread_klass())) {
1391         loc = 1;
1392       }
1393     }
1394 
1395     if (loc != -1) {
1396       javaVFrame *frame = vfst.asJavaVFrame();
1397       StackValueCollection* locals = frame->locals();
1398       StackValue* head_sv = locals->at(loc); // java/lang/ScopedValue$Snapshot
1399       Handle result = head_sv->get_obj();
1400       assert(!head_sv->obj_is_scalar_replaced(), "found scalar-replaced object");
1401       if (result() != nullptr) {
1402         return JNIHandles::make_local(THREAD, result());
1403       }
1404     }
1405   }
1406 
1407   return nullptr;
1408 JVM_END
1409 
1410 JVM_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls))
1411   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1412   return (k != nullptr) && k->is_array_klass() ? true : false;
1413 JVM_END
1414 
1415 
1416 JVM_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls))
1417   oop mirror = JNIHandles::resolve_non_null(cls);
1418   return (jboolean) java_lang_Class::is_primitive(mirror);
< prev index next >