src/share/vm/utilities/vmError.cpp

Print this page
rev 7023 : 8058345: Refactor native stack printing from vmError.cpp to debug.cpp to make it available in gdb as well

*** 583,629 **** // Windows/x64 needs special handling. } else { frame fr = _context ? os::fetch_frame_from_context(_context) : os::current_frame(); ! // see if it's a valid frame ! if (fr.pc()) { ! st->print_cr("Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)"); ! ! ! int count = 0; ! 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>..."); ! } ! ! st->cr(); ! } } } STEP(130, "(printing Java stack)" ) --- 583,593 ---- // Windows/x64 needs special handling. } else { frame fr = _context ? os::fetch_frame_from_context(_context) : os::current_frame(); ! print_native_stack(st, fr, _thread, buf, sizeof(buf)); } } STEP(130, "(printing Java stack)" )