Skip to content

Commit

Permalink
Set exception_seen accordingly in the runtime.
Browse files Browse the repository at this point in the history
  • Loading branch information
mur47x111 committed Dec 9, 2020
1 parent 3ebaee2 commit 011462c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/hotspot/share/runtime/deoptimization.cpp
Expand Up @@ -1731,6 +1731,18 @@ address Deoptimization::deoptimize_for_missing_exception_handler(CompiledMethod*
frame runtime_frame = thread->last_frame();
frame caller_frame = runtime_frame.sender(&reg_map);
assert(caller_frame.cb()->as_compiled_method_or_null() == cm, "expect top frame compiled method");
vframe* vf = vframe::new_vframe(&caller_frame, &reg_map, thread);
compiledVFrame* cvf = compiledVFrame::cast(vf);
ScopeDesc* imm_scope = cvf->scope();
MethodData* imm_mdo = get_method_data(thread, methodHandle(thread, imm_scope->method()), true);
if (imm_mdo != NULL) {
ProfileData* pdata = imm_mdo->allocate_bci_to_data(imm_scope->bci(), NULL);
if (pdata != NULL && pdata->is_BitData()) {
BitData* bit_data = (BitData*) pdata;
bit_data->set_exception_seen();
}
}

Deoptimization::deoptimize(thread, caller_frame, Deoptimization::Reason_not_compiled_exception_handler);

MethodData* trap_mdo = get_method_data(thread, methodHandle(thread, cm->method()), true);
Expand Down
22 changes: 22 additions & 0 deletions src/hotspot/share/runtime/sharedRuntime.cpp
Expand Up @@ -599,6 +599,28 @@ void SharedRuntime::throw_and_post_jvmti_exception(JavaThread *thread, Handle h_
address bcp = method()->bcp_from(vfst.bci());
JvmtiExport::post_exception_throw(thread, method(), bcp, h_exception());
}

#if INCLUDE_JVMCI
if (EnableJVMCI) {
vframeStream vfst(thread, true);
methodHandle method = methodHandle(thread, vfst.method());
int bci = vfst.bci();
MethodData* trap_mdo = method->method_data();
if (trap_mdo != NULL) {
// Set exception_seen if the exceptional bytecode is an invoke
Bytecode_invoke call = Bytecode_invoke_check(method, bci);
if (call.is_valid()) {
ResourceMark rm(thread);
ProfileData* pdata = trap_mdo->allocate_bci_to_data(bci, NULL);
if (pdata != NULL && pdata->is_BitData()) {
BitData* bit_data = (BitData*) pdata;
bit_data->set_exception_seen();
}
}
}
}
#endif

Exceptions::_throw(thread, __FILE__, __LINE__, h_exception);
}

Expand Down

0 comments on commit 011462c

Please sign in to comment.