musl/arch/x86_64/bits/signal.h
Rich Felker ad2fe25041 support the ugly and deprecated ucontext and sigcontext header stuff...
only the structures, not the functions from ucontext.h, are supported
at this point. the main goal of this commit is to make modern gcc with
dwarf2 unwinding build without errors.

honestly, it probably doesn't matter how we define these as long as
they have members with the right names to prevent errors while
compiling libgcc. the only time they will be used is for propagating
exceptions across signal-handler boundaries, which invokes undefined
behavior anyway. but as-is, they're probably correct and may be useful
to various low-level applications dealing with virtualization, jit
code generation, and so on...
2011-02-18 22:03:03 -05:00

148 lines
3.1 KiB
C

#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
struct __fpstate {
unsigned long __x[4];
unsigned char __y[384];
unsigned long __z[12];
};
typedef struct {
unsigned long __gregs[23];
void *__fpregs;
unsigned long __reserved1[8];
} mcontext_t;
typedef struct __ucontext {
unsigned long uc_flags;
struct __ucontext *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
struct __fpstate __fpregs_mem;
} ucontext_t;
#ifdef _GNU_SOURCE
struct sigcontext {
unsigned long r8, r9, r10, r11, r12, r13, r14, r15;
unsigned long rdi, rsi, rbp, rbx, rdx, rax, rcx, rsp, rip, eflags;
unsigned short cs, gs, fs, __pad0;
unsigned long err, trapno, oldmask, cr2;
struct __fpstate *fpstate;
unsigned long __reserved1[8];
};
#endif
struct __siginfo
{
int si_signo;
int si_errno;
int si_code;
union
{
int __pad[(128 - 4*sizeof(int)) / sizeof(int)];
struct {
pid_t si_pid;
uid_t si_uid;
} __kill;
struct {
void *si_timerid;
int si_overrun;
char __pad[sizeof(uid_t) - sizeof(int)];
union sigval si_sigval;
int si_private;
} __timer;
struct {
pid_t si_pid;
uid_t si_uid;
union sigval si_sigval;
} __rt;
struct {
pid_t si_pid;
uid_t si_uid;
int si_status;
clock_t si_utime;
clock_t si_stime;
} __sigchld;
struct {
void *si_addr;
short addr_lsb;
} __sigfault;
struct {
long si_band;
int si_fd;
} __sigpoll;
} __si_fields;
};
#define si_pid __si_fields.__sigchld.si_pid
#define si_uid __si_fields.__sigchld.si_uid
#define si_status __si_fields.__sigchld.si_status
#define si_utime __si_fields.__sigchld.si_utime
#define si_stime __si_fields.__sigchld.si_stime
#define si_value __si_fields.__rt.si_sigval
#define si_addr __si_fields.__sigfault.si_addr
#define si_band __si_fields.__sigpoll.si_band
#define SA_NOCLDSTOP 1
#define SA_NOCLDWAIT 2
#define SA_SIGINFO 4
#define SA_ONSTACK 0x08000000
#define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
#define SS_ONSTACK 1
#define SS_DISABLE 2
#define SIG_BLOCK 0
#define SIG_UNBLOCK 1
#define SIG_SETMASK 2
#define SIG_HOLD ((void (*)(int)) 2)
#endif
#ifdef _GNU_SOURCE
#define NSIG 64
#endif
#define SIG_ERR ((void (*)(int))-1)
#define SIG_DFL ((void (*)(int)) 0)
#define SIG_IGN ((void (*)(int)) 1)
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#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 SIGPOLL 29
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED SIGSYS