Mercurial > hg > truffle
comparison src/share/vm/utilities/vmError.cpp @ 14702:d4dd5204c0aa
Merge
author | ehelin |
---|---|
date | Fri, 14 Mar 2014 13:27:18 +0100 |
parents | e0365e7b7454 |
children | b51e29501f30 78bbf4d43a14 364b73402247 |
comparison
equal
deleted
inserted
replaced
14701:d3ef21095134 | 14702:d4dd5204c0aa |
---|---|
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 } |