[runtime] Fix potential overflow when using mono_msec_ticks
[mono.git] / mono / utils / mono-signal-handler.h
1 /*
2  * mono-signal-handler.h: Handle signal handler differences across platforms
3  *
4  * Copyright (C) 2013 Xamarin Inc
5  */
6
7 #ifndef __MONO_SIGNAL_HANDLER_H__
8 #define __MONO_SIGNAL_HANDLER_H__
9
10 #include "config.h"
11
12 #ifdef ENABLE_EXTENSION_MODULE
13 #include "../../../mono-extensions/mono/utils/mono-signal-handler.h"
14 #endif
15
16 /* Don't use this */
17 #ifndef MONO_SIGNAL_HANDLER_FUNC
18 #define MONO_SIGNAL_HANDLER_FUNC(access, name, arglist) access void name arglist
19 #endif
20
21 /*
22  * Macros to work around signal handler differences on various platforms.
23  *
24  * To declare a signal handler function:
25  * void MONO_SIG_HANDLER_SIGNATURE (handler_func)
26  * To define a signal handler function:
27  * MONO_SIG_HANDLER_FUNC(access, name)
28  * To call another signal handler function:
29  * handler_func (MONO_SIG_HANDLER_PARAMS);
30  * To obtain the signal number:
31  * int signo = MONO_SIG_HANDLER_GET_SIGNO ();
32  * To obtain the signal context:
33  * MONO_SIG_HANDLER_GET_CONTEXT ().
34  * This will define a variable name 'ctx'.
35  */
36
37 #ifdef HOST_WIN32
38 #define MONO_SIG_HANDLER_SIGNATURE(ftn) ftn (int _dummy, EXCEPTION_POINTERS *_info, void *context)
39 #define MONO_SIG_HANDLER_FUNC(access, ftn) MONO_SIGNAL_HANDLER_FUNC (access, ftn, (int _dummy, EXCEPTION_POINTERS *_info, void *context))
40 #define MONO_SIG_HANDLER_PARAMS _dummy, _info, context
41 #define MONO_SIG_HANDLER_GET_SIGNO() (_dummy)
42 #define MONO_SIG_HANDLER_GET_INFO() (_info)
43 #define MONO_SIG_HANDLER_INFO_TYPE EXCEPTION_POINTERS
44 /* seh_vectored_exception_handler () passes in a CONTEXT* */
45 #define MONO_SIG_HANDLER_GET_CONTEXT \
46     void *ctx = context;
47 #else
48 /* sigaction */
49 #define MONO_SIG_HANDLER_SIGNATURE(ftn) ftn (int _dummy, siginfo_t *_info, void *context)
50 #define MONO_SIG_HANDLER_FUNC(access, ftn) MONO_SIGNAL_HANDLER_FUNC (access, ftn, (int _dummy, siginfo_t *_info, void *context))
51 #define MONO_SIG_HANDLER_PARAMS _dummy, _info, context
52 #define MONO_SIG_HANDLER_GET_SIGNO() (_dummy)
53 #define MONO_SIG_HANDLER_GET_INFO() (_info)
54 #define MONO_SIG_HANDLER_INFO_TYPE siginfo_t
55 #define MONO_SIG_HANDLER_GET_CONTEXT \
56     void *ctx = context;
57 #endif
58
59 #endif