--- old/src/share/vm/utilities/vmError.cpp 2014-02-27 16:32:37.000000000 -0800 +++ new/src/share/vm/utilities/vmError.cpp 2014-02-27 16:32:36.000000000 -0800 @@ -590,15 +590,17 @@ while (count++ < StackPrintLimit) { fr.print_on_error(st, buf, sizeof(buf)); st->cr(); + // Catch very first native frame by using stack address. + if (!_thread->on_local_stack((address)(fr.sp() + 4))) break; + // 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; + } else { + fr = os::get_sender_for_C_frame(&fr); } - if (os::is_first_C_frame(&fr)) break; - fr = os::get_sender_for_C_frame(&fr); } if (count > StackPrintLimit) {