hotspot/src/share/vm/prims/whitebox.cpp
changeset 32619 47acec81dcca
parent 31962 d05e0a4d1b43
child 32625 054d452e4e06
equal deleted inserted replaced
32617:a59435e1fecc 32619:47acec81dcca
    25 #include "precompiled.hpp"
    25 #include "precompiled.hpp"
    26 
    26 
    27 #include <new>
    27 #include <new>
    28 
    28 
    29 #include "classfile/classLoaderData.hpp"
    29 #include "classfile/classLoaderData.hpp"
    30 #include "classfile/imageFile.hpp"
       
    31 #include "classfile/stringTable.hpp"
    30 #include "classfile/stringTable.hpp"
    32 #include "code/codeCache.hpp"
    31 #include "code/codeCache.hpp"
    33 #include "jvmtifiles/jvmtiEnv.hpp"
    32 #include "jvmtifiles/jvmtiEnv.hpp"
    34 #include "memory/metadataFactory.hpp"
    33 #include "memory/metadataFactory.hpp"
    35 #include "memory/metaspaceShared.hpp"
    34 #include "memory/metaspaceShared.hpp"
  1142 
  1141 
  1143 WB_ENTRY(jlong, WB_MetaspaceCapacityUntilGC(JNIEnv* env, jobject wb))
  1142 WB_ENTRY(jlong, WB_MetaspaceCapacityUntilGC(JNIEnv* env, jobject wb))
  1144   return (jlong) MetaspaceGC::capacity_until_GC();
  1143   return (jlong) MetaspaceGC::capacity_until_GC();
  1145 WB_END
  1144 WB_END
  1146 
  1145 
  1147 WB_ENTRY(jboolean, WB_ReadImageFile(JNIEnv* env, jobject wb, jstring imagefile))
  1146 
  1148   const char* filename = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(imagefile));
       
  1149   return ImageFileReader::open(filename) != NULL;
       
  1150 WB_END
       
  1151 
       
  1152 WB_ENTRY(jlong, WB_imageOpenImage(JNIEnv *env, jobject wb, jstring path, jboolean big_endian))
       
  1153   ThreadToNativeFromVM ttn(thread);
       
  1154   const char *nativePath = env->GetStringUTFChars(path, NULL);
       
  1155   jlong ret = JVM_ImageOpen(env, nativePath, big_endian);
       
  1156 
       
  1157   env->ReleaseStringUTFChars(path, nativePath);
       
  1158   return ret;
       
  1159 WB_END
       
  1160 
       
  1161 WB_ENTRY(void, WB_imageCloseImage(JNIEnv *env, jobject wb, jlong id))
       
  1162   ThreadToNativeFromVM ttn(thread);
       
  1163   JVM_ImageClose(env, id);
       
  1164 WB_END
       
  1165 
       
  1166 WB_ENTRY(jlong, WB_imageGetIndexAddress(JNIEnv *env, jobject wb, jlong id))
       
  1167   ThreadToNativeFromVM ttn(thread);
       
  1168   return JVM_ImageGetIndexAddress(env, id);
       
  1169 WB_END
       
  1170 
       
  1171 WB_ENTRY(jlong, WB_imageGetDataAddress(JNIEnv *env, jobject wb, jlong id))
       
  1172   ThreadToNativeFromVM ttn(thread);
       
  1173   return JVM_ImageGetDataAddress(env, id);
       
  1174 WB_END
       
  1175 
       
  1176 WB_ENTRY(jboolean, WB_imageRead(JNIEnv *env, jobject wb, jlong id, jlong offset, jobject uncompressedBuffer, jlong uncompressed_size))
       
  1177   ThreadToNativeFromVM ttn(thread);
       
  1178   if (uncompressedBuffer == NULL) {
       
  1179     return JNI_FALSE;
       
  1180   }
       
  1181   unsigned char* uncompressedAddress =
       
  1182           (unsigned char*) env->GetDirectBufferAddress(uncompressedBuffer);
       
  1183   return JVM_ImageRead(env, id, offset, uncompressedAddress, uncompressed_size);
       
  1184 WB_END
       
  1185 
       
  1186 WB_ENTRY(jboolean, WB_imageReadCompressed(JNIEnv *env, jobject wb, jlong id, jlong offset, jobject compressedBuffer, jlong compressed_size, jobject uncompressedBuffer, jlong uncompressed_size))
       
  1187   ThreadToNativeFromVM ttn(thread);
       
  1188   if (uncompressedBuffer == NULL || compressedBuffer == NULL) {
       
  1189     return false;
       
  1190   }
       
  1191   // Get address of read direct buffer.
       
  1192   unsigned char* compressedAddress =
       
  1193         (unsigned char*) env->GetDirectBufferAddress(compressedBuffer);
       
  1194   // Get address of decompression direct buffer.
       
  1195   unsigned char* uncompressedAddress =
       
  1196         (unsigned char*) env->GetDirectBufferAddress(uncompressedBuffer);
       
  1197   return JVM_ImageReadCompressed(env, id, offset, compressedAddress, compressed_size, uncompressedAddress, uncompressed_size);
       
  1198 WB_END
       
  1199 
       
  1200 WB_ENTRY(jbyteArray, WB_imageGetStringBytes(JNIEnv *env, jobject wb, jlong id, jlong offset))
       
  1201   ThreadToNativeFromVM ttn(thread);
       
  1202   const char* data = JVM_ImageGetStringBytes(env, id, offset);
       
  1203   // Determine String length.
       
  1204   size_t size = strlen(data);
       
  1205   // Allocate byte array.
       
  1206   jbyteArray byteArray = env->NewByteArray((jsize) size);
       
  1207   // Get array base address.
       
  1208   jbyte* rawBytes = env->GetByteArrayElements(byteArray, NULL);
       
  1209   // Copy bytes from image string table.
       
  1210   memcpy(rawBytes, data, size);
       
  1211   // Release byte array base address.
       
  1212   env->ReleaseByteArrayElements(byteArray, rawBytes, 0);
       
  1213   return byteArray;
       
  1214 WB_END
       
  1215 
       
  1216 WB_ENTRY(jlong, WB_imageGetStringsSize(JNIEnv *env, jobject wb, jlong id))
       
  1217   ImageFileReader* reader = ImageFileReader::idToReader(id);
       
  1218   return reader? reader->strings_size() : 0L;
       
  1219 WB_END
       
  1220 
       
  1221 WB_ENTRY(jlongArray, WB_imageGetAttributes(JNIEnv *env, jobject wb, jlong id, jint offset))
       
  1222   ThreadToNativeFromVM ttn(thread);
       
  1223   // Allocate a jlong large enough for all location attributes.
       
  1224   jlongArray attributes = env->NewLongArray(JVM_ImageGetAttributesCount(env));
       
  1225   // Get base address for jlong array.
       
  1226   jlong* rawAttributes = env->GetLongArrayElements(attributes, NULL);
       
  1227   jlong* ret = JVM_ImageGetAttributes(env, rawAttributes, id, offset);
       
  1228   // Release jlong array base address.
       
  1229   env->ReleaseLongArrayElements(attributes, rawAttributes, 0);
       
  1230     return ret == NULL ? NULL : attributes;
       
  1231 WB_END
       
  1232 
       
  1233 WB_ENTRY(jlongArray, WB_imageFindAttributes(JNIEnv *env, jobject wb, jlong id, jbyteArray utf8))
       
  1234   ThreadToNativeFromVM ttn(thread);
       
  1235   // Allocate a jlong large enough for all location attributes.
       
  1236   jlongArray attributes = env->NewLongArray(JVM_ImageGetAttributesCount(env));
       
  1237   // Get base address for jlong array.
       
  1238   jlong* rawAttributes = env->GetLongArrayElements(attributes, NULL);
       
  1239   jsize size = env->GetArrayLength(utf8);
       
  1240   jbyte* rawBytes = env->GetByteArrayElements(utf8, NULL);
       
  1241   jlong* ret = JVM_ImageFindAttributes(env, rawAttributes, rawBytes, size, id);
       
  1242   env->ReleaseByteArrayElements(utf8, rawBytes, 0);
       
  1243   env->ReleaseLongArrayElements(attributes, rawAttributes, 0);
       
  1244   return ret == NULL ? NULL : attributes;
       
  1245 WB_END
       
  1246 
       
  1247 WB_ENTRY(jintArray, WB_imageAttributeOffsets(JNIEnv *env, jobject wb, jlong id))
       
  1248   ThreadToNativeFromVM ttn(thread);
       
  1249   unsigned int length = JVM_ImageAttributeOffsetsLength(env, id);
       
  1250   if (length == 0) {
       
  1251     return NULL;
       
  1252   }
       
  1253   jintArray offsets = env->NewIntArray(length);
       
  1254   // Get base address of result.
       
  1255   jint* rawOffsets = env->GetIntArrayElements(offsets, NULL);
       
  1256   jint* ret = JVM_ImageAttributeOffsets(env, rawOffsets, length, id);
       
  1257   // Release result base address.
       
  1258   env->ReleaseIntArrayElements(offsets, rawOffsets, 0);
       
  1259   return ret == NULL ? NULL : offsets;
       
  1260 WB_END
       
  1261 
       
  1262 WB_ENTRY(jint, WB_imageGetIntAtAddress(JNIEnv *env, jobject wb, jlong address, jint offset, jboolean big_endian))
       
  1263   unsigned char* arr = (unsigned char*) address + offset;
       
  1264   jint uraw;
       
  1265   if (big_endian) {
       
  1266      uraw = arr[0] << 24 | arr[1]<<16 | (arr[2]<<8) | arr[3];
       
  1267   } else {
       
  1268       uraw = arr[0] | arr[1]<<8 | (arr[2]<<16) | arr[3]<<24;
       
  1269   }
       
  1270   return uraw;
       
  1271 WB_END
       
  1272 
  1147 
  1273 WB_ENTRY(void, WB_AssertMatchingSafepointCalls(JNIEnv* env, jobject o, jboolean mutexSafepointValue, jboolean attemptedNoSafepointValue))
  1148 WB_ENTRY(void, WB_AssertMatchingSafepointCalls(JNIEnv* env, jobject o, jboolean mutexSafepointValue, jboolean attemptedNoSafepointValue))
  1274   Monitor::SafepointCheckRequired sfpt_check_required = mutexSafepointValue ?
  1149   Monitor::SafepointCheckRequired sfpt_check_required = mutexSafepointValue ?
  1275                                            Monitor::_safepoint_check_always :
  1150                                            Monitor::_safepoint_check_always :
  1276                                            Monitor::_safepoint_check_never;
  1151                                            Monitor::_safepoint_check_never;
  1574   {CC"getCompilationActivityMode",
  1449   {CC"getCompilationActivityMode",
  1575                            CC"()I",                   (void*)&WB_GetCompilationActivityMode},
  1450                            CC"()I",                   (void*)&WB_GetCompilationActivityMode},
  1576   {CC"getCodeBlob",        CC"(J)[Ljava/lang/Object;",(void*)&WB_GetCodeBlob        },
  1451   {CC"getCodeBlob",        CC"(J)[Ljava/lang/Object;",(void*)&WB_GetCodeBlob        },
  1577   {CC"getThreadStackSize", CC"()J",                   (void*)&WB_GetThreadStackSize },
  1452   {CC"getThreadStackSize", CC"()J",                   (void*)&WB_GetThreadStackSize },
  1578   {CC"getThreadRemainingStackSize", CC"()J",          (void*)&WB_GetThreadRemainingStackSize },
  1453   {CC"getThreadRemainingStackSize", CC"()J",          (void*)&WB_GetThreadRemainingStackSize },
  1579   {CC"readImageFile",      CC"(Ljava/lang/String;)Z", (void*)&WB_ReadImageFile },
       
  1580   {CC"imageOpenImage",     CC"(Ljava/lang/String;Z)J",(void*)&WB_imageOpenImage },
       
  1581   {CC"imageCloseImage",    CC"(J)V",                  (void*)&WB_imageCloseImage },
       
  1582   {CC"imageGetIndexAddress",CC"(J)J",                 (void*)&WB_imageGetIndexAddress},
       
  1583   {CC"imageGetDataAddress",CC"(J)J",                  (void*)&WB_imageGetDataAddress},
       
  1584   {CC"imageRead",          CC"(JJLjava/nio/ByteBuffer;J)Z",
       
  1585                                                       (void*)&WB_imageRead    },
       
  1586   {CC"imageReadCompressed",CC"(JJLjava/nio/ByteBuffer;JLjava/nio/ByteBuffer;J)Z",
       
  1587                                                       (void*)&WB_imageReadCompressed},
       
  1588   {CC"imageGetStringBytes",CC"(JI)[B",                (void*)&WB_imageGetStringBytes},
       
  1589   {CC"imageGetStringsSize",CC"(J)J",                  (void*)&WB_imageGetStringsSize},
       
  1590   {CC"imageGetAttributes", CC"(JI)[J",                (void*)&WB_imageGetAttributes},
       
  1591   {CC"imageFindAttributes",CC"(J[B)[J",               (void*)&WB_imageFindAttributes},
       
  1592   {CC"imageAttributeOffsets",CC"(J)[I",               (void*)&WB_imageAttributeOffsets},
       
  1593   {CC"imageGetIntAtAddress",CC"(JIZ)I",                (void*)&WB_imageGetIntAtAddress},
       
  1594   {CC"assertMatchingSafepointCalls", CC"(ZZ)V",       (void*)&WB_AssertMatchingSafepointCalls },
  1454   {CC"assertMatchingSafepointCalls", CC"(ZZ)V",       (void*)&WB_AssertMatchingSafepointCalls },
  1595   {CC"isMonitorInflated0", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated  },
  1455   {CC"isMonitorInflated0", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated  },
  1596   {CC"forceSafepoint",     CC"()V",                   (void*)&WB_ForceSafepoint     },
  1456   {CC"forceSafepoint",     CC"()V",                   (void*)&WB_ForceSafepoint     },
  1597   {CC"getMethodBooleanOption",
  1457   {CC"getMethodBooleanOption",
  1598       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Boolean;",
  1458       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Boolean;",