< prev index next >

src/cpu/sparc/vm/frame_sparc.cpp

Print this page




 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
< prev index next >