comparison src/share/vm/utilities/vmError.cpp @ 14704:b51e29501f30

Merged with jdk9/dev/hotspot changeset 9486a41de3b7
author twisti
date Tue, 18 Mar 2014 20:19:10 -0700
parents d8041d695d19 e0365e7b7454
children 92aa6797d639
comparison
equal deleted inserted replaced
14647:8f483e200405 14704:b51e29501f30
590 while (count++ < StackPrintLimit) { 590 while (count++ < StackPrintLimit) {
591 fr.print_on_error(st, buf, sizeof(buf)); 591 fr.print_on_error(st, buf, sizeof(buf));
592 st->cr(); 592 st->cr();
593 // Compiled code may use EBP register on x86 so it looks like 593 // Compiled code may use EBP register on x86 so it looks like
594 // non-walkable C frame. Use frame.sender() for java frames. 594 // non-walkable C frame. Use frame.sender() for java frames.
595 if (_thread && _thread->is_Java_thread() && fr.is_java_frame()) { 595 if (_thread && _thread->is_Java_thread()) {
596 RegisterMap map((JavaThread*)_thread, false); // No update 596 // Catch very first native frame by using stack address.
597 fr = fr.sender(&map); 597 // For JavaThread stack_base and stack_size should be set.
598 continue; 598 if (!_thread->on_local_stack((address)(fr.sender_sp() + 1))) {
599 break;
600 }
601 if (fr.is_java_frame()) {
602 RegisterMap map((JavaThread*)_thread, false); // No update
603 fr = fr.sender(&map);
604 } else {
605 fr = os::get_sender_for_C_frame(&fr);
606 }
607 } else {
608 // is_first_C_frame() does only simple checks for frame pointer,
609 // it will pass if java compiled code has a pointer in EBP.
610 if (os::is_first_C_frame(&fr)) break;
611 fr = os::get_sender_for_C_frame(&fr);
599 } 612 }
600 if (os::is_first_C_frame(&fr)) break;
601 fr = os::get_sender_for_C_frame(&fr);
602 } 613 }
603 614
604 if (count > StackPrintLimit) { 615 if (count > StackPrintLimit) {
605 st->print_cr("...<more frames>..."); 616 st->print_cr("...<more frames>...");
606 } 617 }