; Standard signal handling functions
-SIG_ERR = $FFFF
-SIG_IGN = $0000
-SIG_DFL = $0001
+SIG_ERR = $0000
; Signal numbers
SIGABRT = 0
SIGINT = 3
SIGSEGV = 4
SIGTERM = 5
-SIGCOUNT = 6 ; Number of signals (maximum: 8)
+SIGCOUNT = 6 ; Number of signals
-; Signal masks
-SIGMASK_ABRT = (1 .SHL SIGABRT)
-SIGMASK_FPE = (1 .SHL SIGFPE)
-SIGMASK_ILL = (1 .SHL SIGILL)
-SIGMASK_INT = (1 .SHL SIGINT)
-SIGMASK_SEGV = (1 .SHL SIGSEGV)
-SIGMASK_TERM = (1 .SHL SIGTERM)
+; Table with signal handlers (asm code only)
+.global sigtable
; Function declarations
+.global __sig_ign
+.global __sig_dfl
.global _signal
.global _raise
-
typedef unsigned char sig_atomic_t;
/* Type of a signal handler */
-typedef void (*__sigfunc) (int);
+typedef void __fastcall__ (*__sigfunc) (int);
+
+/* Functions that implement SIG_IGN and SIG_DFL */
+void _sig_ign (int);
+void _sig_dfl (int);
/* Standard signal handling functions */
-#define SIG_IGN ((__sigfunc) 0x0000)
-#define SIG_ERR ((__sigfunc) 0xFFFF)
-#define SIG_DFL ((__sigfunc) 0xFFFE)
+#define SIG_DFL _sig_dfl
+#define SIG_IGN _sig_ign
+#define SIG_ERR ((__sigfunc) 0x0000)
/* Signal numbers */
#define SIGABRT 0