src/cpu/x86/vm/runtime_x86_32.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
6893081 Cdiff src/cpu/x86/vm/runtime_x86_32.cpp
src/cpu/x86/vm/runtime_x86_32.cpp
Print this page
rev 1081 : imported patch indy-cleanup-6893081.patch
*** 41,55 ****
// for the nmethod.
//
// This code is entered with a jmp.
//
// Arguments:
! // rax,: exception oop
// rdx: exception pc
//
// Results:
! // rax,: exception oop
// rdx: exception pc in caller or ???
// destination: exception handler of caller
//
// Note: the exception pc MUST be at a call (precise debug information)
// Only register rax, rdx, rcx are not callee saved.
--- 41,55 ----
// for the nmethod.
//
// This code is entered with a jmp.
//
// Arguments:
! // rax: exception oop
// rdx: exception pc
//
// Results:
! // rax: exception oop
// rdx: exception pc in caller or ???
// destination: exception handler of caller
//
// Note: the exception pc MUST be at a call (precise debug information)
// Only register rax, rdx, rcx are not callee saved.
*** 111,131 ****
__ movptr(rbp, Address(rsp, rbp_off * wordSize));
__ addptr(rsp, return_off * wordSize); // Epilog!
__ pop(rdx); // Exception pc
! // rax,: exception handler for given <exception oop/exception pc>
// We have a handler in rax, (could be deopt blob)
// rdx - throwing pc, deopt blob will need it.
__ push(rax);
- // rcx contains handler address
-
- __ get_thread(rcx); // TLS
// Get the exception
__ movptr(rax, Address(rcx, JavaThread::exception_oop_offset()));
// Get the exception pc in case we are deoptimized
__ movptr(rdx, Address(rcx, JavaThread::exception_pc_offset()));
#ifdef ASSERT
--- 111,131 ----
__ movptr(rbp, Address(rsp, rbp_off * wordSize));
__ addptr(rsp, return_off * wordSize); // Epilog!
__ pop(rdx); // Exception pc
+ // rax: exception handler for given <exception oop/exception pc>
! // Restore SP from BP if the exception PC is a MethodHandle call.
! __ cmpl(Address(rcx, JavaThread::is_method_handle_exception_offset()), 0);
! __ cmovptr(Assembler::notEqual, rsp, rbp);
// We have a handler in rax, (could be deopt blob)
// rdx - throwing pc, deopt blob will need it.
__ push(rax);
// Get the exception
__ movptr(rax, Address(rcx, JavaThread::exception_oop_offset()));
// Get the exception pc in case we are deoptimized
__ movptr(rdx, Address(rcx, JavaThread::exception_pc_offset()));
#ifdef ASSERT
*** 135,145 ****
// Clear the exception oop so GC no longer processes it as a root.
__ movptr(Address(rcx, JavaThread::exception_oop_offset()), NULL_WORD);
__ pop(rcx);
! // rax,: exception oop
// rcx: exception handler
// rdx: exception pc
__ jmp (rcx);
// -------------
--- 135,145 ----
// Clear the exception oop so GC no longer processes it as a root.
__ movptr(Address(rcx, JavaThread::exception_oop_offset()), NULL_WORD);
__ pop(rcx);
! // rax: exception oop
// rcx: exception handler
// rdx: exception pc
__ jmp (rcx);
// -------------
src/cpu/x86/vm/runtime_x86_32.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File