Mercurial > hg > truffle
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 |