mirror of
git://git.musl-libc.org/musl
synced 2024-12-26 08:32:26 +00:00
d5a5045382
the previous values (2k min and 8k default) were too small for some archs. aarch64 reserves 4k in the signal context for future extensions and requires about 4.5k total, and powerpc reportedly uses over 2k. the new minimums are chosen to fit the saved context and also allow a minimal signal handler to run. since the default (SIGSTKSZ) has always been 6k larger than the minimum, it is also increased to maintain the 6k usable by the signal handler. this happens to be able to store one pathname buffer and should be sufficient for calling any function in libc that doesn't involve conversion between floating point and decimal representations. x86 (both 32-bit and 64-bit variants) may also need a larger minimum (around 2.5k) in the future to support avx-512, but the values on these archs are left alone for now pending further analysis. the value for PTHREAD_STACK_MIN is not increased to match MINSIGSTKSZ at this time. this is so as not to preclude applications from using extremely small thread stacks when they know they will not be handling signals. unfortunately cancellation and multi-threaded set*id() use signals as an implementation detail and therefore require a stack large enough for a signal context, so applications which use extremely small thread stacks may still need to avoid using these features.
131 lines
2.9 KiB
C
131 lines
2.9 KiB
C
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|
|
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
|
|
|
|
#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
|
|
#define MINSIGSTKSZ 2048
|
|
#define SIGSTKSZ 8192
|
|
#endif
|
|
|
|
#ifdef _GNU_SOURCE
|
|
#define REG_R8 0
|
|
#define REG_R9 1
|
|
#define REG_R10 2
|
|
#define REG_R11 3
|
|
#define REG_R12 4
|
|
#define REG_R13 5
|
|
#define REG_R14 6
|
|
#define REG_R15 7
|
|
#define REG_RDI 8
|
|
#define REG_RSI 9
|
|
#define REG_RBP 10
|
|
#define REG_RBX 11
|
|
#define REG_RDX 12
|
|
#define REG_RAX 13
|
|
#define REG_RCX 14
|
|
#define REG_RSP 15
|
|
#define REG_RIP 16
|
|
#define REG_EFL 17
|
|
#define REG_CSGSFS 18
|
|
#define REG_ERR 19
|
|
#define REG_TRAPNO 20
|
|
#define REG_OLDMASK 21
|
|
#define REG_CR2 22
|
|
#endif
|
|
|
|
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
|
|
typedef long long greg_t, gregset_t[23];
|
|
typedef struct _fpstate {
|
|
unsigned short cwd, swd, ftw, fop;
|
|
unsigned long long rip, rdp;
|
|
unsigned mxcsr, mxcr_mask;
|
|
struct {
|
|
unsigned short significand[4], exponent, padding[3];
|
|
} _st[8];
|
|
struct {
|
|
unsigned element[4];
|
|
} _xmm[16];
|
|
unsigned padding[24];
|
|
} *fpregset_t;
|
|
struct sigcontext {
|
|
unsigned long long r8, r9, r10, r11, r12, r13, r14, r15;
|
|
unsigned long long rdi, rsi, rbp, rbx, rdx, rax, rcx, rsp, rip, eflags;
|
|
unsigned short cs, gs, fs, __pad0;
|
|
unsigned long long err, trapno, oldmask, cr2;
|
|
struct _fpstate *fpstate;
|
|
unsigned long long __reserved1[8];
|
|
};
|
|
typedef struct {
|
|
gregset_t gregs;
|
|
fpregset_t fpregs;
|
|
unsigned long long __reserved1[8];
|
|
} mcontext_t;
|
|
#else
|
|
typedef struct {
|
|
unsigned long long __space[32];
|
|
} mcontext_t;
|
|
#endif
|
|
|
|
struct sigaltstack {
|
|
void *ss_sp;
|
|
int ss_flags;
|
|
size_t ss_size;
|
|
};
|
|
|
|
typedef struct __ucontext {
|
|
unsigned long uc_flags;
|
|
struct __ucontext *uc_link;
|
|
stack_t uc_stack;
|
|
mcontext_t uc_mcontext;
|
|
sigset_t uc_sigmask;
|
|
unsigned long long __fpregs_mem[64];
|
|
} ucontext_t;
|
|
|
|
#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
|
|
|
|
#endif
|
|
|
|
#define SIGHUP 1
|
|
#define SIGINT 2
|
|
#define SIGQUIT 3
|
|
#define SIGILL 4
|
|
#define SIGTRAP 5
|
|
#define SIGABRT 6
|
|
#define SIGIOT SIGABRT
|
|
#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
|
|
|
|
#define _NSIG 65
|
|
|