src/share/vm/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/prims

src/share/vm/prims/whitebox.cpp

Print this page




1155   p = os::reserve_memory(os::vm_allocation_granularity(), NULL, 0);
1156   if (p == NULL) {
1157     THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(), "Failed to reserve memory");
1158   }
1159 
1160   c = *p;
1161 WB_END
1162 
1163 WB_ENTRY(jstring, WB_GetCPUFeatures(JNIEnv* env, jobject o))
1164   const char* features = VM_Version::features_string();
1165   ThreadToNativeFromVM ttn(thread);
1166   jstring features_string = env->NewStringUTF(features);
1167 
1168   CHECK_JNI_EXCEPTION_(env, NULL);
1169 
1170   return features_string;
1171 WB_END
1172 
1173 int WhiteBox::get_blob_type(const CodeBlob* code) {
1174   guarantee(WhiteBoxAPI, "internal testing API :: WhiteBox has to be enabled");



1175   return CodeCache::get_code_heap(code)->code_blob_type();
1176 }
1177 
1178 CodeHeap* WhiteBox::get_code_heap(int blob_type) {
1179   guarantee(WhiteBoxAPI, "internal testing API :: WhiteBox has to be enabled");
1180   return CodeCache::get_code_heap(blob_type);
1181 }
1182 
1183 struct CodeBlobStub {
1184   CodeBlobStub(const CodeBlob* blob) :
1185       name(os::strdup(blob->name())),
1186       size(blob->size()),
1187       blob_type(WhiteBox::get_blob_type(blob)),
1188       address((jlong) blob) { }
1189   ~CodeBlobStub() { os::free((void*) name); }
1190   const char* const name;
1191   const jint        size;
1192   const jint        blob_type;
1193   const jlong       address;
1194 };


1210   CHECK_JNI_EXCEPTION_(env, NULL);
1211   env->SetObjectArrayElement(result, 2, obj);
1212 
1213   obj = longBox(thread, env, cb->address);
1214   CHECK_JNI_EXCEPTION_(env, NULL);
1215   env->SetObjectArrayElement(result, 3, obj);
1216 
1217   return result;
1218 }
1219 
1220 WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
1221   ResourceMark rm(THREAD);
1222   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
1223   CHECK_JNI_EXCEPTION_(env, NULL);
1224   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
1225   CompiledMethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
1226   jobjectArray result = NULL;
1227   if (code == NULL) {
1228     return result;
1229   }
1230   int insts_size = code->insts_size();

1231 
1232   ThreadToNativeFromVM ttn(thread);
1233   jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string());
1234   CHECK_JNI_EXCEPTION_(env, NULL);
1235   result = env->NewObjectArray(5, clazz, NULL);
1236   if (result == NULL) {
1237     return result;
1238   }
1239 
1240   CodeBlobStub stub(code);
1241   jobjectArray codeBlob = codeBlob2objectArray(thread, env, &stub);
1242   CHECK_JNI_EXCEPTION_(env, NULL);
1243   env->SetObjectArrayElement(result, 0, codeBlob);
1244 
1245   jobject level = integerBox(thread, env, code->comp_level());
1246   CHECK_JNI_EXCEPTION_(env, NULL);
1247   env->SetObjectArrayElement(result, 1, level);
1248 
1249   jbyteArray insts = env->NewByteArray(insts_size);
1250   CHECK_JNI_EXCEPTION_(env, NULL);
1251   env->SetByteArrayRegion(insts, 0, insts_size, (jbyte*) code->insts_begin());
1252   env->SetObjectArrayElement(result, 2, insts);
1253 
1254   jobject id = integerBox(thread, env, code->compile_id());
1255   CHECK_JNI_EXCEPTION_(env, NULL);
1256   env->SetObjectArrayElement(result, 3, id);
1257 
1258   jobject entry_point = longBox(thread, env, (jlong) code->entry_point());
1259   CHECK_JNI_EXCEPTION_(env, NULL);
1260   env->SetObjectArrayElement(result, 4, entry_point);
1261 
1262   return result;
1263 WB_END
1264 
1265 CodeBlob* WhiteBox::allocate_code_blob(int size, int blob_type) {




1155   p = os::reserve_memory(os::vm_allocation_granularity(), NULL, 0);
1156   if (p == NULL) {
1157     THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(), "Failed to reserve memory");
1158   }
1159 
1160   c = *p;
1161 WB_END
1162 
1163 WB_ENTRY(jstring, WB_GetCPUFeatures(JNIEnv* env, jobject o))
1164   const char* features = VM_Version::features_string();
1165   ThreadToNativeFromVM ttn(thread);
1166   jstring features_string = env->NewStringUTF(features);
1167 
1168   CHECK_JNI_EXCEPTION_(env, NULL);
1169 
1170   return features_string;
1171 WB_END
1172 
1173 int WhiteBox::get_blob_type(const CodeBlob* code) {
1174   guarantee(WhiteBoxAPI, "internal testing API :: WhiteBox has to be enabled");
1175   if (code->is_aot()) {
1176     return -1;
1177   }
1178   return CodeCache::get_code_heap(code)->code_blob_type();
1179 }
1180 
1181 CodeHeap* WhiteBox::get_code_heap(int blob_type) {
1182   guarantee(WhiteBoxAPI, "internal testing API :: WhiteBox has to be enabled");
1183   return CodeCache::get_code_heap(blob_type);
1184 }
1185 
1186 struct CodeBlobStub {
1187   CodeBlobStub(const CodeBlob* blob) :
1188       name(os::strdup(blob->name())),
1189       size(blob->size()),
1190       blob_type(WhiteBox::get_blob_type(blob)),
1191       address((jlong) blob) { }
1192   ~CodeBlobStub() { os::free((void*) name); }
1193   const char* const name;
1194   const jint        size;
1195   const jint        blob_type;
1196   const jlong       address;
1197 };


1213   CHECK_JNI_EXCEPTION_(env, NULL);
1214   env->SetObjectArrayElement(result, 2, obj);
1215 
1216   obj = longBox(thread, env, cb->address);
1217   CHECK_JNI_EXCEPTION_(env, NULL);
1218   env->SetObjectArrayElement(result, 3, obj);
1219 
1220   return result;
1221 }
1222 
1223 WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
1224   ResourceMark rm(THREAD);
1225   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
1226   CHECK_JNI_EXCEPTION_(env, NULL);
1227   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
1228   CompiledMethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
1229   jobjectArray result = NULL;
1230   if (code == NULL) {
1231     return result;
1232   }
1233   int comp_level = code->comp_level();
1234   int insts_size = comp_level == CompLevel_aot ? code->code_end() - code->code_begin() : code->insts_size();
1235 
1236   ThreadToNativeFromVM ttn(thread);
1237   jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string());
1238   CHECK_JNI_EXCEPTION_(env, NULL);
1239   result = env->NewObjectArray(5, clazz, NULL);
1240   if (result == NULL) {
1241     return result;
1242   }
1243 
1244   CodeBlobStub stub(code);
1245   jobjectArray codeBlob = codeBlob2objectArray(thread, env, &stub);
1246   CHECK_JNI_EXCEPTION_(env, NULL);
1247   env->SetObjectArrayElement(result, 0, codeBlob);
1248 
1249   jobject level = integerBox(thread, env, comp_level);
1250   CHECK_JNI_EXCEPTION_(env, NULL);
1251   env->SetObjectArrayElement(result, 1, level);
1252 
1253   jbyteArray insts = env->NewByteArray(insts_size);
1254   CHECK_JNI_EXCEPTION_(env, NULL);
1255   env->SetByteArrayRegion(insts, 0, insts_size, (jbyte*) code->insts_begin());
1256   env->SetObjectArrayElement(result, 2, insts);
1257 
1258   jobject id = integerBox(thread, env, code->compile_id());
1259   CHECK_JNI_EXCEPTION_(env, NULL);
1260   env->SetObjectArrayElement(result, 3, id);
1261 
1262   jobject entry_point = longBox(thread, env, (jlong) code->entry_point());
1263   CHECK_JNI_EXCEPTION_(env, NULL);
1264   env->SetObjectArrayElement(result, 4, entry_point);
1265 
1266   return result;
1267 WB_END
1268 
1269 CodeBlob* WhiteBox::allocate_code_blob(int size, int blob_type) {


src/share/vm/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File