mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-27 14:58:30 +00:00
Improve signals and memory protection
- Document sigaction() - Simplify New Technology fork() code - Testing and many bug fixes for mprotect() - Distribute Intel Xed ILD in the amalgamation - Turn Xed enums into defines to avoid DWARF bloat - Improve polyfilling of SA_SIGINFO on BSDs and fix bugs - setpgid(getpid(), getpid()) on Windows will ignore CTRL-C - Work around issues relating to NT mappings being executable - Permit automatic executable stack override via `ape_stack_pf`
This commit is contained in:
parent
c95c9d9508
commit
f684e348d4
76 changed files with 1844 additions and 1121 deletions
39
libc/calls/struct/siginfo-freebsd.internal.h
Normal file
39
libc/calls/struct/siginfo-freebsd.internal.h
Normal file
|
@ -0,0 +1,39 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_FREEBSD_H_
|
||||
#define COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_FREEBSD_H_
|
||||
#include "libc/calls/struct/sigval.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
struct siginfo_freebsd {
|
||||
int32_t si_signo;
|
||||
int32_t si_errno;
|
||||
int32_t si_code;
|
||||
int32_t si_pid;
|
||||
int32_t si_uid;
|
||||
int32_t si_status;
|
||||
void *si_addr;
|
||||
union sigval si_value;
|
||||
union {
|
||||
struct {
|
||||
int32_t si_trapno;
|
||||
};
|
||||
struct {
|
||||
int32_t si_timerid;
|
||||
int32_t si_overrun;
|
||||
};
|
||||
struct {
|
||||
int32_t si_mqd;
|
||||
};
|
||||
struct {
|
||||
long si_band;
|
||||
};
|
||||
struct {
|
||||
int64_t __pad1;
|
||||
int32_t __pad2[7];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_FREEBSD_H_ */
|
53
libc/calls/struct/siginfo-netbsd.internal.h
Normal file
53
libc/calls/struct/siginfo-netbsd.internal.h
Normal file
|
@ -0,0 +1,53 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_NETBSD_H_
|
||||
#define COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_NETBSD_H_
|
||||
#include "libc/calls/struct/sigval.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
struct siginfo_netbsd {
|
||||
int32_t si_signo;
|
||||
int32_t si_code;
|
||||
int32_t si_errno;
|
||||
int32_t __pad;
|
||||
union {
|
||||
struct { /* RT */
|
||||
int32_t si_pid;
|
||||
int32_t si_uid;
|
||||
union sigval si_value;
|
||||
};
|
||||
struct { /* chld */
|
||||
int32_t _pid;
|
||||
int32_t _uid;
|
||||
int32_t si_status;
|
||||
int64_t si_utime;
|
||||
int64_t si_stime;
|
||||
};
|
||||
struct { /* fault */
|
||||
void *si_addr;
|
||||
int32_t si_trap;
|
||||
int32_t si_trap2;
|
||||
int32_t si_trap3;
|
||||
};
|
||||
struct { /* poll */
|
||||
int64_t si_band;
|
||||
int32_t si_fd;
|
||||
};
|
||||
struct { /* syscall */
|
||||
int32_t si_sysnum;
|
||||
int32_t si_retval[2];
|
||||
int32_t si_error;
|
||||
uint64_t si_args[8];
|
||||
};
|
||||
struct { /* ptrace */
|
||||
int32_t si_pe_report_event;
|
||||
union {
|
||||
int32_t si_pe_other_pid;
|
||||
int32_t si_pe_lwp;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_NETBSD_H_ */
|
36
libc/calls/struct/siginfo-openbsd.internal.h
Normal file
36
libc/calls/struct/siginfo-openbsd.internal.h
Normal file
|
@ -0,0 +1,36 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_OPENBSD_H_
|
||||
#define COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_OPENBSD_H_
|
||||
#include "libc/calls/struct/sigval.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
struct siginfo_openbsd {
|
||||
int32_t si_signo;
|
||||
int32_t si_code;
|
||||
int32_t si_errno;
|
||||
union {
|
||||
int32_t _pad[(128 / 4) - 3];
|
||||
struct {
|
||||
int32_t si_pid;
|
||||
union {
|
||||
struct {
|
||||
int32_t si_uid;
|
||||
union sigval si_value;
|
||||
};
|
||||
struct {
|
||||
int64_t si_utime;
|
||||
int64_t si_stime;
|
||||
int32_t si_status;
|
||||
};
|
||||
};
|
||||
};
|
||||
struct {
|
||||
void *si_addr;
|
||||
int32_t si_trapno;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_OPENBSD_H_ */
|
22
libc/calls/struct/siginfo-xnu.internal.h
Normal file
22
libc/calls/struct/siginfo-xnu.internal.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_XNU_H_
|
||||
#define COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_XNU_H_
|
||||
#include "libc/calls/struct/sigval.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
struct siginfo_xnu {
|
||||
int32_t si_signo;
|
||||
int32_t si_errno;
|
||||
int32_t si_code;
|
||||
int32_t si_pid;
|
||||
int32_t si_uid;
|
||||
int32_t si_status;
|
||||
void *si_addr;
|
||||
union sigval si_value;
|
||||
int64_t si_band;
|
||||
uint64_t __pad[7];
|
||||
};
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_CALLS_STRUCT_SIGINFO_XNU_H_ */
|
|
@ -15,7 +15,7 @@ struct siginfo {
|
|||
uint32_t si_uid;
|
||||
};
|
||||
struct {
|
||||
int32_t si_timerid;
|
||||
int32_t si_timerid; /* SIGALRM */
|
||||
int32_t si_overrun;
|
||||
};
|
||||
};
|
||||
|
@ -23,7 +23,8 @@ struct siginfo {
|
|||
union sigval si_value; /* provided by third arg of sigqueue(2) */
|
||||
struct {
|
||||
int32_t si_status;
|
||||
int64_t si_utime, si_stime;
|
||||
int64_t si_utime;
|
||||
int64_t si_stime;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -39,7 +40,7 @@ struct siginfo {
|
|||
};
|
||||
};
|
||||
struct {
|
||||
int64_t si_band;
|
||||
int64_t si_band; /* SIGPOLL */
|
||||
int32_t si_fd;
|
||||
};
|
||||
struct {
|
||||
|
|
|
@ -4,43 +4,6 @@
|
|||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
union sigval_freebsd {
|
||||
int32_t sival_int;
|
||||
void *sival_ptr;
|
||||
int32_t sigval_int;
|
||||
void *sigval_ptr;
|
||||
};
|
||||
|
||||
struct siginfo_freebsd {
|
||||
int32_t si_signo;
|
||||
int32_t si_errno;
|
||||
int32_t si_code;
|
||||
int32_t si_pid;
|
||||
uint32_t si_uid;
|
||||
int32_t si_status;
|
||||
void *si_addr;
|
||||
union sigval_freebsd si_value;
|
||||
union {
|
||||
struct {
|
||||
int32_t _trapno;
|
||||
} _fault;
|
||||
struct {
|
||||
int32_t _timerid;
|
||||
int32_t _overrun;
|
||||
} _timer;
|
||||
struct {
|
||||
int32_t _mqd;
|
||||
} _mesgq;
|
||||
struct {
|
||||
int64_t _band;
|
||||
} _poll;
|
||||
struct {
|
||||
int64_t __spare1__;
|
||||
int32_t __spare2__[7];
|
||||
} __spare__;
|
||||
} _reason;
|
||||
};
|
||||
|
||||
struct stack_freebsd {
|
||||
void *ss_sp;
|
||||
uint64_t ss_size;
|
||||
|
|
42
libc/calls/struct/ucontext-openbsd.internal.h
Normal file
42
libc/calls/struct/ucontext-openbsd.internal.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_CALLS_STRUCT_UCONTEXT_OPENBSD_INTERNAL_H_
|
||||
#define COSMOPOLITAN_LIBC_CALLS_STRUCT_UCONTEXT_OPENBSD_INTERNAL_H_
|
||||
#include "libc/calls/ucontext.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
struct ucontext_openbsd {
|
||||
int64_t sc_rdi;
|
||||
int64_t sc_rsi;
|
||||
int64_t sc_rdx;
|
||||
int64_t sc_rcx;
|
||||
int64_t sc_r8;
|
||||
int64_t sc_r9;
|
||||
int64_t sc_r10;
|
||||
int64_t sc_r11;
|
||||
int64_t sc_r12;
|
||||
int64_t sc_r13;
|
||||
int64_t sc_r14;
|
||||
int64_t sc_r15;
|
||||
int64_t sc_rbp;
|
||||
int64_t sc_rbx;
|
||||
int64_t sc_rax;
|
||||
int64_t sc_gs;
|
||||
int64_t sc_fs;
|
||||
int64_t sc_es;
|
||||
int64_t sc_ds;
|
||||
int64_t sc_trapno;
|
||||
int64_t sc_err;
|
||||
int64_t sc_rip;
|
||||
int64_t sc_cs;
|
||||
int64_t sc_rflags;
|
||||
int64_t sc_rsp;
|
||||
int64_t sc_ss;
|
||||
struct FpuState *sc_fpstate;
|
||||
int32_t __sc_unused;
|
||||
int32_t sc_mask;
|
||||
int64_t sc_cookie;
|
||||
};
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_CALLS_STRUCT_UCONTEXT_OPENBSD_INTERNAL_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue