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);
|