8156659: assert(CodeCache::find_blob_unsafe(_pc) == _cb) failed: inconsistent
Stackwalking from corrupt frame Reviewed-by: dlong, thartmann
This commit is contained in:
parent
2eab293b99
commit
61066d3795
@ -274,8 +274,14 @@ bool os::Solaris::get_frame_at_stack_banging_point(JavaThread* thread, ucontext_
|
|||||||
// stack overflow handling
|
// stack overflow handling
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
*fr = os::fetch_frame_from_ucontext(thread, uc);
|
// Returned frame will be the caller of the method that faults on the stack bang.
|
||||||
*fr = frame(fr->sender_sp(), fr->sp());
|
// Register window not yet rotated (happens at SAVE after stack bang), so there is no new
|
||||||
|
// frame to go with the faulting PC. Using caller SP that is still in SP, and caller PC
|
||||||
|
// that was written to O7 at call.
|
||||||
|
intptr_t* sp = os::Solaris::ucontext_get_sp(uc);
|
||||||
|
address pc = (address)uc->uc_mcontext.gregs[REG_O7];
|
||||||
|
*fr = frame(sp, frame::unpatchable, pc);
|
||||||
|
|
||||||
if (!fr->is_java_frame()) {
|
if (!fr->is_java_frame()) {
|
||||||
assert(fr->safe_for_sender(thread), "Safety check");
|
assert(fr->safe_for_sender(thread), "Safety check");
|
||||||
*fr = fr->java_sender();
|
*fr = fr->java_sender();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user