686 DESCRIBE_FP_OFFSET(link);
687 DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp);
688 DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
689 DESCRIBE_FP_OFFSET(interpreter_frame_method);
690 DESCRIBE_FP_OFFSET(interpreter_frame_mdp);
691 DESCRIBE_FP_OFFSET(interpreter_frame_extended_sp);
692 DESCRIBE_FP_OFFSET(interpreter_frame_mirror);
693 DESCRIBE_FP_OFFSET(interpreter_frame_cache);
694 DESCRIBE_FP_OFFSET(interpreter_frame_locals);
695 DESCRIBE_FP_OFFSET(interpreter_frame_bcp);
696 DESCRIBE_FP_OFFSET(interpreter_frame_initial_sp);
697 uintptr_t *p = (uintptr_t *)fp;
698
699 // We want to see all frames, native and Java. For compiled and
700 // interpreted frames we have special information that allows us to
701 // unwind them; for everything else we assume that the native frame
702 // pointer chain is intact.
703 frame this_frame((intptr_t*)sp, (intptr_t*)fp, (address)pc);
704 if (this_frame.is_compiled_frame() ||
705 this_frame.is_interpreted_frame()) {
706 frame sender = this_frame.sender(reg_map);
707 nextfp = (uintptr_t)sender.fp();
708 nextpc = (uintptr_t)sender.pc();
709 nextsp = (uintptr_t)sender.unextended_sp();
710 } else {
711 nextfp = p[frame::link_offset];
712 nextpc = p[frame::return_addr_offset];
713 nextsp = (uintptr_t)&p[frame::sender_sp_offset];
714 }
715
716 if (bcx == -1ULL)
717 bcx = p[frame::interpreter_frame_bcp_offset];
718
719 if (Interpreter::contains((address)pc)) {
720 Method* m = (Method*)p[frame::interpreter_frame_method_offset];
721 if(m && m->is_method()) {
722 printbc(m, bcx);
723 } else
724 printf("not a Method\n");
725 } else {
726 CodeBlob *cb = CodeCache::find_blob((address)pc);
|
686 DESCRIBE_FP_OFFSET(link);
687 DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp);
688 DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
689 DESCRIBE_FP_OFFSET(interpreter_frame_method);
690 DESCRIBE_FP_OFFSET(interpreter_frame_mdp);
691 DESCRIBE_FP_OFFSET(interpreter_frame_extended_sp);
692 DESCRIBE_FP_OFFSET(interpreter_frame_mirror);
693 DESCRIBE_FP_OFFSET(interpreter_frame_cache);
694 DESCRIBE_FP_OFFSET(interpreter_frame_locals);
695 DESCRIBE_FP_OFFSET(interpreter_frame_bcp);
696 DESCRIBE_FP_OFFSET(interpreter_frame_initial_sp);
697 uintptr_t *p = (uintptr_t *)fp;
698
699 // We want to see all frames, native and Java. For compiled and
700 // interpreted frames we have special information that allows us to
701 // unwind them; for everything else we assume that the native frame
702 // pointer chain is intact.
703 frame this_frame((intptr_t*)sp, (intptr_t*)fp, (address)pc);
704 if (this_frame.is_compiled_frame() ||
705 this_frame.is_interpreted_frame()) {
706 frame sender = this_frame.sender_raw(reg_map);
707 nextfp = (uintptr_t)sender.fp();
708 nextpc = (uintptr_t)sender.pc();
709 nextsp = (uintptr_t)sender.unextended_sp();
710 } else {
711 nextfp = p[frame::link_offset];
712 nextpc = p[frame::return_addr_offset];
713 nextsp = (uintptr_t)&p[frame::sender_sp_offset];
714 }
715
716 if (bcx == -1ULL)
717 bcx = p[frame::interpreter_frame_bcp_offset];
718
719 if (Interpreter::contains((address)pc)) {
720 Method* m = (Method*)p[frame::interpreter_frame_method_offset];
721 if(m && m->is_method()) {
722 printbc(m, bcx);
723 } else
724 printf("not a Method\n");
725 } else {
726 CodeBlob *cb = CodeCache::find_blob((address)pc);
|