src/share/vm/utilities/vmError.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/utilities/vmError.cpp Thu Feb 27 18:36:55 2014
--- new/src/share/vm/utilities/vmError.cpp Thu Feb 27 18:36:55 2014
*** 590,607 ****
--- 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() && fr.is_java_frame()) {
+ // 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.sp() + 4)))
+ break;
+ if (fr.is_java_frame()) {
RegisterMap map((JavaThread*)_thread, false); // No update
fr = fr.sender(&map);
continue;
+ } 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