comparison src/share/vm/utilities/vmError.cpp @ 12355:cefad50507d8

Merge with hs25-b53
author Gilles Duboscq <duboscq@ssw.jku.at>
date Fri, 11 Oct 2013 10:38:03 +0200
parents 6b0fd0964b87 38f750491293
children 096c224171c4
comparison
equal deleted inserted replaced
12058:ccb4f2af2319 12355:cefad50507d8
572 } 572 }
573 573
574 STEP(120, "(printing native stack)" ) 574 STEP(120, "(printing native stack)" )
575 575
576 if (_verbose) { 576 if (_verbose) {
577 if (os::platform_print_native_stack(st, _context, buf, sizeof(buf))) {
578 // We have printed the native stack in platform-specific code
579 // Windows/x64 needs special handling.
580 } else {
577 frame fr = _context ? os::fetch_frame_from_context(_context) 581 frame fr = _context ? os::fetch_frame_from_context(_context)
578 : os::current_frame(); 582 : os::current_frame();
579 583
580 // see if it's a valid frame 584 // see if it's a valid frame
581 if (fr.pc()) { 585 if (fr.pc()) {
584 588
585 int count = 0; 589 int count = 0;
586 while (count++ < StackPrintLimit) { 590 while (count++ < StackPrintLimit) {
587 fr.print_on_error(st, buf, sizeof(buf)); 591 fr.print_on_error(st, buf, sizeof(buf));
588 st->cr(); 592 st->cr();
593 // Compiled code may use EBP register on x86 so it looks like
594 // non-walkable C frame. Use frame.sender() for java frames.
595 if (_thread && _thread->is_Java_thread() && fr.is_java_frame()) {
596 RegisterMap map((JavaThread*)_thread, false); // No update
597 fr = fr.sender(&map);
598 continue;
599 }
589 if (os::is_first_C_frame(&fr)) break; 600 if (os::is_first_C_frame(&fr)) break;
590 fr = os::get_sender_for_C_frame(&fr); 601 fr = os::get_sender_for_C_frame(&fr);
591 } 602 }
592 603
593 if (count > StackPrintLimit) { 604 if (count > StackPrintLimit) {
595 } 606 }
596 607
597 st->cr(); 608 st->cr();
598 } 609 }
599 } 610 }
611 }
600 612
601 STEP(130, "(printing Java stack)" ) 613 STEP(130, "(printing Java stack)" )
602 614
603 if (_verbose && _thread && _thread->is_Java_thread()) { 615 if (_verbose && _thread && _thread->is_Java_thread()) {
604 print_stack_trace(st, (JavaThread*)_thread, buf, sizeof(buf)); 616 print_stack_trace(st, (JavaThread*)_thread, buf, sizeof(buf));