< prev index next >
src/cpu/sparc/vm/frame_sparc.cpp
Print this page
*** 783,787 ****
--- 783,837 ----
intptr_t *frame::initial_deoptimization_info() {
// unused... but returns fp() to minimize changes introduced by 7087445
return fp();
}
+
+ #ifndef PRODUCT
+ extern "C" void findpc(int x);
+
+ void frame::pd_ps() {
+ intptr_t* curr_sp = sp();
+ intptr_t* prev_sp = curr_sp - 1;
+ intptr_t *pc = NULL;
+ intptr_t *next_pc = NULL;
+ int count = 0;
+ tty->print_cr("register window backtrace from " INTPTR_FORMAT ":", p2i(curr_sp));
+ while (curr_sp != NULL && ((intptr_t)curr_sp & 7) == 0 && curr_sp > prev_sp && curr_sp < prev_sp+1000) {
+ pc = next_pc;
+ next_pc = (intptr_t*) curr_sp[I7->sp_offset_in_saved_window()];
+ tty->print("[%d] curr_sp=" INTPTR_FORMAT " pc=", count, p2i(curr_sp));
+ findpc((intptr_t)pc);
+ if (WizardMode && Verbose) {
+ // print register window contents also
+ tty->print_cr(" L0..L7: {"
+ INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " "
+ INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " ",
+ curr_sp[0+0], curr_sp[0+1], curr_sp[0+2], curr_sp[0+3],
+ curr_sp[0+4], curr_sp[0+5], curr_sp[0+6], curr_sp[0+7]);
+ tty->print_cr(" I0..I7: {"
+ INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " "
+ INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " " INTPTR_FORMAT " ",
+ curr_sp[8+0], curr_sp[8+1], curr_sp[8+2], curr_sp[8+3],
+ curr_sp[8+4], curr_sp[8+5], curr_sp[8+6], curr_sp[8+7]);
+ // (and print stack frame contents too??)
+
+ CodeBlob *b = CodeCache::find_blob((address) pc);
+ if (b != NULL) {
+ if (b->is_nmethod()) {
+ Method* m = ((nmethod*)b)->method();
+ int nlocals = m->max_locals();
+ int nparams = m->size_of_parameters();
+ tty->print_cr("compiled java method (locals = %d, params = %d)", nlocals, nparams);
+ }
+ }
+ }
+ prev_sp = curr_sp;
+ curr_sp = (intptr_t *)curr_sp[FP->sp_offset_in_saved_window()];
+ curr_sp = (intptr_t *)((intptr_t)curr_sp + STACK_BIAS);
+ count += 1;
+ }
+ if (curr_sp != NULL)
+ tty->print("[%d] curr_sp=" INTPTR_FORMAT " [bogus sp!]", count, p2i(curr_sp));
+ }
+
+ #endif // PRODUCT
< prev index next >