< prev index next >

src/cpu/x86/vm/frame_x86.cpp

Print this page




 663 }
 664 
 665 intptr_t* frame::real_fp() const {
 666   if (_cb != NULL) {
 667     // use the frame size if valid
 668     int size = _cb->frame_size();
 669     if (size > 0) {
 670       return unextended_sp() + size;
 671     }
 672   }
 673   // else rely on fp()
 674   assert(! is_compiled_frame(), "unknown compiled frame size");
 675   return fp();
 676 }
 677 
 678 #ifndef PRODUCT
 679 // This is a generic constructor which is only used by pns() in debug.cpp.
 680 frame::frame(void* sp, void* fp, void* pc) {
 681   init((intptr_t*)sp, (intptr_t*)fp, (address)pc);
 682 }



 683 #endif
 684 
 685 void JavaFrameAnchor::make_walkable(JavaThread* thread) {
 686   // last frame set?
 687   if (last_Java_sp() == NULL) return;
 688   // already walkable?
 689   if (walkable()) return;
 690   vmassert(Thread::current() == (Thread*)thread, "not current thread");
 691   vmassert(last_Java_sp() != NULL, "not called from Java code?");
 692   vmassert(last_Java_pc() == NULL, "already walkable");
 693   capture_last_Java_pc();
 694   vmassert(walkable(), "something went wrong");
 695 }
 696 
 697 void JavaFrameAnchor::capture_last_Java_pc() {
 698   vmassert(_last_Java_sp != NULL, "no last frame set");
 699   vmassert(_last_Java_pc == NULL, "already walkable");
 700   _last_Java_pc = (address)_last_Java_sp[-1];
 701 }


 663 }
 664 
 665 intptr_t* frame::real_fp() const {
 666   if (_cb != NULL) {
 667     // use the frame size if valid
 668     int size = _cb->frame_size();
 669     if (size > 0) {
 670       return unextended_sp() + size;
 671     }
 672   }
 673   // else rely on fp()
 674   assert(! is_compiled_frame(), "unknown compiled frame size");
 675   return fp();
 676 }
 677 
 678 #ifndef PRODUCT
 679 // This is a generic constructor which is only used by pns() in debug.cpp.
 680 frame::frame(void* sp, void* fp, void* pc) {
 681   init((intptr_t*)sp, (intptr_t*)fp, (address)pc);
 682 }
 683 
 684 void frame::pd_ps() {}
 685 
 686 #endif
 687 
 688 void JavaFrameAnchor::make_walkable(JavaThread* thread) {
 689   // last frame set?
 690   if (last_Java_sp() == NULL) return;
 691   // already walkable?
 692   if (walkable()) return;
 693   vmassert(Thread::current() == (Thread*)thread, "not current thread");
 694   vmassert(last_Java_sp() != NULL, "not called from Java code?");
 695   vmassert(last_Java_pc() == NULL, "already walkable");
 696   capture_last_Java_pc();
 697   vmassert(walkable(), "something went wrong");
 698 }
 699 
 700 void JavaFrameAnchor::capture_last_Java_pc() {
 701   vmassert(_last_Java_sp != NULL, "no last frame set");
 702   vmassert(_last_Java_pc == NULL, "already walkable");
 703   _last_Java_pc = (address)_last_Java_sp[-1];
 704 }
< prev index next >