comparison src/cpu/zero/vm/stack_zero.inline.hpp @ 1511:348346af6676

6950178: Zero stack improvements Summary: Moves the logic for determining the size of the Zero stack into the ZeroStack class. Reviewed-by: twisti Contributed-by: Gary Benson <gbenson@redhat.com>
author twisti
date Thu, 06 May 2010 02:09:18 -0700
parents aa9c266de52a
children c18cbe5936b8
comparison
equal deleted inserted replaced
1510:d6e880569997 1511:348346af6676
23 * 23 *
24 */ 24 */
25 25
26 // This function should match SharkStack::CreateStackOverflowCheck 26 // This function should match SharkStack::CreateStackOverflowCheck
27 inline void ZeroStack::overflow_check(int required_words, TRAPS) { 27 inline void ZeroStack::overflow_check(int required_words, TRAPS) {
28 JavaThread *thread = (JavaThread *) THREAD;
29
30 // Check the Zero stack 28 // Check the Zero stack
31 if (required_words > available_words()) { 29 if (available_words() < required_words) {
32 handle_overflow(THREAD); 30 handle_overflow(THREAD);
33 return; 31 return;
34 } 32 }
35 33
36 // Check the ABI stack 34 // Check the ABI stack
37 address stack_top = thread->stack_base() - thread->stack_size(); 35 if (abi_stack_available(THREAD) < 0) {
38 int free_stack = ((address) &stack_top) - stack_top;
39 if (free_stack < shadow_pages_size()) {
40 handle_overflow(THREAD); 36 handle_overflow(THREAD);
41 return; 37 return;
42 } 38 }
43 } 39 }
40
41 // This method returns the amount of ABI stack available for us
42 // to use under normal circumstances. Note that the returned
43 // value can be negative.
44 inline int ZeroStack::abi_stack_available(Thread *thread) const {
45 int stack_used = thread->stack_base() - (address) &stack_used;
46 int stack_free = thread->stack_size() - stack_used;
47 return stack_free - shadow_pages_size();
48 }