23
23
// number of stacks to always keep available per pool
24
24
#define MIN_STACK_MAPPINGS_PER_POOL 5
25
25
26
- #if defined(_OS_WINDOWS_ ) || (!defined(_OS_OPENBSD_ ) && !defined(JL_HAVE_UCONTEXT ) && !defined(JL_HAVE_SIGALTSTACK ))
27
- #define JL_USE_GUARD_PAGE 1
28
26
const size_t jl_guard_size = (4096 * 8 );
29
- #else
30
- const size_t jl_guard_size = 0 ;
31
- #endif
32
-
33
27
static _Atomic (uint32_t ) num_stack_mappings = 0 ;
34
28
35
29
#ifdef _OS_WINDOWS_
36
30
#define MAP_FAILED NULL
37
31
static void * malloc_stack (size_t bufsz ) JL_NOTSAFEPOINT
38
32
{
39
- size_t guard_size = LLT_ALIGN (jl_guard_size , jl_page_size );
40
- bufsz += guard_size ;
41
-
42
33
void * stk = VirtualAlloc (NULL , bufsz , MEM_RESERVE | MEM_COMMIT , PAGE_READWRITE );
43
34
if (stk == NULL )
44
35
return MAP_FAILED ;
@@ -49,7 +40,6 @@ static void *malloc_stack(size_t bufsz) JL_NOTSAFEPOINT
49
40
VirtualFree (stk , 0 , MEM_RELEASE );
50
41
return MAP_FAILED ;
51
42
}
52
- stk = (char * )stk + guard_size ;
53
43
54
44
jl_atomic_fetch_add_relaxed (& num_stack_mappings , 1 );
55
45
return stk ;
@@ -58,12 +48,6 @@ static void *malloc_stack(size_t bufsz) JL_NOTSAFEPOINT
58
48
59
49
static void free_stack (void * stkbuf , size_t bufsz ) JL_NOTSAFEPOINT
60
50
{
61
- #ifdef JL_USE_GUARD_PAGE
62
- size_t guard_size = LLT_ALIGN (jl_guard_size , jl_page_size );
63
- bufsz += guard_size ;
64
- stkbuf = (char * )stkbuf - guard_size ;
65
- #endif
66
-
67
51
VirtualFree (stkbuf , 0 , MEM_RELEASE );
68
52
jl_atomic_fetch_add_relaxed (& num_stack_mappings , -1 );
69
53
}
@@ -89,22 +73,16 @@ static void *malloc_stack(size_t bufsz) JL_NOTSAFEPOINT
89
73
# else
90
74
static void * malloc_stack (size_t bufsz ) JL_NOTSAFEPOINT
91
75
{
92
- #ifdef JL_USE_GUARD_PAGE
93
- size_t guard_size = LLT_ALIGN (jl_guard_size , jl_page_size );
94
- bufsz += guard_size ;
95
- #endif
96
-
97
76
void * stk = mmap (0 , bufsz , PROT_READ | PROT_WRITE , MAP_PRIVATE | MAP_ANONYMOUS , -1 , 0 );
98
77
if (stk == MAP_FAILED )
99
78
return MAP_FAILED ;
100
79
101
- #ifdef JL_USE_GUARD_PAGE
80
+ #if !defined( JL_HAVE_UCONTEXT ) && !defined( JL_HAVE_SIGALTSTACK )
102
81
// set up a guard page to detect stack overflow
103
82
if (mprotect (stk , jl_guard_size , PROT_NONE ) == -1 ) {
104
83
munmap (stk , bufsz );
105
84
return MAP_FAILED ;
106
85
}
107
- stk = (char * )stk + guard_size ;
108
86
#endif
109
87
110
88
jl_atomic_fetch_add_relaxed (& num_stack_mappings , 1 );
@@ -114,12 +92,6 @@ static void *malloc_stack(size_t bufsz) JL_NOTSAFEPOINT
114
92
115
93
static void free_stack (void * stkbuf , size_t bufsz ) JL_NOTSAFEPOINT
116
94
{
117
- #ifdef JL_USE_GUARD_PAGE
118
- size_t guard_size = LLT_ALIGN (jl_guard_size , jl_page_size );
119
- bufsz += guard_size ;
120
- stkbuf = (char * )stkbuf - guard_size ;
121
- #endif
122
-
123
95
munmap (stkbuf , bufsz );
124
96
jl_atomic_fetch_add_relaxed (& num_stack_mappings , -1 );
125
97
}
0 commit comments