2102
2103 // Checks that the library libfile has the noexecstack bit set.
2104 WB_ENTRY(jboolean, WB_CheckLibSpecifiesNoexecstack(JNIEnv* env, jobject o, jstring libfile))
2105 jboolean ret = false;
2106 #ifdef LINUX
2107 // Can't be in VM when we call JNI.
2108 ThreadToNativeFromVM ttnfv(thread);
2109 const char* lf = env->GetStringUTFChars(libfile, NULL);
2110 CHECK_JNI_EXCEPTION_(env, 0);
2111 ret = (jboolean) ElfFile::specifies_noexecstack(lf);
2112 env->ReleaseStringUTFChars(libfile, lf);
2113 #endif
2114 return ret;
2115 WB_END
2116
2117 WB_ENTRY(jboolean, WB_IsContainerized(JNIEnv* env, jobject o))
2118 LINUX_ONLY(return OSContainer::is_containerized();)
2119 return false;
2120 WB_END
2121
2122 WB_ENTRY(void, WB_PrintOsInfo(JNIEnv* env, jobject o))
2123 os::print_os_info(tty);
2124 WB_END
2125
2126 // Elf decoder
2127 WB_ENTRY(void, WB_DisableElfSectionCache(JNIEnv* env))
2128 #if !defined(_WINDOWS) && !defined(__APPLE__) && !defined(_AIX)
2129 ElfFile::_do_not_cache_elf_section = true;
2130 #endif
2131 WB_END
2132
2133 WB_ENTRY(jlong, WB_ResolvedMethodItemsCount(JNIEnv* env, jobject o))
2134 return (jlong) ResolvedMethodTable::items_count();
2135 WB_END
2136
2137 WB_ENTRY(jint, WB_ProtectionDomainRemovedCount(JNIEnv* env, jobject o))
2138 return (jint) SystemDictionary::pd_cache_table()->removed_entries_count();
2139 WB_END
2140
2141 WB_ENTRY(jint, WB_AotLibrariesCount(JNIEnv* env, jobject o))
2361 {CC"isCDSIncludedInVmBuild", CC"()Z", (void*)&WB_IsCDSIncludedInVmBuild },
2362 {CC"isJFRIncludedInVmBuild", CC"()Z", (void*)&WB_IsJFRIncludedInVmBuild },
2363 {CC"isJavaHeapArchiveSupported", CC"()Z", (void*)&WB_IsJavaHeapArchiveSupported },
2364 {CC"cdsMemoryMappingFailed", CC"()Z", (void*)&WB_CDSMemoryMappingFailed },
2365
2366 {CC"clearInlineCaches0", CC"(Z)V", (void*)&WB_ClearInlineCaches },
2367 {CC"handshakeWalkStack", CC"(Ljava/lang/Thread;Z)I", (void*)&WB_HandshakeWalkStack },
2368 {CC"addCompilerDirective", CC"(Ljava/lang/String;)I",
2369 (void*)&WB_AddCompilerDirective },
2370 {CC"removeCompilerDirective", CC"(I)V", (void*)&WB_RemoveCompilerDirective },
2371 {CC"isGCSupported", CC"(I)Z", (void*)&WB_IsGCSupported},
2372 {CC"isGCSelected", CC"(I)Z", (void*)&WB_IsGCSelected},
2373 {CC"isGCSelectedErgonomically", CC"()Z", (void*)&WB_IsGCSelectedErgonomically},
2374 {CC"supportsConcurrentGCPhaseControl", CC"()Z", (void*)&WB_SupportsConcurrentGCPhaseControl},
2375 {CC"requestConcurrentGCPhase0", CC"(Ljava/lang/String;)Z",
2376 (void*)&WB_RequestConcurrentGCPhase},
2377 {CC"checkLibSpecifiesNoexecstack", CC"(Ljava/lang/String;)Z",
2378 (void*)&WB_CheckLibSpecifiesNoexecstack},
2379 {CC"isContainerized", CC"()Z", (void*)&WB_IsContainerized },
2380 {CC"printOsInfo", CC"()V", (void*)&WB_PrintOsInfo },
2381 {CC"disableElfSectionCache", CC"()V", (void*)&WB_DisableElfSectionCache },
2382 {CC"resolvedMethodItemsCount", CC"()J", (void*)&WB_ResolvedMethodItemsCount },
2383 {CC"protectionDomainRemovedCount", CC"()I", (void*)&WB_ProtectionDomainRemovedCount },
2384 {CC"aotLibrariesCount", CC"()I", (void*)&WB_AotLibrariesCount },
2385 };
2386
2387
2388 #undef CC
2389
2390 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2391 {
2392 if (WhiteBoxAPI) {
2393 // Make sure that wbclass is loaded by the null classloader
2394 InstanceKlass* ik = InstanceKlass::cast(JNIHandles::resolve(wbclass)->klass());
2395 Handle loader(THREAD, ik->class_loader());
2396 if (loader.is_null()) {
2397 WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0]));
2398 WhiteBox::set_used();
2399 }
2400 }
|
2102
2103 // Checks that the library libfile has the noexecstack bit set.
2104 WB_ENTRY(jboolean, WB_CheckLibSpecifiesNoexecstack(JNIEnv* env, jobject o, jstring libfile))
2105 jboolean ret = false;
2106 #ifdef LINUX
2107 // Can't be in VM when we call JNI.
2108 ThreadToNativeFromVM ttnfv(thread);
2109 const char* lf = env->GetStringUTFChars(libfile, NULL);
2110 CHECK_JNI_EXCEPTION_(env, 0);
2111 ret = (jboolean) ElfFile::specifies_noexecstack(lf);
2112 env->ReleaseStringUTFChars(libfile, lf);
2113 #endif
2114 return ret;
2115 WB_END
2116
2117 WB_ENTRY(jboolean, WB_IsContainerized(JNIEnv* env, jobject o))
2118 LINUX_ONLY(return OSContainer::is_containerized();)
2119 return false;
2120 WB_END
2121
2122 WB_ENTRY(jobject, WB_CgroupType(JNIEnv* env, jobject o))
2123 jstring cg_type = NULL;
2124 #ifdef LINUX
2125 #ifndef PRODUCT
2126 const char* p = OSContainer::cg_type();
2127 ThreadToNativeFromVM ttn(thread);
2128 cg_type = env->NewStringUTF(p);
2129
2130 CHECK_JNI_EXCEPTION_(env, NULL);
2131 #endif
2132 #endif
2133 return cg_type;
2134 WB_END
2135
2136 WB_ENTRY(void, WB_PrintOsInfo(JNIEnv* env, jobject o))
2137 os::print_os_info(tty);
2138 WB_END
2139
2140 // Elf decoder
2141 WB_ENTRY(void, WB_DisableElfSectionCache(JNIEnv* env))
2142 #if !defined(_WINDOWS) && !defined(__APPLE__) && !defined(_AIX)
2143 ElfFile::_do_not_cache_elf_section = true;
2144 #endif
2145 WB_END
2146
2147 WB_ENTRY(jlong, WB_ResolvedMethodItemsCount(JNIEnv* env, jobject o))
2148 return (jlong) ResolvedMethodTable::items_count();
2149 WB_END
2150
2151 WB_ENTRY(jint, WB_ProtectionDomainRemovedCount(JNIEnv* env, jobject o))
2152 return (jint) SystemDictionary::pd_cache_table()->removed_entries_count();
2153 WB_END
2154
2155 WB_ENTRY(jint, WB_AotLibrariesCount(JNIEnv* env, jobject o))
2375 {CC"isCDSIncludedInVmBuild", CC"()Z", (void*)&WB_IsCDSIncludedInVmBuild },
2376 {CC"isJFRIncludedInVmBuild", CC"()Z", (void*)&WB_IsJFRIncludedInVmBuild },
2377 {CC"isJavaHeapArchiveSupported", CC"()Z", (void*)&WB_IsJavaHeapArchiveSupported },
2378 {CC"cdsMemoryMappingFailed", CC"()Z", (void*)&WB_CDSMemoryMappingFailed },
2379
2380 {CC"clearInlineCaches0", CC"(Z)V", (void*)&WB_ClearInlineCaches },
2381 {CC"handshakeWalkStack", CC"(Ljava/lang/Thread;Z)I", (void*)&WB_HandshakeWalkStack },
2382 {CC"addCompilerDirective", CC"(Ljava/lang/String;)I",
2383 (void*)&WB_AddCompilerDirective },
2384 {CC"removeCompilerDirective", CC"(I)V", (void*)&WB_RemoveCompilerDirective },
2385 {CC"isGCSupported", CC"(I)Z", (void*)&WB_IsGCSupported},
2386 {CC"isGCSelected", CC"(I)Z", (void*)&WB_IsGCSelected},
2387 {CC"isGCSelectedErgonomically", CC"()Z", (void*)&WB_IsGCSelectedErgonomically},
2388 {CC"supportsConcurrentGCPhaseControl", CC"()Z", (void*)&WB_SupportsConcurrentGCPhaseControl},
2389 {CC"requestConcurrentGCPhase0", CC"(Ljava/lang/String;)Z",
2390 (void*)&WB_RequestConcurrentGCPhase},
2391 {CC"checkLibSpecifiesNoexecstack", CC"(Ljava/lang/String;)Z",
2392 (void*)&WB_CheckLibSpecifiesNoexecstack},
2393 {CC"isContainerized", CC"()Z", (void*)&WB_IsContainerized },
2394 {CC"printOsInfo", CC"()V", (void*)&WB_PrintOsInfo },
2395 {CC"cgroupType", CC"()Ljava/lang/String;",
2396 (void*)&WB_CgroupType },
2397 {CC"disableElfSectionCache", CC"()V", (void*)&WB_DisableElfSectionCache },
2398 {CC"resolvedMethodItemsCount", CC"()J", (void*)&WB_ResolvedMethodItemsCount },
2399 {CC"protectionDomainRemovedCount", CC"()I", (void*)&WB_ProtectionDomainRemovedCount },
2400 {CC"aotLibrariesCount", CC"()I", (void*)&WB_AotLibrariesCount },
2401 };
2402
2403
2404 #undef CC
2405
2406 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2407 {
2408 if (WhiteBoxAPI) {
2409 // Make sure that wbclass is loaded by the null classloader
2410 InstanceKlass* ik = InstanceKlass::cast(JNIHandles::resolve(wbclass)->klass());
2411 Handle loader(THREAD, ik->class_loader());
2412 if (loader.is_null()) {
2413 WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0]));
2414 WhiteBox::set_used();
2415 }
2416 }
|