< prev index next >

src/hotspot/cpu/aarch64/frame_aarch64.cpp

Print this page

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