comparison src/cpu/x86/vm/sharedRuntime_x86_64.cpp @ 1368:93767e6a2dfd

6941529: SharedRuntime::raw_exception_handler_for_return_address must reset thread MethodHandle flag Summary: During testing a bug was hit when an exception returned to the interpreter and the SP was wrong. Reviewed-by: kvn, never
author twisti
date Thu, 08 Apr 2010 10:55:40 +0200
parents cf0685d550f1
children 2338d41fbd81
comparison
equal deleted inserted replaced
1367:9e321dcfa5b7 1368:93767e6a2dfd
3326 __ addptr(rsp, SimpleRuntimeFrame::return_off << LogBytesPerInt); // Epilog 3326 __ addptr(rsp, SimpleRuntimeFrame::return_off << LogBytesPerInt); // Epilog
3327 __ pop(rdx); // No need for exception pc anymore 3327 __ pop(rdx); // No need for exception pc anymore
3328 3328
3329 // rax: exception handler 3329 // rax: exception handler
3330 3330
3331 // Restore SP from BP if the exception PC is a MethodHandle call. 3331 // Restore SP from BP if the exception PC is a MethodHandle call site.
3332 __ cmpl(Address(r15_thread, JavaThread::is_method_handle_exception_offset()), 0); 3332 __ cmpl(Address(r15_thread, JavaThread::is_method_handle_return_offset()), 0);
3333 __ cmovptr(Assembler::notEqual, rsp, rbp); 3333 __ cmovptr(Assembler::notEqual, rsp, rbp);
3334 3334
3335 // We have a handler in rax (could be deopt blob). 3335 // We have a handler in rax (could be deopt blob).
3336 __ mov(r8, rax); 3336 __ mov(r8, rax);
3337 3337