143 JvmtiEnv* jvmti_env = JvmtiEnv::create_a_jvmti(JVMTI_VERSION);
144 jvmtiError err = jvmti_env->AddToBootstrapClassLoaderSearch(seg);
145 assert(err == JVMTI_ERROR_NONE, "must not fail");
146 #endif
147 }
148 WB_END
149
150 WB_ENTRY(void, WB_AddToSystemClassLoaderSearch(JNIEnv* env, jobject o, jstring segment)) {
151 #if INCLUDE_JVMTI
152 ResourceMark rm;
153 const char* seg = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(segment));
154 JvmtiEnv* jvmti_env = JvmtiEnv::create_a_jvmti(JVMTI_VERSION);
155 jvmtiError err = jvmti_env->AddToSystemClassLoaderSearch(seg);
156 assert(err == JVMTI_ERROR_NONE, "must not fail");
157 #endif
158 }
159 WB_END
160
161 #ifdef LINUX
162 #include "utilities/elfFile.hpp"
163 #endif
164
165 WB_ENTRY(jlong, WB_GetCompressedOopsMaxHeapSize(JNIEnv* env, jobject o)) {
166 return (jlong)Arguments::max_heap_for_compressed_oops();
167 }
168 WB_END
169
170 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
171 CollectorPolicy * p = Universe::heap()->collector_policy();
172 gclog_or_tty->print_cr("Minimum heap " SIZE_FORMAT " Initial heap "
173 SIZE_FORMAT" Maximum heap " SIZE_FORMAT " Min alignment " SIZE_FORMAT " Max alignment " SIZE_FORMAT,
174 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
175 p->space_alignment(), p->heap_alignment());
176 }
177 WB_END
178
179 #ifndef PRODUCT
180 // Forward declaration
181 void TestReservedSpace_test();
182 void TestReserveMemorySpecial_test();
1011 }
1012 }
1013 }
1014 }
1015
1016 // Checks that the library libfile has the noexecstack bit set.
1017 WB_ENTRY(jboolean, WB_CheckLibSpecifiesNoexecstack(JNIEnv* env, jobject o, jstring libfile))
1018 jboolean ret = false;
1019 #ifdef LINUX
1020 // Can't be in VM when we call JNI.
1021 ThreadToNativeFromVM ttnfv(thread);
1022 const char* lf = env->GetStringUTFChars(libfile, NULL);
1023 CHECK_JNI_EXCEPTION_(env, 0);
1024 ElfFile ef(lf);
1025 ret = (jboolean) ef.specifies_noexecstack();
1026 env->ReleaseStringUTFChars(libfile, lf);
1027 #endif
1028 return ret;
1029 WB_END
1030
1031 #define CC (char*)
1032
1033 static JNINativeMethod methods[] = {
1034 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
1035 {CC"getObjectSize", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectSize },
1036 {CC"isObjectInOldGen", CC"(Ljava/lang/Object;)Z", (void*)&WB_isObjectInOldGen },
1037 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
1038 {CC"getVMPageSize", CC"()I", (void*)&WB_GetVMPageSize },
1039 {CC"getVMLargePageSize", CC"()J", (void*)&WB_GetVMLargePageSize},
1040 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
1041 {CC"classKnownToNotExist",
1042 CC"(Ljava/lang/ClassLoader;Ljava/lang/String;)Z",(void*)&WB_ClassKnownToNotExist},
1043 {CC"getLookupCacheURLs", CC"(Ljava/lang/ClassLoader;)[Ljava/net/URL;", (void*)&WB_GetLookupCacheURLs},
1044 {CC"getLookupCacheMatches", CC"(Ljava/lang/ClassLoader;Ljava/lang/String;)[I",
1045 (void*)&WB_GetLookupCacheMatches},
1046 {CC"parseCommandLine",
1047 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
1048 (void*) &WB_ParseCommandLine
1049 },
1050 {CC"addToBootstrapClassLoaderSearch", CC"(Ljava/lang/String;)V",
1124 (void*)&WB_GetDoubleVMFlag},
1125 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;",
1126 (void*)&WB_GetStringVMFlag},
1127 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
1128 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
1129 {CC"youngGC", CC"()V", (void*)&WB_YoungGC },
1130 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
1131 {CC"allocateMetaspace",
1132 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace },
1133 {CC"freeMetaspace",
1134 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace },
1135 {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC },
1136 {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC },
1137 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures },
1138 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
1139 (void*)&WB_GetNMethod },
1140 {CC"isMonitorInflated", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated },
1141 {CC"forceSafepoint", CC"()V", (void*)&WB_ForceSafepoint },
1142 {CC"checkLibSpecifiesNoexecstack", CC"(Ljava/lang/String;)Z",
1143 (void*)&WB_CheckLibSpecifiesNoexecstack},
1144 };
1145
1146 #undef CC
1147
1148 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
1149 {
1150 if (WhiteBoxAPI) {
1151 // Make sure that wbclass is loaded by the null classloader
1152 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
1153 Handle loader(ikh->class_loader());
1154 if (loader.is_null()) {
1155 WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0]));
1156 WhiteBox::register_extended(env, wbclass, thread);
1157 WhiteBox::set_used();
1158 }
1159 }
1160 }
1161 JVM_END
|
143 JvmtiEnv* jvmti_env = JvmtiEnv::create_a_jvmti(JVMTI_VERSION);
144 jvmtiError err = jvmti_env->AddToBootstrapClassLoaderSearch(seg);
145 assert(err == JVMTI_ERROR_NONE, "must not fail");
146 #endif
147 }
148 WB_END
149
150 WB_ENTRY(void, WB_AddToSystemClassLoaderSearch(JNIEnv* env, jobject o, jstring segment)) {
151 #if INCLUDE_JVMTI
152 ResourceMark rm;
153 const char* seg = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(segment));
154 JvmtiEnv* jvmti_env = JvmtiEnv::create_a_jvmti(JVMTI_VERSION);
155 jvmtiError err = jvmti_env->AddToSystemClassLoaderSearch(seg);
156 assert(err == JVMTI_ERROR_NONE, "must not fail");
157 #endif
158 }
159 WB_END
160
161 #ifdef LINUX
162 #include "utilities/elfFile.hpp"
163 #include "osContainer_linux.hpp"
164 #endif
165
166 WB_ENTRY(jlong, WB_GetCompressedOopsMaxHeapSize(JNIEnv* env, jobject o)) {
167 return (jlong)Arguments::max_heap_for_compressed_oops();
168 }
169 WB_END
170
171 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
172 CollectorPolicy * p = Universe::heap()->collector_policy();
173 gclog_or_tty->print_cr("Minimum heap " SIZE_FORMAT " Initial heap "
174 SIZE_FORMAT" Maximum heap " SIZE_FORMAT " Min alignment " SIZE_FORMAT " Max alignment " SIZE_FORMAT,
175 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
176 p->space_alignment(), p->heap_alignment());
177 }
178 WB_END
179
180 #ifndef PRODUCT
181 // Forward declaration
182 void TestReservedSpace_test();
183 void TestReserveMemorySpecial_test();
1012 }
1013 }
1014 }
1015 }
1016
1017 // Checks that the library libfile has the noexecstack bit set.
1018 WB_ENTRY(jboolean, WB_CheckLibSpecifiesNoexecstack(JNIEnv* env, jobject o, jstring libfile))
1019 jboolean ret = false;
1020 #ifdef LINUX
1021 // Can't be in VM when we call JNI.
1022 ThreadToNativeFromVM ttnfv(thread);
1023 const char* lf = env->GetStringUTFChars(libfile, NULL);
1024 CHECK_JNI_EXCEPTION_(env, 0);
1025 ElfFile ef(lf);
1026 ret = (jboolean) ef.specifies_noexecstack();
1027 env->ReleaseStringUTFChars(libfile, lf);
1028 #endif
1029 return ret;
1030 WB_END
1031
1032 WB_ENTRY(jboolean, WB_IsContainerized(JNIEnv* env, jobject o))
1033 LINUX_ONLY(return OSContainer::is_containerized();)
1034 return false;
1035 WB_END
1036
1037 WB_ENTRY(void, WB_PrintOsInfo(JNIEnv* env, jobject o))
1038 os::print_os_info(tty);
1039 WB_END
1040
1041 #define CC (char*)
1042
1043 static JNINativeMethod methods[] = {
1044 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
1045 {CC"getObjectSize", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectSize },
1046 {CC"isObjectInOldGen", CC"(Ljava/lang/Object;)Z", (void*)&WB_isObjectInOldGen },
1047 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
1048 {CC"getVMPageSize", CC"()I", (void*)&WB_GetVMPageSize },
1049 {CC"getVMLargePageSize", CC"()J", (void*)&WB_GetVMLargePageSize},
1050 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
1051 {CC"classKnownToNotExist",
1052 CC"(Ljava/lang/ClassLoader;Ljava/lang/String;)Z",(void*)&WB_ClassKnownToNotExist},
1053 {CC"getLookupCacheURLs", CC"(Ljava/lang/ClassLoader;)[Ljava/net/URL;", (void*)&WB_GetLookupCacheURLs},
1054 {CC"getLookupCacheMatches", CC"(Ljava/lang/ClassLoader;Ljava/lang/String;)[I",
1055 (void*)&WB_GetLookupCacheMatches},
1056 {CC"parseCommandLine",
1057 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
1058 (void*) &WB_ParseCommandLine
1059 },
1060 {CC"addToBootstrapClassLoaderSearch", CC"(Ljava/lang/String;)V",
1134 (void*)&WB_GetDoubleVMFlag},
1135 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;",
1136 (void*)&WB_GetStringVMFlag},
1137 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
1138 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
1139 {CC"youngGC", CC"()V", (void*)&WB_YoungGC },
1140 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
1141 {CC"allocateMetaspace",
1142 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace },
1143 {CC"freeMetaspace",
1144 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace },
1145 {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC },
1146 {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC },
1147 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures },
1148 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
1149 (void*)&WB_GetNMethod },
1150 {CC"isMonitorInflated", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated },
1151 {CC"forceSafepoint", CC"()V", (void*)&WB_ForceSafepoint },
1152 {CC"checkLibSpecifiesNoexecstack", CC"(Ljava/lang/String;)Z",
1153 (void*)&WB_CheckLibSpecifiesNoexecstack},
1154 {CC"isContainerized", CC"()Z", (void*)&WB_IsContainerized },
1155 {CC"printOsInfo", CC"()V", (void*)&WB_PrintOsInfo },
1156 };
1157
1158 #undef CC
1159
1160 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
1161 {
1162 if (WhiteBoxAPI) {
1163 // Make sure that wbclass is loaded by the null classloader
1164 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
1165 Handle loader(ikh->class_loader());
1166 if (loader.is_null()) {
1167 WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0]));
1168 WhiteBox::register_extended(env, wbclass, thread);
1169 WhiteBox::set_used();
1170 }
1171 }
1172 }
1173 JVM_END
|