Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/posix/signal.h

    r1a552fd r3f466c33  
    3939#include "sys/types.h"
    4040
    41 /* HelenOS doesn't have signals, so calls to functions of this header
    42  * are just replaced with their respective failure return value.
    43  *
    44  * Other macros and constants are here just to satisfy the symbol resolver
    45  * and have no practical value whatsoever, until HelenOS implements some
    46  * equivalent of signals. Maybe something neat based on IPC will be devised
    47  * in the future?
    48  */
     41extern void __posix_default_signal_handler(int signo);
     42extern void __posix_hold_signal_handler(int signo);
     43extern void __posix_ignore_signal_handler(int signo);
    4944
    5045#undef SIG_DFL
    51 #define SIG_DFL ((void (*)(int)) 0)
     46#define SIG_DFL ((void (*)(int)) __posix_default_signal_handler)
    5247#undef SIG_ERR
    53 #define SIG_ERR ((void (*)(int)) 0)
     48#define SIG_ERR ((void (*)(int)) NULL)
    5449#undef SIG_HOLD
    55 #define SIG_HOLD ((void (*)(int)) 0)
     50#define SIG_HOLD ((void (*)(int)) __posix_hold_signal_handler)
    5651#undef SIG_IGN
    57 #define SIG_IGN ((void (*)(int)) 0)
    58 
    59 #define signal(sig,func) (errno = ENOTSUP, SIG_ERR)
    60 #define raise(sig) ((int) -1)
    61 #define kill(pid,sig) (errno = ENOTSUP, (int) -1)
     52#define SIG_IGN ((void (*)(int)) __posix_ignore_signal_handler)
    6253
    6354typedef int posix_sig_atomic_t;
    64 typedef int posix_sigset_t;
     55typedef uint32_t posix_sigset_t;
    6556typedef struct posix_mcontext {
    6657        // FIXME: should not be empty to avoid compiler warnings (-pedantic)
     
    8778        int si_errno;
    8879
    89         pid_t si_pid;
    90         uid_t si_uid;
     80        posix_pid_t si_pid;
     81        posix_uid_t si_uid;
    9182        void *si_addr;
    9283        int si_status;
     
    120111/* Values of posix_sigevent::sigev_notify */
    121112#undef SIGEV_NONE
     113#undef SIGEV_SIGNAL
     114#undef SIGEV_THREAD
    122115#define SIGEV_NONE 0
    123 #undef SIGEV_SIGNAL
    124116#define SIGEV_SIGNAL 0
    125 #undef SIGEV_THREAD
    126117#define SIGEV_THREAD 0
    127118
    128119#undef SIGRT_MIN
     120#undef SIGRT_MAX
    129121#define SIGRT_MIN 0
    130 #undef SIGRT_MAX
    131122#define SIGRT_MAX 0
    132123
    133124#undef SIG_BLOCK
     125#undef SIG_UNBLOCK
     126#undef SIG_SETMASK
    134127#define SIG_BLOCK 0
    135 #undef SIG_UNBLOCK
    136 #define SIG_UNBLOCK 0
    137 #undef SIG_SETMASK
    138 #define SIG_SETMASK 0
     128#define SIG_UNBLOCK 1
     129#define SIG_SETMASK 2
    139130
    140131#undef SA_NOCLDSTOP
    141 #define SA_NOCLDSTOP 0
    142132#undef SA_ONSTACK
    143 #define SA_ONSTACK 0
    144133#undef SA_RESETHAND
    145 #define SA_RESETHAND 0
    146134#undef SA_RESTART
    147 #define SA_RESTART 0
    148135#undef SA_SIGINFO
    149 #define SA_SIGINFO 0
    150136#undef SA_NOCLDWAIT
    151 #define SA_NOCLDWAIT 0
    152137#undef SA_NODEFER
    153 #define SA_NODEFER 0
     138#define SA_NOCLDSTOP (1 << 0)
     139#define SA_ONSTACK (1 << 1)
     140#define SA_RESETHAND (1 << 2)
     141#define SA_RESTART (1 << 3)
     142#define SA_SIGINFO (1 << 4)
     143#define SA_NOCLDWAIT (1 << 5)
     144#define SA_NODEFER (1 << 6)
    154145
    155146#undef SS_ONSTACK
     147#undef SS_DISABLE
    156148#define SS_ONSTACK 0
    157 #undef SS_DISABLE
    158149#define SS_DISABLE 0
    159150
    160151#undef MINSIGSTKSZ
     152#undef SIGSTKSZ
    161153#define MINSIGSTKSZ 0
    162 #undef SIGSTKSZ
    163154#define SIGSTKSZ 0
    164155
    165156/* full POSIX set */
    166157enum {
     158        /* Termination Signals */
    167159        SIGABRT,
     160        SIGQUIT,
     161        SIGINT,
     162        SIGTERM,
     163       
     164        /* Child Signal */
     165        SIGCHLD,
     166       
     167        /* User signals */
     168        SIGUSR1,
     169        SIGUSR2,
     170
     171        /* Timer */
    168172        SIGALRM,
     173        SIGVTALRM,
     174        SIGPROF, /* obsolete */
     175
     176        _TOP_CATCHABLE_SIGNAL = SIGPROF,
     177
     178        /* Process Scheduler Interaction - not supported */
     179        SIGSTOP,
     180        SIGCONT,
     181
     182        /* Process Termination - can't be caught */
     183        SIGKILL,
     184
     185        _TOP_SENDABLE_SIGNAL = SIGKILL,
     186
     187        /* Hardware Exceptions - can't be caught or sent */
     188        SIGFPE,
    169189        SIGBUS,
    170         SIGCHLD,
    171         SIGCONT,
    172         SIGFPE,
     190        SIGILL,
     191        SIGSEGV,
     192
     193        /* Other Exceptions - not supported */
     194        SIGSYS,
     195        SIGXCPU,
     196        SIGXFSZ,
     197
     198        /* Debugging - not supported */
     199        SIGTRAP,
     200
     201        /* Communication Signals - not supported */
    173202        SIGHUP,
    174         SIGILL,
    175         SIGINT,
    176         SIGKILL,
    177203        SIGPIPE,
    178         SIGQUIT,
    179         SIGSEGV,
    180         SIGSTOP,
    181         SIGTERM,
     204        SIGPOLL, /* obsolete */
     205        SIGURG,
     206
     207        /* Terminal Signals - not supported */
    182208        SIGTSTP,
    183209        SIGTTIN,
    184210        SIGTTOU,
    185         SIGUSR1,
    186         SIGUSR2,
    187         SIGPOLL,
    188         SIGPROF,
    189         SIGSYS,
    190         SIGTRAP,
    191         SIGURG,
    192         SIGVTALRM,
    193         SIGXCPU,
    194         SIGXFSZ
    195 };
    196 
    197 /* Just declared to avoid compiler warnings. */
     211       
     212        _TOP_SIGNAL = SIGTTOU
     213};
     214
     215/* Values for sigaction field si_code. */
     216
     217enum {
     218        SI_USER,
     219        SI_QUEUE,
     220        SI_TIMER,
     221        SI_ASYNCIO,
     222        SI_MESGQ,
     223        ILL_ILLOPC,
     224        ILL_ILLOPN,
     225        ILL_ILLADR,
     226        ILL_ILLTRP,
     227        ILL_PRVOPC,
     228        ILL_PRVREG,
     229        ILL_COPROC,
     230        ILL_BADSTK,
     231        FPE_INTDIV,
     232        FPE_INTOVF,
     233        FPE_FLTDIV,
     234        FPE_FLTOVF,
     235        FPE_FLTUND,
     236        FPE_FLTRES,
     237        FPE_FLTINV,
     238        FPE_FLTSUB,
     239        SEGV_MAPERR,
     240        SEGV_ACCERR,
     241        BUS_ADRALN,
     242        BUS_ADRERR,
     243        BUS_OBJERR,
     244        TRAP_BRKPT,
     245        TRAP_TRACE,
     246        CLD_EXITED,
     247        CLD_KILLED,
     248        CLD_DUMPED,
     249        CLD_TRAPPED,
     250        CLD_STOPPED,
     251        CLD_CONTINUED,
     252        POLL_IN,
     253        POLL_OUT,
     254        POLL_MSG,
     255        POLL_ERR,
     256        POLL_PRI,
     257        POLL_HUP
     258};
     259
     260extern int posix_sigaction(int sig, const struct posix_sigaction *restrict act,
     261    struct posix_sigaction *restrict oact);
     262
     263extern void (*posix_signal(int sig, void (*func)(int)))(int);
     264extern int posix_raise(int sig);
     265extern int posix_kill(posix_pid_t pid, int sig);
     266extern int posix_killpg(posix_pid_t pid, int sig);
     267
     268extern void posix_psiginfo(const posix_siginfo_t *pinfo, const char *message);
     269extern void posix_psignal(int signum, const char *message);
     270
    198271extern int posix_sigemptyset(posix_sigset_t *set);
     272extern int posix_sigfillset(posix_sigset_t *set);
     273extern int posix_sigaddset(posix_sigset_t *set, int signo);
     274extern int posix_sigdelset(posix_sigset_t *set, int signo);
     275extern int posix_sigismember(const posix_sigset_t *set, int signo);
     276
     277extern int posix_thread_sigmask(int how, const posix_sigset_t *restrict set,
     278    posix_sigset_t *restrict oset);
    199279extern int posix_sigprocmask(int how, const posix_sigset_t *restrict set,
    200280    posix_sigset_t *restrict oset);
     
    204284        #define sigset_t posix_sigset_t
    205285        #define sigval posix_sigval
    206         #define sigevent posix_sigevent
     286        #ifndef sigevent
     287                #define sigevent posix_sigevent
     288        #endif
    207289        #define sigaction posix_sigaction
    208290        #define mcontext_t posix_mcontext_t
     
    210292        #define stack_t posix_stack_t
    211293        #define siginfo_t posix_siginfo_t
     294
     295        #define signal posix_signal
     296        #define raise posix_raise
     297        #define kill posix_kill
     298        #define killpg posix_killpg
     299
     300        #define psiginfo posix_psiginfo
     301        #define psignal posix_psignal
     302
    212303        #define sigemptyset posix_sigemptyset
     304        #define sigfillset posix_sigfillset
     305        #define sigaddset posix_sigaddset
     306        #define sigdelset posix_sigdelset
     307        #define sigismember posix_sigismember
     308
     309        #define pthread_sigmask posix_thread_sigmask
    213310        #define sigprocmask posix_sigprocmask
    214311#endif
Note: See TracChangeset for help on using the changeset viewer.