Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / runtime / gc / signals.c
CommitLineData
7f918cf1
CE
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.
5 *
6 * MLton is released under a BSD-style license.
7 * See the file MLton-LICENSE for details.
8 */
9
10#if not HAS_SIGALTSTACK
11
12void initSignalStack (__attribute__ ((unused)) GC_state s) {
13}
14
15#else
16
17void initSignalStack (GC_state s) {
18 static bool init = FALSE;
19 static stack_t altstack;
20
21 if (! init) {
22 init = TRUE;
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;
28#endif
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;
33 }
34 sigaltstack (&altstack, NULL);
35}
36
37#endif
38
39void GC_initSignalStack (GC_state s) {
40 initSignalStack (s);
41}