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

src/share/vm/prims/whitebox.cpp

Print this page
rev 9918 : 8145331: SEGV in DirectivesStack::release(DirectiveSet*)
Summary: getDefaultDirective was not updated in 8144873
Reviewed-by:


 548 WB_END
 549 
 550 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
 551   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
 552   CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
 553   MutexLockerEx mu(Compile_lock);
 554   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
 555   return mh->queued_for_compilation();
 556 WB_END
 557 
 558 WB_ENTRY(jboolean, WB_IsIntrinsicAvailable(JNIEnv* env, jobject o, jobject method, jobject compilation_context, jint compLevel))
 559   if (compLevel < CompLevel_none || compLevel > CompLevel_highest_tier) {
 560     return false; // Intrinsic is not available on a non-existent compilation level.
 561   }
 562   jmethodID method_id, compilation_context_id;
 563   method_id = reflected_method_to_jmid(thread, env, method);
 564   CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
 565   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(method_id));
 566 
 567   DirectiveSet* directive;

 568   if (compilation_context != NULL) {
 569     compilation_context_id = reflected_method_to_jmid(thread, env, compilation_context);
 570     CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
 571     methodHandle cch(THREAD, Method::checked_resolve_jmethod_id(compilation_context_id));
 572     directive = DirectivesStack::getMatchingDirective(cch, CompileBroker::compiler((int)compLevel));
 573   } else {
 574     // Calling with NULL matches default directive
 575     directive = DirectivesStack::getDefaultDirective(CompileBroker::compiler((int)compLevel));
 576   }
 577   bool result = CompileBroker::compiler(compLevel)->is_intrinsic_available(mh, directive);
 578   DirectivesStack::release(directive);
 579   return result;
 580 WB_END
 581 
 582 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
 583   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
 584   CHECK_JNI_EXCEPTION_(env, CompLevel_none);
 585   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
 586   nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
 587   return (code != NULL ? code->comp_level() : CompLevel_none);
 588 WB_END
 589 
 590 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
 591   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
 592   CHECK_JNI_EXCEPTION(env);
 593   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
 594   if (is_osr) {
 595     mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");




 548 WB_END
 549 
 550 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
 551   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
 552   CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
 553   MutexLockerEx mu(Compile_lock);
 554   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
 555   return mh->queued_for_compilation();
 556 WB_END
 557 
 558 WB_ENTRY(jboolean, WB_IsIntrinsicAvailable(JNIEnv* env, jobject o, jobject method, jobject compilation_context, jint compLevel))
 559   if (compLevel < CompLevel_none || compLevel > CompLevel_highest_tier) {
 560     return false; // Intrinsic is not available on a non-existent compilation level.
 561   }
 562   jmethodID method_id, compilation_context_id;
 563   method_id = reflected_method_to_jmid(thread, env, method);
 564   CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
 565   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(method_id));
 566 
 567   DirectiveSet* directive;
 568   AbstractCompiler* comp = CompileBroker::compiler((int)compLevel);
 569   if (compilation_context != NULL) {
 570     compilation_context_id = reflected_method_to_jmid(thread, env, compilation_context);
 571     CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
 572     methodHandle cch(THREAD, Method::checked_resolve_jmethod_id(compilation_context_id));
 573     directive = DirectivesStack::getMatchingDirective(cch, comp);
 574   } else {
 575     // Calling with NULL matches default directive
 576     directive = DirectivesStack::getDefaultDirective(comp);
 577   }
 578   bool result = CompileBroker::compiler(compLevel)->is_intrinsic_available(mh, directive);
 579   DirectivesStack::release(directive);
 580   return result;
 581 WB_END
 582 
 583 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
 584   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
 585   CHECK_JNI_EXCEPTION_(env, CompLevel_none);
 586   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
 587   nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
 588   return (code != NULL ? code->comp_level() : CompLevel_none);
 589 WB_END
 590 
 591 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
 592   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
 593   CHECK_JNI_EXCEPTION(env);
 594   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
 595   if (is_osr) {
 596     mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");


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