Fix XNU / FreeBSD / OpenBSD / RHEL5 / NT bugs

For the first time ever, all tests in this codebase now pass, when
run automatically on macos, freebsd, openbsd, rhel5, rhel7, alpine
and windows via the network using the runit and runitd build tools

- Fix vfork exec path etc.
- Add XNU opendir() support
- Add OpenBSD opendir() support
- Add Linux history to syscalls.sh
- Use copy_file_range on FreeBSD 13+
- Fix system calls with 7+ arguments
- Fix Windows with greater than 16 FDs
- Fix RUNIT.COM and RUNITD.COM flakiness
- Fix OpenBSD munmap() when files are mapped
- Fix long double so it's actually long on Windows
- Fix OpenBSD truncate() and ftruncate() thunk typo
- Let Windows fcntl() be used on socket files descriptors
- Fix Windows fstat() which had an accidental printf statement
- Fix RHEL5 CLOCK_MONOTONIC by not aliasing to CLOCK_MONOTONIC_RAW

This is wonderful. I never could have dreamed it would be possible
to get it working so well on so many platforms with tiny binaries.

Fixes #31
Fixes #25
Fixes #14
This commit is contained in:
Justine Tunney 2021-01-25 13:08:05 -08:00
parent c20dad3534
commit 45b72485ad
1032 changed files with 6083 additions and 2348 deletions

View file

@ -1,58 +1,28 @@
#ifndef COSMOPOLITAN_LIBC_SYSV_CONSTS_PT_H_
#define COSMOPOLITAN_LIBC_SYSV_CONSTS_PT_H_
#include "libc/runtime/symbolic.h"
#include "libc/sysv/consts/ptrace.h"
#define PT_ATTACH SYMBOLIC(PT_ATTACH)
#define PT_CONTINUE SYMBOLIC(PT_CONTINUE)
#define PT_DETACH SYMBOLIC(PT_DETACH)
#define PT_GETEVENTMSG SYMBOLIC(PT_GETEVENTMSG)
#define PT_GETFPREGS SYMBOLIC(PT_GETFPREGS)
#define PT_GETFPXREGS SYMBOLIC(PT_GETFPXREGS)
#define PT_GETREGS SYMBOLIC(PT_GETREGS)
#define PT_GETSIGINFO SYMBOLIC(PT_GETSIGINFO)
#define PT_KILL SYMBOLIC(PT_KILL)
#define PT_READ_D SYMBOLIC(PT_READ_D)
#define PT_READ_I SYMBOLIC(PT_READ_I)
#define PT_READ_U SYMBOLIC(PT_READ_U)
#define PT_SETFPREGS SYMBOLIC(PT_SETFPREGS)
#define PT_SETFPXREGS SYMBOLIC(PT_SETFPXREGS)
#define PT_SETOPTIONS SYMBOLIC(PT_SETOPTIONS)
#define PT_SETREGS SYMBOLIC(PT_SETREGS)
#define PT_SETSIGINFO SYMBOLIC(PT_SETSIGINFO)
#define PT_STEP SYMBOLIC(PT_STEP)
#define PT_SYSCALL SYMBOLIC(PT_SYSCALL)
#define PT_TRACE_ME SYMBOLIC(PT_TRACE_ME)
#define PT_WRITE_D SYMBOLIC(PT_WRITE_D)
#define PT_WRITE_I SYMBOLIC(PT_WRITE_I)
#define PT_WRITE_U SYMBOLIC(PT_WRITE_U)
#define PT_ATTACH PTRACE_ATTACH
#define PT_CONTINUE PTRACE_CONT
#define PT_DETACH PTRACE_DETACH
#define PT_GETEVENTMSG PTRACE_GETEVENTMSG
#define PT_GETFPREGS PTRACE_GETFPREGS
#define PT_GETFPXREGS PTRACE_GETFPXREGS
#define PT_GETREGS PTRACE_GETREGS
#define PT_GETSIGINFO PTRACE_GETSIGINFO
#define PT_KILL PTRACE_KILL
#define PT_READ_D PTRACE_PEEKDATA
#define PT_READ_I PTRACE_PEEKTEXT
#define PT_READ_U PTRACE_PEEKUSER
#define PT_SETFPREGS PTRACE_SETFPREGS
#define PT_SETFPXREGS PTRACE_SETFPXREGS
#define PT_SETOPTIONS PTRACE_SETOPTIONS
#define PT_SETREGS PTRACE_SETREGS
#define PT_SETSIGINFO PTRACE_SETSIGINFO
#define PT_STEP PTRACE_SINGLESTEP
#define PT_SYSCALL PTRACE_SYSCALL
#define PT_WRITE_D PTRACE_POKEDATA
#define PT_WRITE_I PTRACE_POKETEXT
#define PT_WRITE_U PTRACE_POKEUSER
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
hidden extern const long PT_ATTACH;
hidden extern const long PT_CONTINUE;
hidden extern const long PT_DETACH;
hidden extern const long PT_GETEVENTMSG;
hidden extern const long PT_GETFPREGS;
hidden extern const long PT_GETFPXREGS;
hidden extern const long PT_GETREGS;
hidden extern const long PT_GETSIGINFO;
hidden extern const long PT_KILL;
hidden extern const long PT_READ_D;
hidden extern const long PT_READ_I;
hidden extern const long PT_READ_U;
hidden extern const long PT_SETFPREGS;
hidden extern const long PT_SETFPXREGS;
hidden extern const long PT_SETOPTIONS;
hidden extern const long PT_SETREGS;
hidden extern const long PT_SETSIGINFO;
hidden extern const long PT_STEP;
hidden extern const long PT_SYSCALL;
hidden extern const long PT_TRACE_ME;
hidden extern const long PT_WRITE_D;
hidden extern const long PT_WRITE_I;
hidden extern const long PT_WRITE_U;
COSMOPOLITAN_C_END_
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_LIBC_SYSV_CONSTS_PT_H_ */