/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation, or (at your option) any
 * later version. See the COPYING file in the top-level directory.
 */

#ifndef GENERIC_SIGNAL_H
#define GENERIC_SIGNAL_H

#define TARGET_SA_NOCLDSTOP     0x00000001
#define TARGET_SA_NOCLDWAIT     0x00000002 /* not supported yet */
#define TARGET_SA_SIGINFO       0x00000004
#define TARGET_SA_ONSTACK       0x08000000
#define TARGET_SA_RESTART       0x10000000
#define TARGET_SA_NODEFER       0x40000000
#define TARGET_SA_RESETHAND     0x80000000

#define TARGET_SIGHUP            1
#define TARGET_SIGINT            2
#define TARGET_SIGQUIT           3
#define TARGET_SIGILL            4
#define TARGET_SIGTRAP           5
#define TARGET_SIGABRT           6
#define TARGET_SIGIOT            6
#define TARGET_SIGBUS            7
#define TARGET_SIGFPE            8
#define TARGET_SIGKILL           9
#define TARGET_SIGUSR1          10
#define TARGET_SIGSEGV          11
#define TARGET_SIGUSR2          12
#define TARGET_SIGPIPE          13
#define TARGET_SIGALRM          14
#define TARGET_SIGTERM          15
#define TARGET_SIGSTKFLT        16
#define TARGET_SIGCHLD          17
#define TARGET_SIGCONT          18
#define TARGET_SIGSTOP          19
#define TARGET_SIGTSTP          20
#define TARGET_SIGTTIN          21
#define TARGET_SIGTTOU          22
#define TARGET_SIGURG           23
#define TARGET_SIGXCPU          24
#define TARGET_SIGXFSZ          25
#define TARGET_SIGVTALRM        26
#define TARGET_SIGPROF          27
#define TARGET_SIGWINCH         28
#define TARGET_SIGIO            29
#define TARGET_SIGPWR           30
#define TARGET_SIGSYS           31
#define TARGET_SIGRTMIN         32

#define TARGET_SIG_BLOCK          0    /* for blocking signals */
#define TARGET_SIG_UNBLOCK        1    /* for unblocking signals */
#define TARGET_SIG_SETMASK        2    /* for setting the signal mask */

/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
    abi_ulong ss_sp;
    abi_int ss_flags;
    abi_ulong ss_size;
} target_stack_t;

/*
 * sigaltstack controls
 */
#define TARGET_SS_ONSTACK 1
#define TARGET_SS_DISABLE 2

#define TARGET_MINSIGSTKSZ     2048

/* bit-flags */
#define TARGET_SS_AUTODISARM (1U << 31) /* disable sas during sighandling */
/* mask for all SS_xxx flags */
#define TARGET_SS_FLAG_BITS  TARGET_SS_AUTODISARM

#endif
