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 } |