mirror of
https://github.com/fluencelabs/musl
synced 2025-04-25 15:22:15 +00:00
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.
114 lines
2.5 KiB
C
114 lines
2.5 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
|
|
|
|
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
|
|
typedef unsigned long long greg_t, gregset_t[32];
|
|
typedef struct {
|
|
union {
|
|
double fp_dregs[32];
|
|
struct {
|
|
float _fp_fregs;
|
|
unsigned _fp_pad;
|
|
} fp_fregs[32];
|
|
} fp_r;
|
|
} fpregset_t;
|
|
struct sigcontext
|
|
{
|
|
unsigned sc_regmask, sc_status;
|
|
unsigned long long sc_pc, sc_regs[32], sc_fpregs[32];
|
|
unsigned sc_ownedfp, sc_fpc_csr, sc_fpc_eir, sc_used_math, sc_dsp;
|
|
unsigned long long sc_mdhi, sc_mdlo;
|
|
unsigned long sc_hi1, sc_lo1, sc_hi2, sc_lo2, sc_hi3, sc_lo3;
|
|
};
|
|
typedef struct
|
|
{
|
|
unsigned regmask, status;
|
|
unsigned long long pc, regs[32], fpregs[32];
|
|
unsigned ownedfp, fpc_csr, fpc_eir, used_math, dsp;
|
|
unsigned long long mdhi, mdlo;
|
|
unsigned long hi1, lo1, hi2, lo2, hi3, lo3;
|
|
} mcontext_t;
|
|
#else
|
|
typedef struct {
|
|
unsigned __mc1[2];
|
|
unsigned long long __mc2[65];
|
|
unsigned __mc3[5];
|
|
unsigned long long __mc4[2];
|
|
unsigned __mc5[6];
|
|
} mcontext_t;
|
|
#endif
|
|
|
|
struct sigaltstack {
|
|
void *ss_sp;
|
|
size_t ss_size;
|
|
int ss_flags;
|
|
};
|
|
|
|
typedef struct __ucontext {
|
|
unsigned long uc_flags;
|
|
struct __ucontext *uc_link;
|
|
stack_t uc_stack;
|
|
mcontext_t uc_mcontext;
|
|
sigset_t uc_sigmask;
|
|
} ucontext_t;
|
|
|
|
#define SA_NOCLDSTOP 1
|
|
#define SA_NOCLDWAIT 0x10000
|
|
#define SA_SIGINFO 8
|
|
#define SA_ONSTACK 0x08000000
|
|
#define SA_RESTART 0x10000000
|
|
#define SA_NODEFER 0x40000000
|
|
#define SA_RESETHAND 0x80000000
|
|
#define SA_RESTORER 0x04000000
|
|
|
|
#undef SIG_BLOCK
|
|
#undef SIG_UNBLOCK
|
|
#undef SIG_SETMASK
|
|
#define SIG_BLOCK 1
|
|
#define SIG_UNBLOCK 2
|
|
#define SIG_SETMASK 3
|
|
|
|
#endif
|
|
|
|
#define SIGHUP 1
|
|
#define SIGINT 2
|
|
#define SIGQUIT 3
|
|
#define SIGILL 4
|
|
#define SIGTRAP 5
|
|
#define SIGABRT 6
|
|
#define SIGIOT SIGABRT
|
|
#define SIGSTKFLT 7
|
|
#define SIGFPE 8
|
|
#define SIGKILL 9
|
|
#define SIGBUS 10
|
|
#define SIGSEGV 11
|
|
#define SIGSYS 12
|
|
#define SIGPIPE 13
|
|
#define SIGALRM 14
|
|
#define SIGTERM 15
|
|
#define SIGUSR1 16
|
|
#define SIGUSR2 17
|
|
#define SIGCHLD 18
|
|
#define SIGPWR 19
|
|
#define SIGWINCH 20
|
|
#define SIGURG 21
|
|
#define SIGIO 22
|
|
#define SIGPOLL SIGIO
|
|
#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
|
|
#define SIGUNUSED SIGSYS
|
|
|
|
#define _NSIG 128
|