Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
8241909: Remove useless code cache lookup in frame::patch_pc
Removed useless code cache lookup.
Reviewed-by: kvn, dlong
- Loading branch information
|
@@ -264,6 +264,7 @@ bool frame::safe_for_sender(JavaThread *thread) { |
|
|
} |
|
|
|
|
|
void frame::patch_pc(Thread* thread, address pc) { |
|
|
assert(_cb == CodeCache::find_blob(pc), "unexpected pc"); |
|
|
address* pc_addr = &(((address*) sp())[-1]); |
|
|
if (TracePcPatching) { |
|
|
tty->print_cr("patch_pc at address " INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "]", |
|
@@ -273,7 +274,6 @@ void frame::patch_pc(Thread* thread, address pc) { |
|
|
// 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 = CompiledMethod::get_deopt_original_pc(this); |
|
|
if (original_pc != NULL) { |
|
|
assert(original_pc == _pc, "expected original PC to be stored before patching"); |
|
|
|
@@ -223,13 +223,13 @@ bool frame::safe_for_sender(JavaThread *thread) { |
|
|
|
|
|
|
|
|
void frame::patch_pc(Thread* thread, address pc) { |
|
|
assert(_cb == CodeCache::find_blob(pc), "unexpected pc"); |
|
|
address* pc_addr = &((address *)sp())[-sender_sp_offset+return_addr_offset]; |
|
|
if (TracePcPatching) { |
|
|
tty->print_cr("patch_pc at address" INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "] ", |
|
|
p2i(pc_addr), p2i(*pc_addr), p2i(pc)); |
|
|
} |
|
|
*pc_addr = pc; |
|
|
_cb = CodeCache::find_blob(pc); |
|
|
address original_pc = CompiledMethod::get_deopt_original_pc(this); |
|
|
if (original_pc != NULL) { |
|
|
assert(original_pc == _pc, "expected original PC to be stored before patching"); |
|
|
|
@@ -247,12 +247,12 @@ frame frame::sender(RegisterMap* map) const { |
|
|
} |
|
|
|
|
|
void frame::patch_pc(Thread* thread, address pc) { |
|
|
assert(_cb == CodeCache::find_blob(pc), "unexpected pc"); |
|
|
if (TracePcPatching) { |
|
|
tty->print_cr("patch_pc at address " PTR_FORMAT " [" PTR_FORMAT " -> " PTR_FORMAT "]", |
|
|
p2i(&((address*) _sp)[-1]), p2i(((address*) _sp)[-1]), p2i(pc)); |
|
|
} |
|
|
own_abi()->lr = (uint64_t)pc; |
|
|
_cb = CodeCache::find_blob(pc); |
|
|
if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) { |
|
|
address orig = (((nmethod*)_cb)->get_original_pc(this)); |
|
|
assert(orig == _pc, "expected original to be stored before patching"); |
|
|
|
@@ -262,12 +262,12 @@ frame frame::sender(RegisterMap* map) const { |
|
|
} |
|
|
|
|
|
void frame::patch_pc(Thread* thread, address pc) { |
|
|
assert(_cb == CodeCache::find_blob(pc), "unexpected pc"); |
|
|
if (TracePcPatching) { |
|
|
tty->print_cr("patch_pc at address " PTR_FORMAT " [" PTR_FORMAT " -> " PTR_FORMAT "] ", |
|
|
p2i(&((address*) _sp)[-1]), p2i(((address*) _sp)[-1]), p2i(pc)); |
|
|
} |
|
|
own_abi()->return_pc = (uint64_t)pc; |
|
|
_cb = CodeCache::find_blob(pc); |
|
|
address original_pc = CompiledMethod::get_deopt_original_pc(this); |
|
|
if (original_pc != NULL) { |
|
|
assert(original_pc == _pc, "expected original to be stored before patching"); |
|
|
|
@@ -550,9 +550,10 @@ frame frame::sender(RegisterMap* map) const { |
|
|
|
|
|
|
|
|
void frame::patch_pc(Thread* thread, address pc) { |
|
|
assert(_cb == CodeCache::find_blob(pc), "unexpected pc"); |
|
|
vmassert(_deopt_state != unknown, "frame is unpatchable"); |
|
|
if(thread == Thread::current()) { |
|
|
StubRoutines::Sparc::flush_callers_register_windows_func()(); |
|
|
if (thread == Thread::current()) { |
|
|
StubRoutines::Sparc::flush_callers_register_windows_func()(); |
|
|
} |
|
|
if (TracePcPatching) { |
|
|
// QQQ this assert is invalid (or too strong anyway) sice _pc could |
|
@@ -561,9 +562,7 @@ void frame::patch_pc(Thread* thread, address pc) { |
|
|
tty->print_cr("patch_pc at address " INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "]", |
|
|
p2i(O7_addr()), p2i(_pc), p2i(pc)); |
|
|
} |
|
|
_cb = CodeCache::find_blob(pc); |
|
|
*O7_addr() = pc - pc_return_offset; |
|
|
_cb = CodeCache::find_blob(_pc); |
|
|
address original_pc = CompiledMethod::get_deopt_original_pc(this); |
|
|
if (original_pc != NULL) { |
|
|
assert(original_pc == _pc, "expected original to be stored before patching"); |
|
|
|
@@ -253,6 +253,7 @@ bool frame::safe_for_sender(JavaThread *thread) { |
|
|
|
|
|
|
|
|
void frame::patch_pc(Thread* thread, address pc) { |
|
|
assert(_cb == CodeCache::find_blob(pc), "unexpected pc"); |
|
|
address* pc_addr = &(((address*) sp())[-1]); |
|
|
if (TracePcPatching) { |
|
|
tty->print_cr("patch_pc at address " INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "]", |
|
@@ -262,7 +263,6 @@ void frame::patch_pc(Thread* thread, address pc) { |
|
|
// 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 = CompiledMethod::get_deopt_original_pc(this); |
|
|
if (original_pc != NULL) { |
|
|
assert(original_pc == _pc, "expected original PC to be stored before patching"); |
|
|
|
@@ -98,12 +98,10 @@ BasicObjectLock* frame::interpreter_frame_monitor_end() const { |
|
|
#endif // CC_INTERP |
|
|
|
|
|
void frame::patch_pc(Thread* thread, address pc) { |
|
|
|
|
|
if (pc != NULL) { |
|
|
_cb = CodeCache::find_blob(pc); |
|
|
assert(_cb == CodeCache::find_blob(pc), "unexpected pc"); |
|
|
_pc = pc; |
|
|
_deopt_state = is_deoptimized; |
|
|
|
|
|
} else { |
|
|
// We borrow this call to set the thread pointer in the interpreter |
|
|
// state; the hook to set up deoptimized frames isn't supplied it. |
|
|