1 |
diff --git a/src/cpu/zero/vm/stack_zero.hpp b/src/cpu/zero/vm/stack_zero.hpp |
2 |
--- jdk8/hotspot/src/cpu/zero/vm/stack_zero.hpp |
3 |
+++ jdk8/hotspot/src/cpu/zero/vm/stack_zero.hpp |
4 |
@@ -99,7 +99,7 @@ |
5 |
int shadow_pages_size() const { |
6 |
return _shadow_pages_size; |
7 |
} |
8 |
- int abi_stack_available(Thread *thread) const; |
9 |
+ ssize_t abi_stack_available(Thread *thread) const; |
10 |
|
11 |
public: |
12 |
void overflow_check(int required_words, TRAPS); |
13 |
diff --git a/src/cpu/zero/vm/stack_zero.inline.hpp b/src/cpu/zero/vm/stack_zero.inline.hpp |
14 |
--- jdk8/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp |
15 |
+++ jdk8/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp |
16 |
@@ -47,10 +47,11 @@ |
17 |
// This method returns the amount of ABI stack available for us |
18 |
// to use under normal circumstances. Note that the returned |
19 |
// value can be negative. |
20 |
-inline int ZeroStack::abi_stack_available(Thread *thread) const { |
21 |
- int stack_used = thread->stack_base() - (address) &stack_used; |
22 |
- int stack_free = thread->stack_size() - stack_used; |
23 |
- return stack_free - shadow_pages_size(); |
24 |
+inline ssize_t ZeroStack::abi_stack_available(Thread *thread) const { |
25 |
+ ssize_t stack_used = thread->stack_base() - (address) &stack_used |
26 |
+ + (StackYellowPages+StackRedPages+StackShadowPages) * os::vm_page_size(); |
27 |
+ ssize_t stack_free = thread->stack_size() - stack_used; |
28 |
+ return stack_free; |
29 |
} |
30 |
|
31 |
#endif // CPU_ZERO_VM_STACK_ZERO_INLINE_HPP |
32 |
diff --git a/src/os/linux/vm/os_linux.cpp b/src/os/linux/vm/os_linux.cpp |
33 |
--- jdk8/hotspot/src/os/linux/vm/os_linux.cpp |
34 |
+++ jdk8/hotspot/src/os/linux/vm/os_linux.cpp |
35 |
@@ -4700,6 +4700,13 @@ |
36 |
os::Linux::min_stack_allowed = MAX2(os::Linux::min_stack_allowed, |
37 |
(size_t)(StackYellowPages+StackRedPages+StackShadowPages) * Linux::page_size() + |
38 |
(2*BytesPerWord COMPILER2_PRESENT(+1)) * Linux::vm_default_page_size()); |
39 |
+#ifdef ZERO |
40 |
+ // If this is Zero, allow at the very minimum one page each for the |
41 |
+ // Zero stack and the native stack. This won't make any difference |
42 |
+ // for 4k pages, but is significant for large pages. |
43 |
+ os::Linux::min_stack_allowed = MAX2(os::Linux::min_stack_allowed, |
44 |
+ (size_t)(StackYellowPages+StackRedPages+StackShadowPages+2) * Linux::page_size()); |
45 |
+#endif |
46 |
|
47 |
size_t threadStackSizeInBytes = ThreadStackSize * K; |
48 |
if (threadStackSizeInBytes != 0 && |