731 os::print_siginfo(st, _siginfo);
732 st->cr();
733 }
734
735 STEP("CDS archive access warning")
736
737 // Print an explicit hint if we crashed on access to the CDS archive.
738 if (_verbose && _siginfo) {
739 check_failing_cds_access(st, _siginfo);
740 st->cr();
741 }
742
743 STEP("printing register info")
744
745 // decode register contents if possible
746 if (_verbose && _context && Universe::is_fully_initialized()) {
747 os::print_register_info(st, _context);
748 st->cr();
749 }
750
751 STEP("printing registers, top of stack, instructions near pc")
752
753 // registers, top of stack, instructions near pc
754 if (_verbose && _context) {
755 os::print_context(st, _context);
756 st->cr();
757 }
758
759 STEP("printing code blob if possible")
760
761 if (_verbose && _context) {
762 CodeBlob* cb = CodeCache::find_blob(_pc);
763 if (cb != NULL) {
764 if (Interpreter::contains(_pc)) {
765 // The interpreter CodeBlob is very large so try to print the codelet instead.
766 InterpreterCodelet* codelet = Interpreter::codelet_containing(_pc);
767 if (codelet != NULL) {
768 codelet->print_on(st);
769 Disassembler::decode(codelet->code_begin(), codelet->code_end(), st);
770 }
|
731 os::print_siginfo(st, _siginfo);
732 st->cr();
733 }
734
735 STEP("CDS archive access warning")
736
737 // Print an explicit hint if we crashed on access to the CDS archive.
738 if (_verbose && _siginfo) {
739 check_failing_cds_access(st, _siginfo);
740 st->cr();
741 }
742
743 STEP("printing register info")
744
745 // decode register contents if possible
746 if (_verbose && _context && Universe::is_fully_initialized()) {
747 os::print_register_info(st, _context);
748 st->cr();
749 }
750
751 STEP("printing top of stack info")
752
753 // decode stack contents if possible
754 if (_verbose && _context && Universe::is_fully_initialized()) {
755 frame fr = os::fetch_frame_from_context(_context);
756 const int slots = 8;
757 const intptr_t *start = fr.sp();
758 const intptr_t *end = start + slots;
759 if (is_aligned(start, sizeof(intptr_t)) && os::is_readable_range(start, end)) {
760 st->print_cr("Stack slot to memory mapping:");
761 for (int i = 0; i < slots; ++i) {
762 st->print("stack at sp + %d slots: ", i);
763 os::print_location(st, *(start + i));
764 }
765 }
766 st->cr();
767 }
768
769 STEP("printing registers, top of stack, instructions near pc")
770
771 // registers, top of stack, instructions near pc
772 if (_verbose && _context) {
773 os::print_context(st, _context);
774 st->cr();
775 }
776
777 STEP("printing code blob if possible")
778
779 if (_verbose && _context) {
780 CodeBlob* cb = CodeCache::find_blob(_pc);
781 if (cb != NULL) {
782 if (Interpreter::contains(_pc)) {
783 // The interpreter CodeBlob is very large so try to print the codelet instead.
784 InterpreterCodelet* codelet = Interpreter::codelet_containing(_pc);
785 if (codelet != NULL) {
786 codelet->print_on(st);
787 Disassembler::decode(codelet->code_begin(), codelet->code_end(), st);
788 }
|