Mercurial > hg > truffle
diff src/share/vm/runtime/sharedRuntime.cpp @ 5111:422c979ff392
fixed two cases where DeoptAction was invalid
author | Christian Haeubl <christian.haeubl@oracle.com> |
---|---|
date | Thu, 15 Mar 2012 16:34:31 -0700 |
parents | 0ebca2e35ca5 |
children | 837a304d0ca8 |
line wrap: on
line diff
--- a/src/share/vm/runtime/sharedRuntime.cpp Thu Mar 15 15:31:34 2012 -0700 +++ b/src/share/vm/runtime/sharedRuntime.cpp Thu Mar 15 16:34:31 2012 -0700 @@ -789,13 +789,14 @@ throw_and_post_jvmti_exception(thread, exception); JRT_END -address SharedRuntime::deoptimization_continuation(JavaThread* thread, address pc, nmethod* nm) -{ +address SharedRuntime::deoptimize_for_implicit_exception(JavaThread* thread, address pc, nmethod* nm, int deopt_reason) { + assert(deopt_reason > Deoptimization::Reason_none && deopt_reason < Deoptimization::Reason_LIMIT, "invalid deopt reason"); if (TraceSignals) { tty->print_cr(err_msg("Deoptimizing on implicit exception at relative pc=%d in method %s", pc - nm->entry_point(), nm->method()->name()->as_C_string())); } thread->_ScratchA = (intptr_t)pc; - return (SharedRuntime::deopt_blob()->jmp_uncommon_trap()); + thread->_ScratchB = Deoptimization::make_trap_request((Deoptimization::DeoptReason)deopt_reason, Deoptimization::Action_reinterpret); + return (SharedRuntime::deopt_blob()->implicit_exception_uncommon_trap()); } JRT_ENTRY(void, SharedRuntime::throw_WrongMethodTypeException(JavaThread* thread, oopDesc* required, oopDesc* actual)) @@ -891,7 +892,7 @@ _implicit_null_throws++; #endif #ifdef GRAAL - target_pc = deoptimization_continuation(thread, pc, nm); + target_pc = deoptimize_for_implicit_exception(thread, pc, nm, Deoptimization::Reason_null_check); #else target_pc = nm->continuation_for_implicit_exception(pc); #endif @@ -914,7 +915,7 @@ if (TraceSignals) { tty->print_cr("graal implicit div0"); } - target_pc = deoptimization_continuation(thread, pc, nm); + target_pc = deoptimize_for_implicit_exception(thread, pc, nm, Deoptimization::Reason_div0_check); #else target_pc = nm->continuation_for_implicit_exception(pc); #endif