From 09e967c2d732783b2579e4e120cd9b608404cb00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gwenol=C3=A9=20Beauchesne?= Date: Wed, 4 Jun 2003 18:31:57 +0000 Subject: Merge from R9_0-AMD64, most notably: - AMD64 support to insmod-busybox, minilibc, et al. - Sync with insmod-modutils 2.4.19 something but everyone should use dietlibc nowadays - Factor out compilation and prefix with $(DIET) for dietlibc builds - 64-bit & varargs fixes --- mdk-stage1/dietlibc/include/signal.h | 487 ++++++++++++++++++++++++++++++++++- 1 file changed, 476 insertions(+), 11 deletions(-) (limited to 'mdk-stage1/dietlibc/include/signal.h') diff --git a/mdk-stage1/dietlibc/include/signal.h b/mdk-stage1/dietlibc/include/signal.h index 9ed93fe83..fdc0518cf 100644 --- a/mdk-stage1/dietlibc/include/signal.h +++ b/mdk-stage1/dietlibc/include/signal.h @@ -5,31 +5,496 @@ #define __WANT_POSIX1B_SIGNALS__ -#include -#include +#include +#include + +#define NSIG 32 + +#ifdef __mips__ +#define _NSIG 128 +#else +#define _NSIG 64 +#endif + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +#define SIGABRT 6 +#define SIGIOT 6 +#define SIGFPE 8 +#define SIGKILL 9 +#define SIGSEGV 11 +#define SIGPIPE 13 +#define SIGALRM 14 +#define SIGTERM 15 +#define SIGUNUSED 31 +#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__arm__) \ + || defined(__s390__) || defined(__ia64__) +#define SIGBUS 7 +#define SIGUSR1 10 +#define SIGUSR2 12 +#define SIGSTKFLT 16 +#define SIGCHLD 17 +#define SIGCONT 18 +#define SIGSTOP 19 +#define SIGTSTP 20 +#define SIGTTIN 21 +#define SIGTTOU 22 +#define SIGURG 23 +#define SIGXCPU 24 +#define SIGXFSZ 25 +#define SIGVTALRM 26 +#define SIGPROF 27 +#define SIGWINCH 28 +#define SIGIO 29 +#define SIGPWR 30 +#define SIGSYS 31 +#elif defined(__alpha__) || defined(__sparc__) +#define SIGEMT 7 +#define SIGBUS 10 +#define SIGSYS 12 +#define SIGURG 16 +#define SIGSTOP 17 +#define SIGTSTP 18 +#define SIGCONT 19 +#define SIGCHLD 20 +#define SIGTTIN 21 +#define SIGTTOU 22 +#define SIGIO 23 +#define SIGXCPU 24 +#define SIGXFSZ 25 +#define SIGVTALRM 26 +#define SIGPROF 27 +#define SIGWINCH 28 +#define SIGPWR 29 +#define SIGUSR1 30 +#define SIGUSR2 31 +#if defined(__alpha__) +#define SIGINFO SIGPWR +#endif +#elif defined(__mips__) +#define SIGEMT 7 +#define SIGBUS 10 +#define SIGSYS 12 +#define SIGUSR1 16 +#define SIGUSR2 17 +#define SIGCHLD 18 +#define SIGPWR 19 +#define SIGWINCH 20 +#define SIGURG 21 +#define SIGIO 22 +#define SIGSTOP 23 +#define SIGTSTP 24 +#define SIGCONT 25 +#define SIGTTIN 26 +#define SIGTTOU 27 +#define SIGVTALRM 28 +#define SIGPROF 29 +#define SIGXCPU 30 +#define SIGXFSZ 31 +#elif defined(__hppa__) +#define SIGEMT 7 +#define SIGBUS 10 +#define SIGSYS 12 +#define SIGUSR1 16 +#define SIGUSR2 17 +#define SIGCHLD 18 +#define SIGPWR 19 +#define SIGVTALRM 20 +#define SIGPROF 21 +#define SIGIO 22 +#define SIGWINCH 23 +#define SIGSTOP 24 +#define SIGTSTP 25 +#define SIGCONT 26 +#define SIGTTIN 27 +#define SIGTTOU 28 +#define SIGURG 29 +#define SIGLOST 30 +#define SIGUNUSED 31 +#define SIGRESERVE SIGUNUSE +#define SIGXCPU 33 +#define SIGXFSZ 34 +#define SIGSTKFLT 36 + +#else +#error signal layout not yet known +#endif + +#define SIGCLD SIGCHLD +#define SIGLOST SIGPWR +#define SIGPOLL SIGIO + +/* These should not be considered constants from userland. */ +#ifdef __hppa__ +#define SIGRTMIN 37 +#else +#define SIGRTMIN 32 +#endif +#define SIGRTMAX (_NSIG-1) + +/* SA_FLAGS values: */ +#if defined(__alpha__) +#define SA_ONSTACK 0x00000001 +#define SA_RESTART 0x00000002 +#define SA_NOCLDSTOP 0x00000004 +#define SA_NODEFER 0x00000008 +#define SA_RESETHAND 0x00000010 +#define SA_NOCLDWAIT 0x00000020 /* not supported yet */ +#define SA_SIGINFO 0x00000040 +#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */ +#elif defined(__hppa__) +#define SA_ONSTACK 0x00000001 +#define SA_RESETHAND 0x00000004 +#define SA_NOCLDSTOP 0x00000008 +#define SA_SIGINFO 0x00000010 +#define SA_NODEFER 0x00000020 +#define SA_RESTART 0x00000040 +#define SA_NOCLDWAIT 0x00000080 /* not supported yet */ +#define _SA_SIGGFAULT 0x00000100 /* HPUX */ +#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */ +#define SA_RESTORER 0x04000000 /* obsolete -- ignored */ +#elif defined (__sparc__) +#define SV_SSTACK 1 /* This signal handler should use sig-stack */ +#define SV_INTR 2 /* Sig return should not restart system call */ +#define SV_RESET 4 /* Set handler to SIG_DFL upon taken signal */ +#define SV_IGNCHILD 8 /* Do not send SIGCHLD */ + +#define SA_NOCLDSTOP SV_IGNCHILD +#define SA_STACK SV_SSTACK +#define SA_ONSTACK SV_SSTACK +#define SA_RESTART SV_INTR +#define SA_RESETHAND SV_RESET +#define SA_INTERRUPT 0x10 +#define SA_NODEFER 0x20 +#define SA_SHIRQ 0x40 +#define SA_NOCLDWAIT 0x100 /* not supported yet */ +#define SA_SIGINFO 0x200 +#else +#if defined (__mips__) +#define SA_NOCLDSTOP 0x00000001 +#define SA_SIGINFO 0x00000008 +#define SA_NOCLDWAIT 0x00010000 /* Not supported yet */ +#else +#define SA_NOCLDSTOP 0x00000001 +#define SA_NOCLDWAIT 0x00000002 /* not supported yet */ +#define SA_SIGINFO 0x00000004 +#endif +#if defined(__arm__) +#define SA_THIRTYTWO 0x02000000 +#endif +#define SA_RESTORER 0x04000000 +#define SA_ONSTACK 0x08000000 +#define SA_RESTART 0x10000000 +#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */ +#define SA_NODEFER 0x40000000 +#define SA_RESETHAND 0x80000000 +#endif + +/* ugh, historic Linux legacy, for gpm :-( */ +#define SA_NOMASK SA_NODEFER +#define SA_ONESHOT SA_RESETHAND + +/* sigaltstack controls */ +#define SS_ONSTACK 1 +#define SS_DISABLE 2 + +#define MINSIGSTKSZ 2048 +#define SIGSTKSZ 8192 + +#if defined(__alpha__) || defined(__mips__) +#define SIG_BLOCK 1 /* for blocking signals */ +#define SIG_UNBLOCK 2 /* for unblocking signals */ +#define SIG_SETMASK 3 /* for setting the signal mask */ +#else +#define SIG_BLOCK 0 /* for blocking signals */ +#define SIG_UNBLOCK 1 /* for unblocking signals */ +#define SIG_SETMASK 2 /* for setting the signal mask */ +#endif + +typedef int sig_atomic_t; typedef void (*sighandler_t)(int); +#ifdef _BSD_SOURCE +typedef sighandler_t sig_t; +#endif + +#define SIG_DFL ((sighandler_t)0) /* default signal handling */ +#define SIG_IGN ((sighandler_t)1) /* ignore signal */ +#define SIG_ERR ((sighandler_t)-1) /* error return from signal */ + +typedef union sigval { + int sival_int; + void *sival_ptr; +} sigval_t; + +#define SI_MAX_SIZE 128 +#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3) + +typedef struct siginfo { + int si_signo; + int si_errno; + int si_code; + union { + int _pad[SI_PAD_SIZE]; + /* kill() */ + struct { + pid_t _pid; /* sender's pid */ + uid_t _uid; /* sender's uid */ + } _kill; + /* POSIX.1b timers */ + struct { + unsigned int _timer1; + unsigned int _timer2; + } _timer; + /* POSIX.1b signals */ + struct { + pid_t _pid; /* sender's pid */ + uid_t _uid; /* sender's uid */ + sigval_t _sigval; + } _rt; + /* SIGCHLD */ + struct { + pid_t _pid; /* which child */ + uid_t _uid; /* sender's uid */ + int _status; /* exit code */ + clock_t _utime; + clock_t _stime; + } _sigchld; + /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ + struct { + void *_addr; /* faulting insn/memory ref. */ + } _sigfault; + /* SIGPOLL */ + struct { + int _band; /* POLL_IN, POLL_OUT, POLL_MSG */ + int _fd; + } _sigpoll; + } _sifields; +} siginfo_t; + +/* + * How these fields are to be accessed. + */ +#define si_pid _sifields._kill._pid +#define si_uid _sifields._kill._uid +#define si_status _sifields._sigchld._status +#define si_utime _sifields._sigchld._utime +#define si_stime _sifields._sigchld._stime +#define si_value _sifields._rt._sigval +#define si_int _sifields._rt._sigval.sival_int +#define si_ptr _sifields._rt._sigval.sival_ptr +#define si_addr _sifields._sigfault._addr +#define si_band _sifields._sigpoll._band +#define si_fd _sifields._sigpoll._fd + +/* Values for `si_code'. Positive values are reserved for kernel-generated + signals. */ +enum { + SI_ASYNCNL = -6, /* Sent by asynch name lookup completion. */ +# define SI_ASYNCNL SI_ASYNCNL + SI_SIGIO, /* Sent by queued SIGIO. */ +# define SI_SIGIO SI_SIGIO + SI_ASYNCIO, /* Sent by AIO completion. */ +# define SI_ASYNCIO SI_ASYNCIO + SI_MESGQ, /* Sent by real time mesq state change. */ +# define SI_MESGQ SI_MESGQ + SI_TIMER, /* Sent by timer expiration. */ +# define SI_TIMER SI_TIMER + SI_QUEUE, /* Sent by sigqueue. */ +# define SI_QUEUE SI_QUEUE + SI_USER, /* Sent by kill, sigsend, raise. */ +# define SI_USER SI_USER + SI_KERNEL = 0x80 /* Send by kernel. */ +#define SI_KERNEL SI_KERNEL +}; + + +/* `si_code' values for SIGILL signal. */ +enum { + ILL_ILLOPC = 1, /* Illegal opcode. */ +# define ILL_ILLOPC ILL_ILLOPC + ILL_ILLOPN, /* Illegal operand. */ +# define ILL_ILLOPN ILL_ILLOPN + ILL_ILLADR, /* Illegal addressing mode. */ +# define ILL_ILLADR ILL_ILLADR + ILL_ILLTRP, /* Illegal trap. */ +# define ILL_ILLTRP ILL_ILLTRP + ILL_PRVOPC, /* Privileged opcode. */ +# define ILL_PRVOPC ILL_PRVOPC + ILL_PRVREG, /* Privileged register. */ +# define ILL_PRVREG ILL_PRVREG + ILL_COPROC, /* Coprocessor error. */ +# define ILL_COPROC ILL_COPROC + ILL_BADSTK /* Internal stack error. */ +# define ILL_BADSTK ILL_BADSTK +}; + +/* `si_code' values for SIGFPE signal. */ +enum { + FPE_INTDIV = 1, /* Integer divide by zero. */ +# define FPE_INTDIV FPE_INTDIV + FPE_INTOVF, /* Integer overflow. */ +# define FPE_INTOVF FPE_INTOVF + FPE_FLTDIV, /* Floating point divide by zero. */ +# define FPE_FLTDIV FPE_FLTDIV + FPE_FLTOVF, /* Floating point overflow. */ +# define FPE_FLTOVF FPE_FLTOVF + FPE_FLTUND, /* Floating point underflow. */ +# define FPE_FLTUND FPE_FLTUND + FPE_FLTRES, /* Floating point inexact result. */ +# define FPE_FLTRES FPE_FLTRES + FPE_FLTINV, /* Floating point invalid operation. */ +# define FPE_FLTINV FPE_FLTINV + FPE_FLTSUB /* Subscript out of range. */ +# define FPE_FLTSUB FPE_FLTSUB +}; + +/* `si_code' values for SIGSEGV signal. */ +enum { + SEGV_MAPERR = 1, /* Address not mapped to object. */ +# define SEGV_MAPERR SEGV_MAPERR + SEGV_ACCERR /* Invalid permissions for mapped object. */ +# define SEGV_ACCERR SEGV_ACCERR +}; + +/* `si_code' values for SIGBUS signal. */ +enum { + BUS_ADRALN = 1, /* Invalid address alignment. */ +# define BUS_ADRALN BUS_ADRALN + BUS_ADRERR, /* Non-existant physical address. */ +# define BUS_ADRERR BUS_ADRERR + BUS_OBJERR /* Object specific hardware error. */ +# define BUS_OBJERR BUS_OBJERR +}; + +/* `si_code' values for SIGTRAP signal. */ +enum { + TRAP_BRKPT = 1, /* Process breakpoint. */ +# define TRAP_BRKPT TRAP_BRKPT + TRAP_TRACE /* Process trace trap. */ +# define TRAP_TRACE TRAP_TRACE +}; + +/* `si_code' values for SIGCHLD signal. */ +enum { + CLD_EXITED = 1, /* Child has exited. */ +# define CLD_EXITED CLD_EXITED + CLD_KILLED, /* Child was killed. */ +# define CLD_KILLED CLD_KILLED + CLD_DUMPED, /* Child terminated abnormally. */ +# define CLD_DUMPED CLD_DUMPED + CLD_TRAPPED, /* Traced child has trapped. */ +# define CLD_TRAPPED CLD_TRAPPED + CLD_STOPPED, /* Child has stopped. */ +# define CLD_STOPPED CLD_STOPPED + CLD_CONTINUED /* Stopped child has continued. */ +# define CLD_CONTINUED CLD_CONTINUED +}; + +/* `si_code' values for SIGPOLL signal. */ +enum { + POLL_IN = 1, /* Data input available. */ +# define POLL_IN POLL_IN + POLL_OUT, /* Output buffers available. */ +# define POLL_OUT POLL_OUT + POLL_MSG, /* Input message available. */ +# define POLL_MSG POLL_MSG + POLL_ERR, /* I/O error. */ +# define POLL_ERR POLL_ERR + POLL_PRI, /* High priority input available. */ +# define POLL_PRI POLL_PRI + POLL_HUP /* Device disconnected. */ +# define POLL_HUP POLL_HUP +}; + +#define _NSIG_WORDS ((_NSIG/sizeof(long))>>3) + +typedef struct { + unsigned long sig[_NSIG_WORDS]; +} sigset_t; + +struct sigaction { +#if defined(__alpha__) + union { + sighandler_t _sa_handler; + void (*_sa_sigaction)(int, siginfo_t*, void*); + } _u; + sigset_t sa_mask; + unsigned long sa_flags; +#elif defined(__ia64__) || defined(__hppa__) + union { + sighandler_t _sa_handler; + void (*_sa_sigaction)(int, siginfo_t*, void*); + } _u; + unsigned long sa_flags; + sigset_t sa_mask; +#elif defined(__mips__) + unsigned long sa_flags; + union { + sighandler_t _sa_handler; + void (*_sa_sigaction)(int, siginfo_t*, void*); + } _u; + sigset_t sa_mask; + void (*sa_restorer)(void); + int sa_resv[1]; +#else /* arm, i386, ppc, s390, sparc, saprc64, x86_64 */ + union { + sighandler_t _sa_handler; + void (*_sa_sigaction)(int, siginfo_t*, void*); + } _u; + unsigned long sa_flags; + void (*sa_restorer)(void); + sigset_t sa_mask; +#endif +}; + +#define sa_handler _u._sa_handler +#define sa_sigaction _u._sa_sigaction + +typedef struct sigaltstack { +#if defined(__mips__) + void *ss_sp; + size_t ss_size; + int ss_flags; +#else + void *ss_sp; + int ss_flags; + size_t ss_size; +#endif +} stack_t; + +int sigaltstack(const struct sigaltstack *newstack, struct sigaltstack *oldstack) __THROW; + int sigemptyset(sigset_t *set) __THROW; int sigfillset(sigset_t *set) __THROW; int sigaddset(sigset_t *set, int signum) __THROW; int sigdelset(sigset_t *set, int signum) __THROW; +int sigismember(const sigset_t *set, int signo) __THROW; +int sigsuspend(const sigset_t *mask) __THROW; +int sigpending(sigset_t *set) __THROW; int sigprocmask(int how, const sigset_t *set, sigset_t *oldset) __THROW; + + sighandler_t signal(int signum, sighandler_t action); + int raise (int sig) __THROW; +int kill(pid_t pid, int sig) __THROW; + int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) __THROW; -int sigaltstack(const struct sigaltstack *newstack, struct sigaltstack *oldstack) __THROW; -#ifndef SIGCLD -#define SIGCLD SIGCHLD -#endif +int sigtimedwait(const sigset_t *mask, siginfo_t *info, const struct timespec *ts) __THROW; +int sigqueueinfo(int pid, int sig, siginfo_t *info) __THROW; +int siginterrupt(int sig, int flag) __THROW; -extern const char *const sys_siglist[]; +int killpg(int pgrp, int sig) __THROW; -typedef __sighandler_t sig_t; +/* 0 is OK ! kernel puts in MAX_THREAD_TIMEOUT :) */ +#define sigwaitinfo(m, i) sigtimedwait((m),(i),0) -#ifndef NSIG -#define NSIG _NSIG -#endif +extern const char *const sys_siglist[]; #endif -- cgit v1.2.1