src/share/vm/utilities/vmError.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
8035983 Cdiff src/share/vm/utilities/vmError.cpp
src/share/vm/utilities/vmError.cpp
Print this page
*** 590,607 ****
while (count++ < StackPrintLimit) {
fr.print_on_error(st, buf, sizeof(buf));
st->cr();
// Compiled code may use EBP register on x86 so it looks like
// non-walkable C frame. Use frame.sender() for java frames.
! if (_thread && _thread->is_Java_thread() && fr.is_java_frame()) {
RegisterMap map((JavaThread*)_thread, false); // No update
fr = fr.sender(&map);
! continue;
}
if (os::is_first_C_frame(&fr)) break;
fr = os::get_sender_for_C_frame(&fr);
}
if (count > StackPrintLimit) {
st->print_cr("...<more frames>...");
}
--- 590,617 ----
while (count++ < StackPrintLimit) {
fr.print_on_error(st, buf, sizeof(buf));
st->cr();
// Compiled code may use EBP register on x86 so it looks like
// non-walkable C frame. Use frame.sender() for java frames.
! if (_thread && _thread->is_Java_thread()) {
! // Catch very first native frame by using stack address.
! // For JavaThread stack_base and stack_size should be set.
! if (!_thread->on_local_stack((address)(fr.sender_sp() + 1)))
! break;
! if (fr.is_java_frame()) {
RegisterMap map((JavaThread*)_thread, false); // No update
fr = fr.sender(&map);
! } else {
! fr = os::get_sender_for_C_frame(&fr);
}
+ } else {
+ // is_first_C_frame() does only simple checks for frame pointer,
+ // it will pass if java compiled code has a pointer in EBP.
if (os::is_first_C_frame(&fr)) break;
fr = os::get_sender_for_C_frame(&fr);
}
+ }
if (count > StackPrintLimit) {
st->print_cr("...<more frames>...");
}
src/share/vm/utilities/vmError.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File