Mercurial > hg > openjdk6-mips
changeset 33:9fdc8715b0a2
Fix the deoptimization bug.
Original PC of the deopt_frame may not be always in (fp - 1). Therefore,
set RA to the deop_pc, which is the entry address of deopt_handler, and
the frame::frame will handle it.
author | Ao Qi <aoqi@loongson.cn> |
---|---|
date | Fri, 26 Nov 2010 12:00:58 +0800 |
parents | ab0d284dc313 |
children | 75473a9073f5 |
files | hotspot/src/cpu/mips/vm/c1_LIRAssembler_mips.cpp hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp |
diffstat | 2 files changed, 2 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/hotspot/src/cpu/mips/vm/c1_LIRAssembler_mips.cpp Thu Nov 18 16:19:42 2010 +0800 +++ b/hotspot/src/cpu/mips/vm/c1_LIRAssembler_mips.cpp Fri Nov 26 12:00:58 2010 +0800 @@ -433,7 +433,7 @@ compilation()->offsets()->set_value(CodeOffsets::Deopt, code_offset()); - __ jmp(SharedRuntime::deopt_blob()->unpack()); + __ call(SharedRuntime::deopt_blob()->unpack()); __ delayed()->nop(); assert(code_offset() - offset <= deopt_handler_size, "overflow");
--- a/hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp Thu Nov 18 16:19:42 2010 +0800 +++ b/hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp Fri Nov 26 12:00:58 2010 +0800 @@ -3233,7 +3233,7 @@ // Prolog for non exception case! // Correct the return address we were given. //FIXME, return address is on the tos or Ra? - __ lw(RA, FP, (-1) * wordSize); + __ addi(RA, RA, - (NativeCall::return_address_offset)); // Save everything in sight. map = RegisterSaver::save_live_registers(masm, additional_words, &frame_size_in_words); // Normal deoptimization