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