comparison src/share/vm/prims/whitebox.cpp @ 14909:4ca6dc0799b6

Backout jdk9 merge
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 01 Apr 2014 13:57:07 +0200
parents c66479743828
children 52b4284cb496
comparison
equal deleted inserted replaced
14908:8db6e76cb658 14909:4ca6dc0799b6
103 WB_END 103 WB_END
104 104
105 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) { 105 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
106 CollectorPolicy * p = Universe::heap()->collector_policy(); 106 CollectorPolicy * p = Universe::heap()->collector_policy();
107 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap " 107 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
108 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Space alignment "SIZE_FORMAT" Heap alignment "SIZE_FORMAT, 108 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
109 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(), 109 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
110 p->space_alignment(), p->heap_alignment()); 110 p->space_alignment(), p->heap_alignment());
111 } 111 }
112 WB_END 112 WB_END
113 113
314 VMThread::execute(&op); 314 VMThread::execute(&op);
315 WB_END 315 WB_END
316 316
317 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 317 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
318 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 318 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
319 MutexLockerEx mu(Compile_lock);
320 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
319 int result = 0; 321 int result = 0;
320 CHECK_JNI_EXCEPTION_(env, result);
321 MutexLockerEx mu(Compile_lock);
322 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
323 nmethod* code; 322 nmethod* code;
324 if (is_osr) { 323 if (is_osr) {
325 int bci = InvocationEntryBci; 324 int bci = InvocationEntryBci;
326 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) { 325 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) {
327 code->mark_for_deoptimization(); 326 code->mark_for_deoptimization();
343 return result; 342 return result;
344 WB_END 343 WB_END
345 344
346 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 345 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
347 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 346 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
348 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
349 MutexLockerEx mu(Compile_lock); 347 MutexLockerEx mu(Compile_lock);
350 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 348 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
351 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); 349 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
352 if (code == NULL) { 350 if (code == NULL) {
353 return JNI_FALSE; 351 return JNI_FALSE;
355 return (code->is_alive() && !code->is_marked_for_deoptimization()); 353 return (code->is_alive() && !code->is_marked_for_deoptimization());
356 WB_END 354 WB_END
357 355
358 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) 356 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
359 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 357 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
360 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
361 MutexLockerEx mu(Compile_lock); 358 MutexLockerEx mu(Compile_lock);
362 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 359 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
363 if (is_osr) { 360 if (is_osr) {
364 return CompilationPolicy::can_be_osr_compiled(mh, comp_level); 361 return CompilationPolicy::can_be_osr_compiled(mh, comp_level);
365 } else { 362 } else {
367 } 364 }
368 WB_END 365 WB_END
369 366
370 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) 367 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
371 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 368 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
372 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
373 MutexLockerEx mu(Compile_lock); 369 MutexLockerEx mu(Compile_lock);
374 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 370 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
375 return mh->queued_for_compilation(); 371 return mh->queued_for_compilation();
376 WB_END 372 WB_END
377 373
378 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 374 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
379 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 375 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
380 CHECK_JNI_EXCEPTION_(env, CompLevel_none);
381 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 376 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
382 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); 377 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
383 return (code != NULL ? code->comp_level() : CompLevel_none); 378 return (code != NULL ? code->comp_level() : CompLevel_none);
384 WB_END 379 WB_END
385 380
386 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) 381 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
387 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 382 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
388 CHECK_JNI_EXCEPTION(env);
389 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 383 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
390 if (is_osr) { 384 if (is_osr) {
391 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox"); 385 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");
392 } else { 386 } else {
393 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox"); 387 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox");
394 } 388 }
395 WB_END 389 WB_END
396 390
397 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method)) 391 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method))
398 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 392 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
399 CHECK_JNI_EXCEPTION_(env, InvocationEntryBci);
400 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 393 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
401 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false); 394 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false);
402 return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci); 395 return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci);
403 WB_END 396 WB_END
404 397
405 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) 398 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
406 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 399 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
407 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
408 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 400 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
409 bool result = mh->dont_inline(); 401 bool result = mh->dont_inline();
410 mh->set_dont_inline(value == JNI_TRUE); 402 mh->set_dont_inline(value == JNI_TRUE);
411 return result; 403 return result;
412 WB_END 404 WB_END
420 } 412 }
421 WB_END 413 WB_END
422 414
423 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) 415 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
424 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 416 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
425 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
426 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 417 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
427 bool result = mh->force_inline(); 418 bool result = mh->force_inline();
428 mh->set_force_inline(value == JNI_TRUE); 419 mh->set_force_inline(value == JNI_TRUE);
429 return result; 420 return result;
430 WB_END 421 WB_END
431 422
432 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci)) 423 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci))
433 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 424 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
434 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
435 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 425 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
436 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); 426 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
437 MutexLockerEx mu(Compile_lock); 427 MutexLockerEx mu(Compile_lock);
438 return (mh->queued_for_compilation() || nm != NULL); 428 return (mh->queued_for_compilation() || nm != NULL);
439 WB_END 429 WB_END
440 430
441 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) 431 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
442 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 432 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
443 CHECK_JNI_EXCEPTION(env);
444 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 433 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
445 MutexLockerEx mu(Compile_lock); 434 MutexLockerEx mu(Compile_lock);
446 MethodData* mdo = mh->method_data(); 435 MethodData* mdo = mh->method_data();
447 MethodCounters* mcs = mh->method_counters(); 436 MethodCounters* mcs = mh->method_counters();
448 437
625 ResourceMark rm; 614 ResourceMark rm;
626 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI 615 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
627 bool result = true; 616 bool result = true;
628 // one by one registration natives for exception catching 617 // one by one registration natives for exception catching
629 jclass exceptionKlass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string()); 618 jclass exceptionKlass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string());
630 CHECK_JNI_EXCEPTION(env);
631 for (int i = 0, n = sizeof(methods) / sizeof(methods[0]); i < n; ++i) { 619 for (int i = 0, n = sizeof(methods) / sizeof(methods[0]); i < n; ++i) {
632 if (env->RegisterNatives(wbclass, methods + i, 1) != 0) { 620 if (env->RegisterNatives(wbclass, methods + i, 1) != 0) {
633 result = false; 621 result = false;
634 jthrowable throwable_obj = env->ExceptionOccurred(); 622 if (env->ExceptionCheck() && env->IsInstanceOf(env->ExceptionOccurred(), exceptionKlass)) {
635 if (throwable_obj != NULL) { 623 // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native
624 // ignoring the exception
625 tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature);
636 env->ExceptionClear(); 626 env->ExceptionClear();
637 if (env->IsInstanceOf(throwable_obj, exceptionKlass)) {
638 // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native
639 // ignoring the exception
640 tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature);
641 }
642 } else { 627 } else {
643 // register is failed w/o exception or w/ unexpected exception 628 // register is failed w/o exception or w/ unexpected exception
644 tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", methods[i].name, methods[i].signature); 629 tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", methods[i].name, methods[i].signature);
645 env->UnregisterNatives(wbclass); 630 env->UnregisterNatives(wbclass);
646 break; 631 break;