768 } 769 } 770 771 if (!is_compiled_frame()) { 772 if (frame::callee_aggregate_return_pointer_words != 0) { 773 values.describe(frame_no, sp() + frame::callee_aggregate_return_pointer_sp_offset, "callee_aggregate_return_pointer_word"); 774 } 775 for (int w = 0; w < frame::callee_register_argument_save_area_words; w++) { 776 values.describe(frame_no, sp() + frame::callee_register_argument_save_area_sp_offset + w, 777 err_msg("callee_register_argument_save_area_words %d", w)); 778 } 779 } 780 } 781 782 #endif 783 784 intptr_t *frame::initial_deoptimization_info() { 785 // unused... but returns fp() to minimize changes introduced by 7087445 786 return fp(); 787 } | 768 } 769 } 770 771 if (!is_compiled_frame()) { 772 if (frame::callee_aggregate_return_pointer_words != 0) { 773 values.describe(frame_no, sp() + frame::callee_aggregate_return_pointer_sp_offset, "callee_aggregate_return_pointer_word"); 774 } 775 for (int w = 0; w < frame::callee_register_argument_save_area_words; w++) { 776 values.describe(frame_no, sp() + frame::callee_register_argument_save_area_sp_offset + w, 777 err_msg("callee_register_argument_save_area_words %d", w)); 778 } 779 } 780 } 781 782 #endif 783 784 intptr_t *frame::initial_deoptimization_info() { 785 // unused... but returns fp() to minimize changes introduced by 7087445 786 return fp(); 787 } 788 789 #ifndef PRODUCT 790 extern "C" void findpc(int x); 791 792 void frame::pd_ps() { 793 intptr_t* curr_sp = sp(); 794 intptr_t* prev_sp = curr_sp - 1; 795 intptr_t *pc = NULL; 796 intptr_t *next_pc = NULL; 797 int count = 0; 798 tty->print_cr("register window backtrace from " INTPTR_FORMAT ":", p2i(curr_sp)); 799 while (curr_sp != NULL && ((intptr_t)curr_sp & 7) == 0 && curr_sp > prev_sp && curr_sp < prev_sp+1000) { 800 pc = next_pc; 801 next_pc = (intptr_t*) curr_sp[I7->sp_offset_in_saved_window()]; 802 tty->print("[%d] curr_sp=" INTPTR_FORMAT " pc=", count, p2i(curr_sp)); 803 findpc((intptr_t)pc); 804 if (WizardMode && Verbose) { 805 // print register window contents also 806 tty->print_cr(" L0..L7: {" 807 INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " 808 INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " ", 809 curr_sp[0+0], curr_sp[0+1], curr_sp[0+2], curr_sp[0+3], 810 curr_sp[0+4], curr_sp[0+5], curr_sp[0+6], curr_sp[0+7]); 811 tty->print_cr(" I0..I7: {" 812 INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " 813 INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " ", 814 curr_sp[8+0], curr_sp[8+1], curr_sp[8+2], curr_sp[8+3], 815 curr_sp[8+4], curr_sp[8+5], curr_sp[8+6], curr_sp[8+7]); 816 // (and print stack frame contents too??) 817 818 CodeBlob *b = CodeCache::find_blob((address) pc); 819 if (b != NULL) { 820 if (b->is_nmethod()) { 821 Method* m = ((nmethod*)b)->method(); 822 int nlocals = m->max_locals(); 823 int nparams = m->size_of_parameters(); 824 tty->print_cr("compiled java method (locals = %d, params = %d)", nlocals, nparams); 825 } 826 } 827 } 828 prev_sp = curr_sp; 829 curr_sp = (intptr_t *)curr_sp[FP->sp_offset_in_saved_window()]; 830 curr_sp = (intptr_t *)((intptr_t)curr_sp + STACK_BIAS); 831 count += 1; 832 } 833 if (curr_sp != NULL) 834 tty->print("[%d] curr_sp=" INTPTR_FORMAT " [bogus sp!]", count, p2i(curr_sp)); 835 } 836 837 #endif // PRODUCT |