2 * mono-signal-handler.h: Handle signal handler differences across platforms
4 * Copyright (C) 2013 Xamarin Inc
7 #ifndef __MONO_SIGNAL_HANDLER_H__
8 #define __MONO_SIGNAL_HANDLER_H__
12 #ifdef ENABLE_EXTENSION_MODULE
13 #include "../../../mono-extensions/mono/utils/mono-signal-handler.h"
17 #ifndef MONO_SIGNAL_HANDLER_FUNC
18 #define MONO_SIGNAL_HANDLER_FUNC(access, name, arglist) access void name arglist
22 * Macros to work around signal handler differences on various platforms.
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'.
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 \
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 \