32 // This function should match SharkStack::CreateStackOverflowCheck 33 inline void ZeroStack::overflow_check(int required_words, TRAPS) { 34 // Check the Zero stack 35 if (available_words() < required_words) { 36 handle_overflow(THREAD); 37 return; 38 } 39 40 // Check the ABI stack 41 if (abi_stack_available(THREAD) < 0) { 42 handle_overflow(THREAD); 43 return; 44 } 45 } 46 47 // This method returns the amount of ABI stack available for us 48 // to use under normal circumstances. Note that the returned 49 // value can be negative. 50 inline int ZeroStack::abi_stack_available(Thread *thread) const { 51 guarantee(Thread::current() == thread, "should run in the same thread"); 52 assert(thread->stack_size() - 53 (thread->stack_base() - (address) &stack_used + 54 JavaThread::stack_guard_zone_size() + JavaThread::stack_shadow_zone_size()) == 55 (address)&stack_used - thread->stack_overflow_limit(), "sanity"); 56 return (address)&stack_used - stack_overflow_limit(); 57 } 58 59 #endif // CPU_ZERO_VM_STACK_ZERO_INLINE_HPP | 32 // This function should match SharkStack::CreateStackOverflowCheck 33 inline void ZeroStack::overflow_check(int required_words, TRAPS) { 34 // Check the Zero stack 35 if (available_words() < required_words) { 36 handle_overflow(THREAD); 37 return; 38 } 39 40 // Check the ABI stack 41 if (abi_stack_available(THREAD) < 0) { 42 handle_overflow(THREAD); 43 return; 44 } 45 } 46 47 // This method returns the amount of ABI stack available for us 48 // to use under normal circumstances. Note that the returned 49 // value can be negative. 50 inline int ZeroStack::abi_stack_available(Thread *thread) const { 51 guarantee(Thread::current() == thread, "should run in the same thread"); 52 int stack_used = thread->stack_base() - (address) &stack_used 53 + (JavaThread::stack_guard_zone_size() + JavaThread::stack_shadow_zone_size()); 54 int stack_free = thread->stack_size() - stack_used; 55 return stack_free; 56 } 57 58 #endif // CPU_ZERO_VM_STACK_ZERO_INLINE_HPP |