< prev index next >

src/share/vm/prims/whitebox.cpp

Print this page




 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
< prev index next >