equal
deleted
inserted
replaced
619 JRT_END |
619 JRT_END |
620 |
620 |
621 // ret_pc points into caller; we are returning caller's exception handler |
621 // ret_pc points into caller; we are returning caller's exception handler |
622 // for given exception |
622 // for given exception |
623 address SharedRuntime::compute_compiled_exc_handler(CompiledMethod* cm, address ret_pc, Handle& exception, |
623 address SharedRuntime::compute_compiled_exc_handler(CompiledMethod* cm, address ret_pc, Handle& exception, |
624 bool force_unwind, bool top_frame_only) { |
624 bool force_unwind, bool top_frame_only, bool& recursive_exception_occurred) { |
625 assert(cm != NULL, "must exist"); |
625 assert(cm != NULL, "must exist"); |
626 ResourceMark rm; |
626 ResourceMark rm; |
627 |
627 |
628 #if INCLUDE_JVMCI |
628 #if INCLUDE_JVMCI |
629 if (cm->is_compiled_by_jvmci()) { |
629 if (cm->is_compiled_by_jvmci()) { |
675 // be set into thread local storage, and do another lookup for an |
675 // be set into thread local storage, and do another lookup for an |
676 // exception handler for this exception, this time starting at the |
676 // exception handler for this exception, this time starting at the |
677 // BCI of the exception handler which caused the exception to be |
677 // BCI of the exception handler which caused the exception to be |
678 // thrown (bugs 4307310 and 4546590). Set "exception" reference |
678 // thrown (bugs 4307310 and 4546590). Set "exception" reference |
679 // argument to ensure that the correct exception is thrown (4870175). |
679 // argument to ensure that the correct exception is thrown (4870175). |
|
680 recursive_exception_occurred = true; |
680 exception = Handle(THREAD, PENDING_EXCEPTION); |
681 exception = Handle(THREAD, PENDING_EXCEPTION); |
681 CLEAR_PENDING_EXCEPTION; |
682 CLEAR_PENDING_EXCEPTION; |
682 if (handler_bci >= 0) { |
683 if (handler_bci >= 0) { |
683 bci = handler_bci; |
684 bci = handler_bci; |
684 handler_bci = -1; |
685 handler_bci = -1; |