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;", |