1 /* Copyright (C) 2010,2016 Matthew Fluet.
2 * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh
3 * Jagannathan, and Stephen Weeks.
4 * Copyright (C) 1997-2000 NEC Research Institute.
6 * MLton is released under a BSD-style license.
7 * See the file MLton-LICENSE for details.
10 #if not HAS_SIGALTSTACK
12 void initSignalStack (__attribute__ ((unused
)) GC_state s
) {
17 void initSignalStack (GC_state s
) {
18 static bool init
= FALSE
;
19 static stack_t altstack
;
23 size_t ss_size
= align (SIGSTKSZ
, s
->sysvals
.pageSize
);
24 size_t psize
= s
->sysvals
.pageSize
;
25 int prot
= PROT_READ
| PROT_WRITE
;
26 #if NEEDS_SIGALTSTACK_EXEC
27 prot
= prot
| PROT_EXEC
;
29 void *ss_sp
= GC_mmapAnon_safe_protect (NULL
, 2 * ss_size
, prot
, psize
, psize
);
30 altstack
.ss_sp
= (void*)((pointer
)ss_sp
+ ss_size
);
31 altstack
.ss_size
= ss_size
;
32 altstack
.ss_flags
= 0;
34 sigaltstack (&altstack
, NULL
);
39 void GC_initSignalStack (GC_state s
) {