mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
Favor siginfo_t over struct siginfo
This commit is contained in:
parent
c638eabfe0
commit
deaef81463
20 changed files with 37 additions and 39 deletions
|
@ -87,7 +87,7 @@ static textexit void ttyraw_onexit(void) {
|
||||||
ttyraw_disable();
|
ttyraw_disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
static relegated void ttyraw_onsig(int sig, struct siginfo *info,
|
static relegated void ttyraw_onsig(int sig, siginfo_t *info,
|
||||||
struct ucontext *ctx) {
|
struct ucontext *ctx) {
|
||||||
size_t i;
|
size_t i;
|
||||||
if (g_ttyraw.noreentry)
|
if (g_ttyraw.noreentry)
|
||||||
|
|
|
@ -421,7 +421,7 @@ static int __sigaction(int sig, const struct sigaction *act,
|
||||||
* ctx->uc_mcontext.rip += xedd.length;
|
* ctx->uc_mcontext.rip += xedd.length;
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* void OnCrash(int sig, struct siginfo *si, void *vctx) {
|
* void OnCrash(int sig, siginfo_t *si, void *vctx) {
|
||||||
* struct ucontext *ctx = vctx;
|
* struct ucontext *ctx = vctx;
|
||||||
* SkipOverFaultingInstruction(ctx);
|
* SkipOverFaultingInstruction(ctx);
|
||||||
* ContinueOnCrash(); // reinstall here in case *rip faults
|
* ContinueOnCrash(); // reinstall here in case *rip faults
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
|
|
||||||
privileged void __sigenter_wsl(int sig, struct siginfo *info, ucontext_t *ctx) {
|
privileged void __sigenter_wsl(int sig, siginfo_t *info, ucontext_t *ctx) {
|
||||||
int rva, flags;
|
int rva, flags;
|
||||||
rva = __sighandrvas[sig];
|
rva = __sighandrvas[sig];
|
||||||
if (rva >= kSigactionMinRva) {
|
if (rva >= kSigactionMinRva) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ privileged void __sigenter_netbsd(int sig, struct siginfo_netbsd *si,
|
||||||
CheckLargeStackAllocation(&uc, sizeof(uc));
|
CheckLargeStackAllocation(&uc, sizeof(uc));
|
||||||
#pragma GCC pop_options
|
#pragma GCC pop_options
|
||||||
int rva, flags;
|
int rva, flags;
|
||||||
struct siginfo si2;
|
siginfo_t si2;
|
||||||
rva = __sighandrvas[sig];
|
rva = __sighandrvas[sig];
|
||||||
if (rva >= kSigactionMinRva) {
|
if (rva >= kSigactionMinRva) {
|
||||||
flags = __sighandflags[sig];
|
flags = __sighandflags[sig];
|
||||||
|
|
|
@ -41,7 +41,7 @@ privileged void __sigenter_openbsd(int sig, struct siginfo_openbsd *openbsdinfo,
|
||||||
#pragma GCC diagnostic ignored "-Wframe-larger-than="
|
#pragma GCC diagnostic ignored "-Wframe-larger-than="
|
||||||
struct Goodies {
|
struct Goodies {
|
||||||
ucontext_t uc;
|
ucontext_t uc;
|
||||||
struct siginfo si;
|
siginfo_t si;
|
||||||
} g;
|
} g;
|
||||||
CheckLargeStackAllocation(&g, sizeof(g));
|
CheckLargeStackAllocation(&g, sizeof(g));
|
||||||
#pragma GCC pop_options
|
#pragma GCC pop_options
|
||||||
|
|
|
@ -21,8 +21,7 @@
|
||||||
#include "libc/dce.h"
|
#include "libc/dce.h"
|
||||||
#include "libc/sysv/consts/sig.h"
|
#include "libc/sysv/consts/sig.h"
|
||||||
|
|
||||||
privileged void __siginfo2cosmo(struct siginfo *si,
|
privileged void __siginfo2cosmo(siginfo_t *si, const union siginfo_meta *m) {
|
||||||
const union siginfo_meta *m) {
|
|
||||||
void *si_addr;
|
void *si_addr;
|
||||||
int32_t si_signo;
|
int32_t si_signo;
|
||||||
int32_t si_errno;
|
int32_t si_errno;
|
||||||
|
@ -93,7 +92,7 @@ privileged void __siginfo2cosmo(struct siginfo *si,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*si = (struct siginfo){0};
|
*si = (siginfo_t){0};
|
||||||
si->si_signo = si_signo;
|
si->si_signo = si_signo;
|
||||||
si->si_errno = si_errno;
|
si->si_errno = si_errno;
|
||||||
si->si_code = si_code;
|
si->si_code = si_code;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
COSMOPOLITAN_C_START_
|
COSMOPOLITAN_C_START_
|
||||||
|
|
||||||
typedef void (*sighandler_t)(int);
|
typedef void (*sighandler_t)(int);
|
||||||
typedef void (*sigaction_f)(int, struct siginfo *, void *);
|
typedef void (*sigaction_f)(int, siginfo_t *, void *);
|
||||||
|
|
||||||
struct sigaction {
|
struct sigaction {
|
||||||
union {
|
union {
|
||||||
|
|
|
@ -60,11 +60,11 @@ union metasigaction {
|
||||||
struct sigaction_xnu_out xnu_out;
|
struct sigaction_xnu_out xnu_out;
|
||||||
};
|
};
|
||||||
|
|
||||||
void __sigenter_xnu(int, struct siginfo *, void *);
|
void __sigenter_xnu(int, siginfo_t *, void *);
|
||||||
void __sigenter_wsl(int, struct siginfo *, void *);
|
void __sigenter_wsl(int, siginfo_t *, void *);
|
||||||
void __sigenter_netbsd(int, struct siginfo *, void *);
|
void __sigenter_netbsd(int, siginfo_t *, void *);
|
||||||
void __sigenter_freebsd(int, struct siginfo *, void *);
|
void __sigenter_freebsd(int, siginfo_t *, void *);
|
||||||
void __sigenter_openbsd(int, struct siginfo *, void *);
|
void __sigenter_openbsd(int, siginfo_t *, void *);
|
||||||
|
|
||||||
const char *DescribeSigaction(char[256], int, const struct sigaction *);
|
const char *DescribeSigaction(char[256], int, const struct sigaction *);
|
||||||
#define DescribeSigaction(rc, sa) DescribeSigaction(alloca(256), rc, sa)
|
#define DescribeSigaction(rc, sa) DescribeSigaction(alloca(256), rc, sa)
|
||||||
|
|
|
@ -8,14 +8,14 @@
|
||||||
COSMOPOLITAN_C_START_
|
COSMOPOLITAN_C_START_
|
||||||
|
|
||||||
union siginfo_meta {
|
union siginfo_meta {
|
||||||
struct siginfo linux;
|
siginfo_t linux;
|
||||||
struct siginfo_xnu xnu;
|
struct siginfo_xnu xnu;
|
||||||
struct siginfo_freebsd freebsd;
|
struct siginfo_freebsd freebsd;
|
||||||
struct siginfo_openbsd openbsd;
|
struct siginfo_openbsd openbsd;
|
||||||
struct siginfo_netbsd netbsd;
|
struct siginfo_netbsd netbsd;
|
||||||
};
|
};
|
||||||
|
|
||||||
void __siginfo2cosmo(struct siginfo *, const union siginfo_meta *);
|
void __siginfo2cosmo(siginfo_t *, const union siginfo_meta *);
|
||||||
|
|
||||||
COSMOPOLITAN_C_END_
|
COSMOPOLITAN_C_END_
|
||||||
#endif /* COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_META_INTERNAL_H_ */
|
#endif /* COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_META_INTERNAL_H_ */
|
||||||
|
|
|
@ -8,7 +8,7 @@ extern bool32 g_isrunningundermake;
|
||||||
|
|
||||||
void __start_fatal(const char *, int);
|
void __start_fatal(const char *, int);
|
||||||
void __restore_tty(void);
|
void __restore_tty(void);
|
||||||
void __oncrash(int, struct siginfo *, void *);
|
void __oncrash(int, siginfo_t *, void *);
|
||||||
|
|
||||||
COSMOPOLITAN_C_END_
|
COSMOPOLITAN_C_END_
|
||||||
#endif /* COSMOPOLITAN_LIBC_LOG_INTERNAL_H_ */
|
#endif /* COSMOPOLITAN_LIBC_LOG_INTERNAL_H_ */
|
||||||
|
|
|
@ -188,9 +188,9 @@ relegated static char *ShowSseRegisters(char *p, ucontext_t *ctx) {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowCrashReportHook(int, int, int, struct siginfo *, ucontext_t *);
|
void ShowCrashReportHook(int, int, int, siginfo_t *, ucontext_t *);
|
||||||
|
|
||||||
static relegated void ShowCrashReport(int err, int sig, struct siginfo *si,
|
static relegated void ShowCrashReport(int err, int sig, siginfo_t *si,
|
||||||
ucontext_t *ctx) {
|
ucontext_t *ctx) {
|
||||||
#pragma GCC push_options
|
#pragma GCC push_options
|
||||||
#pragma GCC diagnostic ignored "-Walloca-larger-than="
|
#pragma GCC diagnostic ignored "-Walloca-larger-than="
|
||||||
|
@ -267,7 +267,7 @@ static inline void SpinUnlock(atomic_uint *lock) {
|
||||||
atomic_store_explicit(lock, 0, memory_order_release);
|
atomic_store_explicit(lock, 0, memory_order_release);
|
||||||
}
|
}
|
||||||
|
|
||||||
relegated void __oncrash(int sig, struct siginfo *si, void *arg) {
|
relegated void __oncrash(int sig, siginfo_t *si, void *arg) {
|
||||||
static atomic_uint lock;
|
static atomic_uint lock;
|
||||||
BLOCK_CANCELATION;
|
BLOCK_CANCELATION;
|
||||||
SpinLock(&lock);
|
SpinLock(&lock);
|
||||||
|
|
|
@ -189,8 +189,7 @@ static relegated char *GetSymbolName(struct SymbolTable *st, int symbol) {
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static relegated void __oncrash_impl(int sig, struct siginfo *si,
|
static relegated void __oncrash_impl(int sig, siginfo_t *si, ucontext_t *ctx) {
|
||||||
ucontext_t *ctx) {
|
|
||||||
#pragma GCC push_options
|
#pragma GCC push_options
|
||||||
#pragma GCC diagnostic ignored "-Walloca-larger-than="
|
#pragma GCC diagnostic ignored "-Walloca-larger-than="
|
||||||
long size = __get_safe_size(10000, 4096);
|
long size = __get_safe_size(10000, 4096);
|
||||||
|
@ -389,7 +388,7 @@ static inline void SpinUnlock(atomic_uint *lock) {
|
||||||
atomic_store_explicit(lock, 0, memory_order_release);
|
atomic_store_explicit(lock, 0, memory_order_release);
|
||||||
}
|
}
|
||||||
|
|
||||||
relegated void __oncrash(int sig, struct siginfo *si, void *arg) {
|
relegated void __oncrash(int sig, siginfo_t *si, void *arg) {
|
||||||
static atomic_uint lock;
|
static atomic_uint lock;
|
||||||
BLOCK_CANCELATION;
|
BLOCK_CANCELATION;
|
||||||
SpinLock(&lock);
|
SpinLock(&lock);
|
||||||
|
|
|
@ -81,7 +81,7 @@ void PromisedLand(void *arg) {
|
||||||
pthread_exit(arg);
|
pthread_exit(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Teleporter(int sig, struct siginfo *si, void *ctx) {
|
void Teleporter(int sig, siginfo_t *si, void *ctx) {
|
||||||
ucontext_t *uc = ctx;
|
ucontext_t *uc = ctx;
|
||||||
sigaddset(&uc->uc_sigmask, SIGUSR1);
|
sigaddset(&uc->uc_sigmask, SIGUSR1);
|
||||||
uc->uc_mcontext.PC = (uintptr_t)PromisedLand;
|
uc->uc_mcontext.PC = (uintptr_t)PromisedLand;
|
||||||
|
@ -177,7 +177,7 @@ TEST(sigaction, testPingPongParentChildWithSigint) {
|
||||||
|
|
||||||
volatile int trapeax;
|
volatile int trapeax;
|
||||||
|
|
||||||
void OnTrap(int sig, struct siginfo *si, void *vctx) {
|
void OnTrap(int sig, siginfo_t *si, void *vctx) {
|
||||||
struct ucontext *ctx = vctx;
|
struct ucontext *ctx = vctx;
|
||||||
CheckStackIsAligned();
|
CheckStackIsAligned();
|
||||||
trapeax = ctx->uc_mcontext.rax;
|
trapeax = ctx->uc_mcontext.rax;
|
||||||
|
@ -203,7 +203,7 @@ void SkipOverFaultingInstruction(struct ucontext *ctx) {
|
||||||
ctx->uc_mcontext.rip += xedd.length;
|
ctx->uc_mcontext.rip += xedd.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnFpe(int sig, struct siginfo *si, void *vctx) {
|
void OnFpe(int sig, siginfo_t *si, void *vctx) {
|
||||||
struct ucontext *ctx = vctx;
|
struct ucontext *ctx = vctx;
|
||||||
CheckStackIsAligned();
|
CheckStackIsAligned();
|
||||||
SkipOverFaultingInstruction(ctx);
|
SkipOverFaultingInstruction(ctx);
|
||||||
|
@ -286,7 +286,7 @@ TEST(sigaction, enosys_returnsErrnoRatherThanSigsysByDefault) {
|
||||||
|
|
||||||
sig_atomic_t gotusr1;
|
sig_atomic_t gotusr1;
|
||||||
|
|
||||||
void OnSigMask(int sig, struct siginfo *si, void *ctx) {
|
void OnSigMask(int sig, siginfo_t *si, void *ctx) {
|
||||||
ucontext_t *uc = ctx;
|
ucontext_t *uc = ctx;
|
||||||
sigaddset(&uc->uc_sigmask, sig);
|
sigaddset(&uc->uc_sigmask, sig);
|
||||||
gotusr1 = true;
|
gotusr1 = true;
|
||||||
|
@ -329,7 +329,7 @@ TEST(sig_ign, discardsPendingSignalsEvenIfBlocked) {
|
||||||
ASSERT_SYS(0, 0, sigprocmask(SIG_SETMASK, &oldmask, 0));
|
ASSERT_SYS(0, 0, sigprocmask(SIG_SETMASK, &oldmask, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoMask(int sig, struct siginfo *si, void *ctx) {
|
void AutoMask(int sig, siginfo_t *si, void *ctx) {
|
||||||
sigset_t ss;
|
sigset_t ss;
|
||||||
ucontext_t *uc = ctx;
|
ucontext_t *uc = ctx;
|
||||||
sigprocmask(SIG_SETMASK, 0, &ss);
|
sigprocmask(SIG_SETMASK, 0, &ss);
|
||||||
|
@ -347,7 +347,7 @@ TEST(sigaction, signalBeingDeliveredGetsAutoMasked) {
|
||||||
EXPECT_FALSE(sigismember(&ss, SIGUSR2)); // original mask
|
EXPECT_FALSE(sigismember(&ss, SIGUSR2)); // original mask
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoDefer(int sig, struct siginfo *si, void *ctx) {
|
void NoDefer(int sig, siginfo_t *si, void *ctx) {
|
||||||
sigset_t ss;
|
sigset_t ss;
|
||||||
ucontext_t *uc = ctx;
|
ucontext_t *uc = ctx;
|
||||||
sigprocmask(SIG_SETMASK, 0, &ss);
|
sigprocmask(SIG_SETMASK, 0, &ss);
|
||||||
|
|
|
@ -48,7 +48,7 @@ TEST(signal, test) {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// signal round-trip delivery takes about 1µs
|
// signal round-trip delivery takes about 1µs
|
||||||
|
|
||||||
void OnSigTrap(int sig, struct siginfo *si, void *ctx) {
|
void OnSigTrap(int sig, siginfo_t *si, void *ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrapBench(int n) {
|
void TrapBench(int n) {
|
||||||
|
@ -79,7 +79,7 @@ BENCH(signal, trapBenchSiginfo) {
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
|
|
||||||
void OnSigHlt(int sig, struct siginfo *si, void *vctx) {
|
void OnSigHlt(int sig, siginfo_t *si, void *vctx) {
|
||||||
struct ucontext *ctx = vctx;
|
struct ucontext *ctx = vctx;
|
||||||
ctx->uc_mcontext.rip += 1;
|
ctx->uc_mcontext.rip += 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,13 +73,13 @@ void SkipOverFaultingInstruction(struct ucontext *ctx) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnSigSegv(int sig, struct siginfo *si, void *vctx) {
|
void OnSigSegv(int sig, siginfo_t *si, void *vctx) {
|
||||||
struct ucontext *ctx = vctx;
|
struct ucontext *ctx = vctx;
|
||||||
gotsegv = true;
|
gotsegv = true;
|
||||||
SkipOverFaultingInstruction(ctx);
|
SkipOverFaultingInstruction(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnSigBus(int sig, struct siginfo *si, void *vctx) {
|
void OnSigBus(int sig, siginfo_t *si, void *vctx) {
|
||||||
struct ucontext *ctx = vctx;
|
struct ucontext *ctx = vctx;
|
||||||
gotbusted = true;
|
gotbusted = true;
|
||||||
SkipOverFaultingInstruction(ctx);
|
SkipOverFaultingInstruction(ctx);
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
#include "libc/limits.h"
|
#include "libc/limits.h"
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/mem/gc.h"
|
#include "libc/mem/gc.h"
|
||||||
#include "libc/mem/gc.h"
|
|
||||||
#include "libc/mem/mem.h"
|
#include "libc/mem/mem.h"
|
||||||
#include "libc/nexgen32e/nexgen32e.h"
|
#include "libc/nexgen32e/nexgen32e.h"
|
||||||
#include "libc/nexgen32e/vendor.internal.h"
|
#include "libc/nexgen32e/vendor.internal.h"
|
||||||
|
@ -48,7 +47,7 @@
|
||||||
#include "libc/thread/thread.h"
|
#include "libc/thread/thread.h"
|
||||||
#include "libc/thread/thread2.h"
|
#include "libc/thread/thread2.h"
|
||||||
|
|
||||||
void OnUsr1(int sig, struct siginfo *si, void *vctx) {
|
void OnUsr1(int sig, siginfo_t *si, void *vctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetUp(void) {
|
void SetUp(void) {
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "libc/thread/posixthread.internal.h"
|
#include "libc/thread/posixthread.internal.h"
|
||||||
#include "libc/thread/thread.h"
|
#include "libc/thread/thread.h"
|
||||||
|
|
||||||
void OnUsr1(int sig, struct siginfo *si, void *vctx) {
|
void OnUsr1(int sig, siginfo_t *si, void *vctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetUp(void) {
|
void SetUp(void) {
|
||||||
|
|
1
third_party/libcxx/__config_site
vendored
1
third_party/libcxx/__config_site
vendored
|
@ -26,6 +26,7 @@
|
||||||
#define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
|
#define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
|
||||||
#define _LIBCPP_NO_VCRUNTIME
|
#define _LIBCPP_NO_VCRUNTIME
|
||||||
#define _LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION 1
|
#define _LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION 1
|
||||||
|
#define _LIBCPP_REMOVE_TRANSITIVE_INCLUDES
|
||||||
|
|
||||||
#ifdef MODE_DBG
|
#ifdef MODE_DBG
|
||||||
#define _LIBCPP_ENABLE_DEBUG_MODE
|
#define _LIBCPP_ENABLE_DEBUG_MODE
|
||||||
|
|
2
third_party/python/launch.c
vendored
2
third_party/python/launch.c
vendored
|
@ -96,7 +96,7 @@ LaunchPythonModule(const char *name)
|
||||||
#if USE_COSMO_CRASH
|
#if USE_COSMO_CRASH
|
||||||
void
|
void
|
||||||
ShowCrashReportHook(int err, int fd, int sig,
|
ShowCrashReportHook(int err, int fd, int sig,
|
||||||
struct siginfo *si, ucontext_t *ctx)
|
siginfo_t *si, ucontext_t *ctx)
|
||||||
{
|
{
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
PyFrameObject *frame;
|
PyFrameObject *frame;
|
||||||
|
|
|
@ -225,11 +225,11 @@ static void OnExit(void) {
|
||||||
tcsetattr(out, TCSANOW, &oldterm);
|
tcsetattr(out, TCSANOW, &oldterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnSigInt(int sig, struct siginfo *sa, void *uc) {
|
static void OnSigInt(int sig, siginfo_t *sa, void *uc) {
|
||||||
action |= INTERRUPTED;
|
action |= INTERRUPTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnSigWinch(int sig, struct siginfo *sa, void *uc) {
|
static void OnSigWinch(int sig, siginfo_t *sa, void *uc) {
|
||||||
action |= RESIZED;
|
action |= RESIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue