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) { |