Changeset e4f8c77 in mainline for uspace/lib/posix/signal.h


Ignore:
Timestamp:
2011-07-13T22:39:18Z (13 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e6910c8
Parents:
5974661 (diff), 8ecef91 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge libposix.

File:
1 edited

Legend:

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

    r5974661 re4f8c77  
    3737
    3838#include "libc/errno.h"
    39 
    40 /* HelenOS doesn't have signals, so calls to functions of this header
    41  * are just replaced with their respective failure return value.
    42  *
    43  * Other macros and constants are here just to satisfy the symbol resolver
    44  * and have no practical value whatsoever, until HelenOS implements some
    45  * equivalent of signals. Maybe something neat based on IPC will be devised
    46  * in the future?
    47  */
     39#include "sys/types.h"
     40
     41extern void __posix_default_signal_handler(int signo);
     42extern void __posix_hold_signal_handler(int signo);
     43extern void __posix_ignore_signal_handler(int signo);
    4844
    4945#undef SIG_DFL
    50 #define SIG_DFL ((void (*)(int)) 0)
     46#define SIG_DFL ((void (*)(int)) __posix_default_signal_handler)
    5147#undef SIG_ERR
    52 #define SIG_ERR ((void (*)(int)) 0)
     48#define SIG_ERR ((void (*)(int)) NULL)
     49#undef SIG_HOLD
     50#define SIG_HOLD ((void (*)(int)) __posix_hold_signal_handler)
    5351#undef SIG_IGN
    54 #define SIG_IGN ((void (*)(int)) 0)
    55 
    56 #define signal(sig,func) (errno = ENOTSUP, SIG_ERR)
    57 #define raise(sig) ((int) -1)
     52#define SIG_IGN ((void (*)(int)) __posix_ignore_signal_handler)
    5853
    5954typedef int posix_sig_atomic_t;
     55typedef uint32_t posix_sigset_t;
     56typedef struct posix_mcontext {
     57        // FIXME: should not be empty to avoid compiler warnings (-pedantic)
     58        int dummy;
     59} posix_mcontext_t;
     60
     61union posix_sigval {
     62        int sival_int;
     63        void *sival_ptr;
     64};
     65
     66struct posix_sigevent {
     67        int sigev_notify; /* Notification type. */
     68        int sigev_signo; /* Signal number. */
     69        union posix_sigval sigev_value; /* Signal value. */
     70        void (*sigev_notify_function)(union posix_sigval); /* Notification function. */
     71        posix_thread_attr_t *sigev_notify_attributes; /* Notification attributes. */
     72};
     73
     74typedef struct {
     75        int si_signo;
     76        int si_code;
     77
     78        int si_errno;
     79
     80        posix_pid_t si_pid;
     81        posix_uid_t si_uid;
     82        void *si_addr;
     83        int si_status;
     84
     85        long si_band;
     86
     87        union posix_sigval si_value;
     88} posix_siginfo_t;
     89
     90struct posix_sigaction {
     91        void (*sa_handler)(int);
     92        posix_sigset_t sa_mask;
     93        int sa_flags;
     94        void (*sa_sigaction)(int, posix_siginfo_t *, void *);
     95};
     96
     97typedef struct {
     98        void *ss_sp;
     99        size_t ss_size;
     100        int ss_flags;
     101} posix_stack_t;
     102
     103typedef struct posix_ucontext {
     104        struct posix_ucontext *uc_link;
     105        posix_sigset_t uc_sigmask;
     106        posix_stack_t uc_stack;
     107        posix_mcontext_t uc_mcontext;
     108} posix_ucontext_t;
     109
     110
     111/* Values of posix_sigevent::sigev_notify */
     112#undef SIGEV_NONE
     113#undef SIGEV_SIGNAL
     114#undef SIGEV_THREAD
     115#define SIGEV_NONE 0
     116#define SIGEV_SIGNAL 0
     117#define SIGEV_THREAD 0
     118
     119#undef SIGRT_MIN
     120#undef SIGRT_MAX
     121#define SIGRT_MIN 0
     122#define SIGRT_MAX 0
     123
     124#undef SIG_BLOCK
     125#undef SIG_UNBLOCK
     126#undef SIG_SETMASK
     127#define SIG_BLOCK 0
     128#define SIG_UNBLOCK 1
     129#define SIG_SETMASK 2
     130
     131#undef SA_NOCLDSTOP
     132#undef SA_ONSTACK
     133#undef SA_RESETHAND
     134#undef SA_RESTART
     135#undef SA_SIGINFO
     136#undef SA_NOCLDWAIT
     137#undef SA_NODEFER
     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)
     145
     146#undef SS_ONSTACK
     147#undef SS_DISABLE
     148#define SS_ONSTACK 0
     149#define SS_DISABLE 0
     150
     151#undef MINSIGSTKSZ
     152#undef SIGSTKSZ
     153#define MINSIGSTKSZ 0
     154#define SIGSTKSZ 0
    60155
    61156/* full POSIX set */
    62157enum {
     158        /* Termination Signals */
    63159        SIGABRT,
     160        SIGQUIT,
     161        SIGINT,
     162        SIGTERM,
     163       
     164        /* Child Signal */
     165        SIGCHLD,
     166       
     167        /* User signals */
     168        SIGUSR1,
     169        SIGUSR2,
     170
     171        /* Timer */
    64172        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,
    65189        SIGBUS,
    66         SIGCHLD,
    67         SIGCONT,
    68         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 */
    69202        SIGHUP,
    70         SIGILL,
    71         SIGINT,
    72         SIGKILL,
    73203        SIGPIPE,
    74         SIGQUIT,
    75         SIGSEGV,
    76         SIGSTOP,
    77         SIGTERM,
     204        SIGPOLL, /* obsolete */
     205        SIGURG,
     206
     207        /* Terminal Signals - not supported */
    78208        SIGTSTP,
    79209        SIGTTIN,
    80210        SIGTTOU,
    81         SIGUSR1,
    82         SIGUSR2,
    83         SIGPOLL,
    84         SIGPROF,
    85         SIGSYS,
    86         SIGTRAP,
    87         SIGURG,
    88         SIGVTALRM,
    89         SIGXCPU,
    90         SIGXFSZ
    91 };
     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
     271extern 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);
     279extern int posix_sigprocmask(int how, const posix_sigset_t *restrict set,
     280    posix_sigset_t *restrict oset);
    92281
    93282#ifndef LIBPOSIX_INTERNAL
    94283        #define sig_atomic_t posix_sig_atomic_t
     284        #define sigset_t posix_sigset_t
     285        #define sigval posix_sigval
     286        #ifndef sigevent
     287                #define sigevent posix_sigevent
     288        #endif
     289        #define sigaction posix_sigaction
     290        #define mcontext_t posix_mcontext_t
     291        #define ucontext_t posix_ucontext_t
     292        #define stack_t posix_stack_t
     293        #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
     303        #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
     310        #define sigprocmask posix_sigprocmask
    95311#endif
    96312
Note: See TracChangeset for help on using the changeset viewer.