Mercurial > hg > truffle
diff src/cpu/x86/vm/frame_x86.cpp @ 4137:04b9a2566eec
Merge with hsx23/hotspot.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sat, 17 Dec 2011 21:40:27 +0100 |
parents | be4ca325525a 448691f285a5 |
children | 3dbcd1013cc8 |
line wrap: on
line diff
--- a/src/cpu/x86/vm/frame_x86.cpp Sat Dec 17 20:50:09 2011 +0100 +++ b/src/cpu/x86/vm/frame_x86.cpp Sat Dec 17 21:40:27 2011 +0100 @@ -232,11 +232,15 @@ void frame::patch_pc(Thread* thread, address pc) { + address* pc_addr = &(((address*) sp())[-1]); if (TracePcPatching) { - tty->print_cr("patch_pc at address" INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "] ", - &((address *)sp())[-1], ((address *)sp())[-1], pc); + tty->print_cr("patch_pc at address " INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "]", + pc_addr, *pc_addr, pc); } - ((address *)sp())[-1] = pc; + // Either the return address is the original one or we are going to + // patch in the same address that's already there. + assert(_pc == *pc_addr || pc == *pc_addr, "must be"); + *pc_addr = pc; _cb = CodeCache::find_blob(pc); address original_pc = nmethod::get_deopt_original_pc(this); if (original_pc != NULL) { @@ -666,3 +670,8 @@ } #endif + +intptr_t *frame::initial_deoptimization_info() { + // used to reset the saved FP + return fp(); +}