Make improvements

- This commit mints a new release of APE Loader v1.2 which supports
  loading ELF programs with a non-contiguous virtual address layout
  even though we've never been able to take advantage of it, due to
  how `objcopy -SO binary` fills any holes left by PT_LOAD. This'll
  change soon, since we'll have a new way of creating APE binaries.

- The undiamonding trick with our ioctl() implementation is removed
  since POSIX has been killing ioctl() for years and they've done a
  much better job. One problem it resolves, is that ioctl(FIONREAD)
  wasn't working earlier and that caused issues when building Emacs
This commit is contained in:
Justine Tunney 2023-07-11 04:29:33 -07:00
parent a1b1fdd1a4
commit 1ee2e89326
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
53 changed files with 1155 additions and 1255 deletions

View file

@ -351,6 +351,7 @@ syscon fcntl2 F_GETFD 1 1 1 1 1 1 1 1 # unix consensus & fak
syscon fcntl2 F_SETFD 2 2 2 2 2 2 2 2 # unix consensus & faked nt
syscon fcntl2 F_GETFL 3 3 3 3 3 3 3 3 # unix consensus & faked nt
syscon fcntl2 F_SETFL 4 4 4 4 4 4 4 4 # unix consensus & faked nt
syscon fcntl F_DUPFD_CLOEXEC 0x0406 0x0406 67 67 17 10 12 0x0406 # Linux 2.6.24+; faked nt
syscon fcntl2 F_SETOWN 8 8 6 6 6 6 6 -1 # bsd consensus
syscon fcntl2 F_GETOWN 9 9 5 5 5 5 5 -1 # bsd consensus
syscon fcntl2 F_SETOWN_EX 15 15 -1 -1 -1 -1 -1 -1 # TODO(jart): polyfill
@ -362,7 +363,6 @@ syscon fcntl3 F_SETNOSIGPIPE -1 -1 73 73 -1 -1 14 -1 #
syscon fcntl3 F_GETNOSIGPIPE -1 -1 74 74 -1 -1 13 -1 #
syscon fcntl3 F_GETPATH -1 -1 50 50 -1 -1 15 -1 # geth path associated with fd into buffer with PATH_MAX (1024) bytes
syscon fcntl3 FD_CLOEXEC 1 1 1 1 1 1 1 1 # unix consensus & faked nt
syscon fcntl F_DUPFD_CLOEXEC 0x0406 0x0406 67 67 17 10 12 0x0406 # Linux 2.6.24+; faked nt
syscon fcntl F_MAXFD -1 -1 -1 -1 -1 -1 11 -1 #
syscon fcntl F_NOTIFY 0x0402 0x0402 -1 -1 -1 -1 -1 -1
syscon fcntl F_SETPIPE_SZ 0x0407 0x0407 -1 -1 -1 -1 -1 -1
@ -399,14 +399,6 @@ syscon fcntl F_GETOWN_EX 0x10 0x10 -1 -1 -1 -1 -1 -1
syscon fcntl F_SETLEASE 0x0400 0x0400 -1 106 -1 -1 -1 -1
syscon fcntl F_GETLEASE 0x0401 0x0401 -1 107 -1 -1 -1 -1
syscon ioctl FIONBIO 0x5421 0x5421 0x8004667e 0x8004667e 0x8004667e 0x8004667e 0x8004667e 0x8004667e # BSD-The New Technology consensus; FIONBIO is traditional O_NONBLOCK; see F_SETFL for re-imagined api
syscon ioctl FIOASYNC 0x5452 0x5452 0x8004667d 0x8004667d 0x8004667d 0x8004667d 0x8004667d 0x8004667d # BSD-The New Technology consensus
syscon ioctl FIONREAD 0x541b 0x541b 0x4004667f 0x4004667f 0x4004667f 0x4004667f 0x4004667f 0x4004667f # BSD-The New Technology consensus; bytes waiting in FD's input buffer
syscon ioctl FIOCLEX 0x5451 0x5451 0x20006601 0x20006601 0x20006601 0x20006601 0x20006601 0x5451 # sets "close on exec" on file descriptor the fast way; faked nt
syscon ioctl FIONCLEX 0x5450 0x5450 0x20006602 0x20006602 0x20006602 0x20006602 0x20006602 0x5450 # clears "close on exec" on file descriptor the fast way; faked nt
#syscon ioctl FIONWRITE 0x0 0x0 0x0 0x0 0x40046677 0x0 0x0 -1 # [FreeBSD Generalization] bytes queued in FD's output buffer (same as TIOCOUTQ for TTY FDs; see also SO_SNDBUF)
#syscon ioctl FIONSPACE 0x0 0x0 0x0 0x0 0x40046676 0x0 0x0 -1 # [FreeBSD Generalization] capacity of FD's output buffer, e.g. equivalent to TIOCGSERIAL w/ UART
# openat(), fstatat(), linkat(), etc. magnums
#
# group name GNU/Systemd GNU/Systemd (Aarch64) XNU's Not UNIX! MacOS (Arm64) FreeBSD OpenBSD NetBSD The New Technology Commentary
@ -944,68 +936,76 @@ syscon ptrace PTRACE_EVENT_STOP 128 128 -1 -1 -1 -1 -1 -1
# group name GNU/Systemd GNU/Systemd (Aarch64) XNU's Not UNIX! MacOS (Arm64) FreeBSD OpenBSD NetBSD The New Technology Commentary
syscon clone CLONE_VM 0x00000100 0x00000100 0x00000100 0x00000100 0x00000100 0x00000100 0x00000100 0x00000100 # intentionally symbolic so we can tell if clone() is being used to create threads
# socket ioctl()
# ioctl() requests
#
# group name GNU/Systemd GNU/Systemd (Aarch64) XNU's Not UNIX! MacOS (Arm64) FreeBSD OpenBSD NetBSD The New Technology Commentary
syscon sio SIOCATMARK 0x8905 0x8905 0x40047307 0x40047307 0x40047307 0x40047307 0x40047307 0x40047307 # use sockatmark(); determines if oob is available; bsd consensus
syscon sio SIOCADDMULTI 0x8931 0x8931 0x80206931 0x80206931 0x80206931 0x80206931 0x80206931 0 # bsd consensus
syscon sio SIOCDELMULTI 0x8932 0x8932 0x80206932 0x80206932 0x80206932 0x80206932 0x80206932 0 # bsd consensus
syscon sio SIOCDIFADDR 0x8936 0x8936 0x80206919 0x80206919 0x80206919 0x80206919 0x80206919 0 # bsd consensus
syscon sio SIOCGIFADDR 0x8915 0x8915 0xc0206921 0xc0206921 0xc0206921 0xc0206921 0xc0206921 0 # bsd consensus
syscon sio SIOCGIFBRDADDR 0x8919 0x8919 0xc0206923 0xc0206923 0xc0206923 0xc0206923 0xc0206923 0 # bsd consensus
syscon sio SIOCGIFDSTADDR 0x8917 0x8917 0xc0206922 0xc0206922 0xc0206922 0xc0206922 0xc0206922 0 # bsd consensus
syscon sio SIOCGIFFLAGS 0x8913 0x8913 0xc0206911 0xc0206911 0xc0206911 0xc0206911 0xc0206911 0 # bsd consensus
syscon sio SIOCGIFMETRIC 0x891d 0x891d 0xc0206917 0xc0206917 0xc0206917 0xc0206917 0xc0206917 0 # bsd consensus
syscon sio SIOCGIFNETMASK 0x891b 0x891b 0xc0206925 0xc0206925 0xc0206925 0xc0206925 0xc0206925 0 # bsd consensus
syscon sio SIOCGPGRP 0x8904 0x8904 0x40047309 0x40047309 0x40047309 0x40047309 0x40047309 0 # bsd consensus
syscon sio SIOCSIFADDR 0x8916 0x8916 0x8020690c 0x8020690c 0x8020690c 0x8020690c 0x8020690c 0 # bsd consensus
syscon sio SIOCSIFBRDADDR 0x891a 0x891a 0x80206913 0x80206913 0x80206913 0x80206913 0x80206913 0 # bsd consensus
syscon sio SIOCSIFDSTADDR 0x8918 0x8918 0x8020690e 0x8020690e 0x8020690e 0x8020690e 0x8020690e 0 # bsd consensus
syscon sio SIOCSIFFLAGS 0x8914 0x8914 0x80206910 0x80206910 0x80206910 0x80206910 0x80206910 0 # bsd consensus
syscon sio SIOCSIFMETRIC 0x891e 0x891e 0x80206918 0x80206918 0x80206918 0x80206918 0x80206918 0 # bsd consensus
syscon sio SIOCSIFNETMASK 0x891c 0x891c 0x80206916 0x80206916 0x80206916 0x80206916 0x80206916 0 # bsd consensus
syscon sio SIOCSPGRP 0x8902 0x8902 0x80047308 0x80047308 0x80047308 0x80047308 0x80047308 0 # bsd consensus
syscon sio SIOCGIFCONF 0x8912 0x8912 0xc00c6924 0xc00c6924 0xc0106924 0xc0106924 0xc0106924 0
syscon sio SIOCGIFMTU 0x8921 0x8921 0xc0206933 0xc0206933 0xc0206933 0xc020697e 0xc020697e 0
syscon sio SIOCSIFMTU 0x8922 0x8922 0x80206934 0x80206934 0x80206934 0x8020697f 0x8020697f 0
syscon sio SIOCGIFINDEX 0x8933 0x8933 0 0 0xc0206920 0 0 0
syscon sio SIOCSIFNAME 0x8923 0x8923 0 0 0x80206928 0 0 0
syscon sio SIOCADDDLCI 0x8980 0x8980 0 0 0 0 0 0
syscon sio SIOCADDRT 0x890b 0x890b 0 0 0 0 0 0
syscon sio SIOCDARP 0x8953 0x8953 0 0 0 0 0 0
syscon sio SIOCDELDLCI 0x8981 0x8981 0 0 0 0 0 0
syscon sio SIOCDELRT 0x890c 0x890c 0 0 0 0 0 0
syscon sio SIOCDEVPRIVATE 0x89f0 0x89f0 0 0 0 0 0 0
syscon sio SIOCDRARP 0x8960 0x8960 0 0 0 0 0 0
syscon sio SIOCGARP 0x8954 0x8954 0 0 0 0 0 0
syscon sio SIOCGIFBR 0x8940 0x8940 0 0 0 0 0 0
syscon sio SIOCGIFCOUNT 0x8938 0x8938 0 0 0 0 0 0
syscon sio SIOCGIFENCAP 0x8925 0x8925 0 0 0 0 0 0
syscon sio SIOCGIFHWADDR 0x8927 0x8927 0 0 0 0 0 0
syscon sio SIOCGIFMAP 0x8970 0x8970 0 0 0 0 0 0
syscon sio SIOCGIFMEM 0x891f 0x891f 0 0 0 0 0 0
syscon sio SIOCGIFNAME 0x8910 0x8910 0 0 0 0 0 0
syscon sio SIOCGIFPFLAGS 0x8935 0x8935 0 0 0 0 0 0
syscon sio SIOCGIFSLAVE 0x8929 0x8929 0 0 0 0 0 0
syscon sio SIOCGIFTXQLEN 0x8942 0x8942 0 0 0 0 0 0
syscon sio SIOCGRARP 0x8961 0x8961 0 0 0 0 0 0
syscon sio SIOCGSTAMP 0x8906 0x8906 0 0 0 0 0 0
syscon sio SIOCGSTAMPNS 0x8907 0x8907 0 0 0 0 0 0
syscon sio SIOCPROTOPRIVATE 0x89e0 0x89e0 0 0 0 0 0 0
syscon sio SIOCRTMSG 0x890d 0x890d 0 0 0 0 0 0
syscon sio SIOCSARP 0x8955 0x8955 0 0 0 0 0 0
syscon sio SIOCSIFBR 0x8941 0x8941 0 0 0 0 0 0
syscon sio SIOCSIFENCAP 0x8926 0x8926 0 0 0 0 0 0
syscon sio SIOCSIFHWADDR 0x8924 0x8924 0 0 0 0 0 0
syscon sio SIOCSIFHWBROADCAST 0x8937 0x8937 0 0 0 0 0 0
syscon sio SIOCSIFLINK 0x8911 0x8911 0 0 0 0 0 0
syscon sio SIOCSIFMAP 0x8971 0x8971 0 0 0 0 0 0
syscon sio SIOCSIFMEM 0x8920 0x8920 0 0 0 0 0 0
syscon sio SIOCSIFPFLAGS 0x8934 0x8934 0 0 0 0 0 0
syscon sio SIOCSIFSLAVE 0x8930 0x8930 0 0 0 0 0 0
syscon sio SIOCSIFTXQLEN 0x8943 0x8943 0 0 0 0 0 0
syscon sio SIOCSRARP 0x8962 0x8962 0 0 0 0 0 0
syscon sio SIOGIFINDEX 0x8933 0x8933 0 0 0 0 0 0
syscon ioctl FIONBIO 0x5421 0x5421 0x8004667e 0x8004667e 0x8004667e 0x8004667e 0x8004667e 0x8004667e # BSD-The New Technology consensus; FIONBIO is traditional O_NONBLOCK; see F_SETFL for re-imagined api
syscon ioctl FIOASYNC 0x5452 0x5452 0x8004667d 0x8004667d 0x8004667d 0x8004667d 0x8004667d 0x8004667d # BSD-The New Technology consensus
syscon ioctl FIONREAD 0x541b 0x541b 0x4004667f 0x4004667f 0x4004667f 0x4004667f 0x4004667f 0x4004667f # BSD-The New Technology consensus; bytes waiting in FD's input buffer
syscon ioctl FIOCLEX 0x5451 0x5451 0x20006601 0x20006601 0x20006601 0x20006601 0x20006601 0x5451 # sets "close on exec" on file descriptor the fast way; faked nt
syscon ioctl FIONCLEX 0x5450 0x5450 0x20006602 0x20006602 0x20006602 0x20006602 0x20006602 0x5450 # clears "close on exec" on file descriptor the fast way; faked nt
#syscon ioctl FIONWRITE 0x0 0x0 0x0 0x0 0x40046677 0x0 0x0 -1 # [FreeBSD Generalization] bytes queued in FD's output buffer (same as TIOCOUTQ for TTY FDs; see also SO_SNDBUF)
#syscon ioctl FIONSPACE 0x0 0x0 0x0 0x0 0x40046676 0x0 0x0 -1 # [FreeBSD Generalization] capacity of FD's output buffer, e.g. equivalent to TIOCGSERIAL w/ UART
syscon ioctl SIOCGIFCONF 0x8912 0x8912 0xc00c6924 0xc00c6924 0xc0106924 0xc0106924 0xc0106924 0
syscon ioctl SIOCATMARK 0x8905 0x8905 0x40047307 0x40047307 0x40047307 0x40047307 0x40047307 0x40047307 # use sockatmark(); determines if oob is available; bsd consensus
syscon ioctl SIOCADDMULTI 0x8931 0x8931 0x80206931 0x80206931 0x80206931 0x80206931 0x80206931 0 # bsd consensus
syscon ioctl SIOCDELMULTI 0x8932 0x8932 0x80206932 0x80206932 0x80206932 0x80206932 0x80206932 0 # bsd consensus
syscon ioctl SIOCDIFADDR 0x8936 0x8936 0x80206919 0x80206919 0x80206919 0x80206919 0x80206919 0 # bsd consensus
syscon ioctl SIOCGIFADDR 0x8915 0x8915 0xc0206921 0xc0206921 0xc0206921 0xc0206921 0xc0206921 0 # bsd consensus
syscon ioctl SIOCGIFBRDADDR 0x8919 0x8919 0xc0206923 0xc0206923 0xc0206923 0xc0206923 0xc0206923 0 # bsd consensus
syscon ioctl SIOCGIFDSTADDR 0x8917 0x8917 0xc0206922 0xc0206922 0xc0206922 0xc0206922 0xc0206922 0 # bsd consensus
syscon ioctl SIOCGIFFLAGS 0x8913 0x8913 0xc0206911 0xc0206911 0xc0206911 0xc0206911 0xc0206911 0 # bsd consensus
syscon ioctl SIOCGIFMETRIC 0x891d 0x891d 0xc0206917 0xc0206917 0xc0206917 0xc0206917 0xc0206917 0 # bsd consensus
syscon ioctl SIOCGIFNETMASK 0x891b 0x891b 0xc0206925 0xc0206925 0xc0206925 0xc0206925 0xc0206925 0 # bsd consensus
syscon ioctl SIOCGPGRP 0x8904 0x8904 0x40047309 0x40047309 0x40047309 0x40047309 0x40047309 0 # bsd consensus
syscon ioctl SIOCSIFADDR 0x8916 0x8916 0x8020690c 0x8020690c 0x8020690c 0x8020690c 0x8020690c 0 # bsd consensus
syscon ioctl SIOCSIFBRDADDR 0x891a 0x891a 0x80206913 0x80206913 0x80206913 0x80206913 0x80206913 0 # bsd consensus
syscon ioctl SIOCSIFDSTADDR 0x8918 0x8918 0x8020690e 0x8020690e 0x8020690e 0x8020690e 0x8020690e 0 # bsd consensus
syscon ioctl SIOCSIFFLAGS 0x8914 0x8914 0x80206910 0x80206910 0x80206910 0x80206910 0x80206910 0 # bsd consensus
syscon ioctl SIOCSIFMETRIC 0x891e 0x891e 0x80206918 0x80206918 0x80206918 0x80206918 0x80206918 0 # bsd consensus
syscon ioctl SIOCSIFNETMASK 0x891c 0x891c 0x80206916 0x80206916 0x80206916 0x80206916 0x80206916 0 # bsd consensus
syscon ioctl SIOCSPGRP 0x8902 0x8902 0x80047308 0x80047308 0x80047308 0x80047308 0x80047308 0 # bsd consensus
syscon ioctl SIOCGIFMTU 0x8921 0x8921 0xc0206933 0xc0206933 0xc0206933 0xc020697e 0xc020697e 0
syscon ioctl SIOCSIFMTU 0x8922 0x8922 0x80206934 0x80206934 0x80206934 0x8020697f 0x8020697f 0
syscon ioctl SIOCGIFINDEX 0x8933 0x8933 0 0 0xc0206920 0 0 0
syscon ioctl SIOCSIFNAME 0x8923 0x8923 0 0 0x80206928 0 0 0
syscon ioctl SIOCADDDLCI 0x8980 0x8980 0 0 0 0 0 0
syscon ioctl SIOCADDRT 0x890b 0x890b 0 0 0 0 0 0
syscon ioctl SIOCDARP 0x8953 0x8953 0 0 0 0 0 0
syscon ioctl SIOCDELDLCI 0x8981 0x8981 0 0 0 0 0 0
syscon ioctl SIOCDELRT 0x890c 0x890c 0 0 0 0 0 0
syscon ioctl SIOCDEVPRIVATE 0x89f0 0x89f0 0 0 0 0 0 0
syscon ioctl SIOCDRARP 0x8960 0x8960 0 0 0 0 0 0
syscon ioctl SIOCGARP 0x8954 0x8954 0 0 0 0 0 0
syscon ioctl SIOCGIFBR 0x8940 0x8940 0 0 0 0 0 0
syscon ioctl SIOCGIFCOUNT 0x8938 0x8938 0 0 0 0 0 0
syscon ioctl SIOCGIFENCAP 0x8925 0x8925 0 0 0 0 0 0
syscon ioctl SIOCGIFHWADDR 0x8927 0x8927 0 0 0 0 0 0
syscon ioctl SIOCGIFMAP 0x8970 0x8970 0 0 0 0 0 0
syscon ioctl SIOCGIFMEM 0x891f 0x891f 0 0 0 0 0 0
syscon ioctl SIOCGIFNAME 0x8910 0x8910 0 0 0 0 0 0
syscon ioctl SIOCGIFPFLAGS 0x8935 0x8935 0 0 0 0 0 0
syscon ioctl SIOCGIFSLAVE 0x8929 0x8929 0 0 0 0 0 0
syscon ioctl SIOCGIFTXQLEN 0x8942 0x8942 0 0 0 0 0 0
syscon ioctl SIOCGRARP 0x8961 0x8961 0 0 0 0 0 0
syscon ioctl SIOCGSTAMP 0x8906 0x8906 0 0 0 0 0 0
syscon ioctl SIOCGSTAMPNS 0x8907 0x8907 0 0 0 0 0 0
syscon ioctl SIOCPROTOPRIVATE 0x89e0 0x89e0 0 0 0 0 0 0
syscon ioctl SIOCRTMSG 0x890d 0x890d 0 0 0 0 0 0
syscon ioctl SIOCSARP 0x8955 0x8955 0 0 0 0 0 0
syscon ioctl SIOCSIFBR 0x8941 0x8941 0 0 0 0 0 0
syscon ioctl SIOCSIFENCAP 0x8926 0x8926 0 0 0 0 0 0
syscon ioctl SIOCSIFHWADDR 0x8924 0x8924 0 0 0 0 0 0
syscon ioctl SIOCSIFHWBROADCAST 0x8937 0x8937 0 0 0 0 0 0
syscon ioctl SIOCSIFLINK 0x8911 0x8911 0 0 0 0 0 0
syscon ioctl SIOCSIFMAP 0x8971 0x8971 0 0 0 0 0 0
syscon ioctl SIOCSIFMEM 0x8920 0x8920 0 0 0 0 0 0
syscon ioctl SIOCSIFPFLAGS 0x8934 0x8934 0 0 0 0 0 0
syscon ioctl SIOCSIFSLAVE 0x8930 0x8930 0 0 0 0 0 0
syscon ioctl SIOCSIFTXQLEN 0x8943 0x8943 0 0 0 0 0 0
syscon ioctl SIOCSRARP 0x8962 0x8962 0 0 0 0 0 0
syscon ioctl SIOGIFINDEX 0x8933 0x8933 0 0 0 0 0 0
# socket() address families
#

View file

@ -3,6 +3,11 @@
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
/*
* full set of fcntl() commands
* many are only provided by a single platform
* will be equal to -1 when not available on host
*/
extern const int F_BARRIERFSYNC;
extern const int F_DUPFD;
extern const int F_DUPFD_CLOEXEC;
@ -42,34 +47,28 @@ extern const int F_WRLCK;
COSMOPOLITAN_C_END_
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#define F_DUPFD 0
#define F_GETFD 1
#define F_SETFD 2
#define F_GETFL 3
#define F_SETFL 4
/*
* portable fcntl() commands
*/
#define F_DUPFD 0
#define F_GETFD 1
#define F_SETFD 2
#define F_GETFL 3
#define F_SETFL 4
#define F_DUPFD_CLOEXEC F_DUPFD_CLOEXEC
#define F_GETLEASE F_GETLEASE
#define F_GETLK F_GETLK
#define F_GETLK64 F_GETLK64
#define F_GETOWN F_GETOWN
#define F_GETPATH F_GETPATH
#define F_GETPIPE_SZ F_GETPIPE_SZ
#define F_GETSIG F_GETSIG
#define F_MAXFD F_MAXFD
#define F_NOCACHE F_NOCACHE
#define F_NOTIFY F_NOTIFY
#define F_RDLCK F_RDLCK
#define F_SETLEASE F_SETLEASE
#define F_SETLK F_SETLK
#define F_SETLK64 F_SETLK64
#define F_SETLKW F_SETLKW
#define F_SETLKW64 F_SETLKW64
#define F_SETOWN F_SETOWN
#define F_SETPIPE_SZ F_SETPIPE_SZ
#define F_SETSIG F_SETSIG
#define F_UNLCK F_UNLCK
#define F_WRLCK F_WRLCK
/*
* posix advisory locks
* polyfilled poorly on windows
*/
#define F_SETLK F_SETLK
#define F_SETLK64 F_SETLK64
#define F_SETLKW F_SETLKW
#define F_SETLKW64 F_SETLKW64
#define F_GETLK F_GETLK
#define F_GETLK64 F_GETLK64
#define F_RDLCK F_RDLCK
#define F_UNLCK F_UNLCK
#define F_WRLCK F_WRLCK
#endif /* COSMOPOLITAN_LIBC_SYSV_CONSTS_F_H_ */

View file

@ -3,126 +3,88 @@
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
extern const uint64_t SIOCADDDLCI;
extern const uint64_t SIOCADDMULTI;
extern const uint64_t SIOCADDRT;
extern const uint64_t SIOCATMARK;
extern const uint64_t SIOCDARP;
extern const uint64_t SIOCDELDLCI;
extern const uint64_t SIOCDELMULTI;
extern const uint64_t SIOCDELRT;
extern const uint64_t SIOCDEVPRIVATE;
extern const uint64_t SIOCDIFADDR;
extern const uint64_t SIOCDRARP;
extern const uint64_t SIOCGARP;
extern const uint64_t SIOCGIFADDR;
extern const uint64_t SIOCGIFBR;
extern const uint64_t SIOCGIFBRDADDR;
extern const uint64_t SIOCGIFCONF;
extern const uint64_t SIOCGIFCOUNT;
extern const uint64_t SIOCGIFDSTADDR;
extern const uint64_t SIOCGIFENCAP;
extern const uint64_t SIOCGIFFLAGS;
extern const uint64_t SIOCGIFHWADDR;
extern const uint64_t SIOCGIFINDEX;
extern const uint64_t SIOCGIFMAP;
extern const uint64_t SIOCGIFMEM;
extern const uint64_t SIOCGIFMETRIC;
extern const uint64_t SIOCGIFMTU;
extern const uint64_t SIOCGIFNAME;
extern const uint64_t SIOCGIFNETMASK;
extern const uint64_t SIOCGIFPFLAGS;
extern const uint64_t SIOCGIFSLAVE;
extern const uint64_t SIOCGIFTXQLEN;
extern const uint64_t SIOCGPGRP;
extern const uint64_t SIOCGRARP;
extern const uint64_t SIOCGSTAMP;
extern const uint64_t SIOCGSTAMPNS;
extern const uint64_t SIOCPROTOPRIVATE;
extern const uint64_t SIOCRTMSG;
extern const uint64_t SIOCSARP;
extern const uint64_t SIOCSIFADDR;
extern const uint64_t SIOCSIFBR;
extern const uint64_t SIOCSIFBRDADDR;
extern const uint64_t SIOCSIFDSTADDR;
extern const uint64_t SIOCSIFENCAP;
extern const uint64_t SIOCSIFFLAGS;
extern const uint64_t SIOCSIFHWADDR;
extern const uint64_t SIOCSIFHWBROADCAST;
extern const uint64_t SIOCSIFLINK;
extern const uint64_t SIOCSIFMAP;
extern const uint64_t SIOCSIFMEM;
extern const uint64_t SIOCSIFMETRIC;
extern const uint64_t SIOCSIFMTU;
extern const uint64_t SIOCSIFNAME;
extern const uint64_t SIOCSIFNETMASK;
extern const uint64_t SIOCSIFPFLAGS;
extern const uint64_t SIOCSIFSLAVE;
extern const uint64_t SIOCSIFTXQLEN;
extern const uint64_t SIOCSPGRP;
extern const uint64_t SIOCSRARP;
extern const uint64_t SIOGIFINDEX;
extern const unsigned long SIOCADDDLCI;
extern const unsigned long SIOCADDMULTI;
extern const unsigned long SIOCADDRT;
extern const unsigned long SIOCATMARK; /* use sockatmark() */
extern const unsigned long SIOCDARP;
extern const unsigned long SIOCDELDLCI;
extern const unsigned long SIOCDELMULTI;
extern const unsigned long SIOCDELRT;
extern const unsigned long SIOCDEVPRIVATE;
extern const unsigned long SIOCDIFADDR;
extern const unsigned long SIOCDRARP;
extern const unsigned long SIOCGARP;
extern const unsigned long SIOCGIFADDR;
extern const unsigned long SIOCGIFBR;
extern const unsigned long SIOCGIFBRDADDR;
extern const unsigned long SIOCGIFCONF;
extern const unsigned long SIOCGIFCOUNT;
extern const unsigned long SIOCGIFDSTADDR;
extern const unsigned long SIOCGIFENCAP;
extern const unsigned long SIOCGIFFLAGS;
extern const unsigned long SIOCGIFHWADDR;
extern const unsigned long SIOCGIFINDEX;
extern const unsigned long SIOCGIFMAP;
extern const unsigned long SIOCGIFMEM;
extern const unsigned long SIOCGIFMETRIC;
extern const unsigned long SIOCGIFMTU;
extern const unsigned long SIOCGIFNAME;
extern const unsigned long SIOCGIFNETMASK;
extern const unsigned long SIOCGIFPFLAGS;
extern const unsigned long SIOCGIFSLAVE;
extern const unsigned long SIOCGIFTXQLEN;
extern const unsigned long SIOCGPGRP;
extern const unsigned long SIOCGRARP;
extern const unsigned long SIOCGSTAMP;
extern const unsigned long SIOCGSTAMPNS;
extern const unsigned long SIOCPROTOPRIVATE;
extern const unsigned long SIOCRTMSG;
extern const unsigned long SIOCSARP;
extern const unsigned long SIOCSIFADDR;
extern const unsigned long SIOCSIFBR;
extern const unsigned long SIOCSIFBRDADDR;
extern const unsigned long SIOCSIFDSTADDR;
extern const unsigned long SIOCSIFENCAP;
extern const unsigned long SIOCSIFFLAGS;
extern const unsigned long SIOCSIFHWADDR;
extern const unsigned long SIOCSIFHWBROADCAST;
extern const unsigned long SIOCSIFLINK;
extern const unsigned long SIOCSIFMAP;
extern const unsigned long SIOCSIFMEM;
extern const unsigned long SIOCSIFMETRIC;
extern const unsigned long SIOCSIFMTU;
extern const unsigned long SIOCSIFNAME;
extern const unsigned long SIOCSIFNETMASK;
extern const unsigned long SIOCSIFPFLAGS;
extern const unsigned long SIOCSIFSLAVE;
extern const unsigned long SIOCSIFTXQLEN;
extern const unsigned long SIOCSPGRP;
extern const unsigned long SIOCSRARP;
extern const unsigned long SIOGIFINDEX;
#define SIOCADDDLCI SIOCADDDLCI
#define SIOCADDMULTI SIOCADDMULTI
#define SIOCADDRT SIOCADDRT
#define SIOCATMARK SIOCATMARK
#define SIOCDARP SIOCDARP
#define SIOCDELDLCI SIOCDELDLCI
#define SIOCDELMULTI SIOCDELMULTI
#define SIOCDELRT SIOCDELRT
#define SIOCDEVPRIVATE SIOCDEVPRIVATE
#define SIOCDIFADDR SIOCDIFADDR
#define SIOCDRARP SIOCDRARP
#define SIOCGARP SIOCGARP
#define SIOCGIFADDR SIOCGIFADDR
#define SIOCGIFBR SIOCGIFBR
#define SIOCGIFBRDADDR SIOCGIFBRDADDR
#define SIOCGIFCONF SIOCGIFCONF
#define SIOCGIFCOUNT SIOCGIFCOUNT
#define SIOCGIFDSTADDR SIOCGIFDSTADDR
#define SIOCGIFENCAP SIOCGIFENCAP
#define SIOCGIFFLAGS SIOCGIFFLAGS
#define SIOCGIFHWADDR SIOCGIFHWADDR
#define SIOCGIFINDEX SIOCGIFINDEX
#define SIOCGIFMAP SIOCGIFMAP
#define SIOCGIFMEM SIOCGIFMEM
#define SIOCGIFMETRIC SIOCGIFMETRIC
#define SIOCGIFMTU SIOCGIFMTU
#define SIOCGIFNAME SIOCGIFNAME
#define SIOCGIFNETMASK SIOCGIFNETMASK
#define SIOCGIFPFLAGS SIOCGIFPFLAGS
#define SIOCGIFSLAVE SIOCGIFSLAVE
#define SIOCGIFTXQLEN SIOCGIFTXQLEN
#define SIOCGPGRP SIOCGPGRP
#define SIOCGRARP SIOCGRARP
#define SIOCGSTAMP SIOCGSTAMP
#define SIOCGSTAMPNS SIOCGSTAMPNS
#define SIOCPROTOPRIVATE SIOCPROTOPRIVATE
#define SIOCRTMSG SIOCRTMSG
#define SIOCSARP SIOCSARP
#define SIOCSIFADDR SIOCSIFADDR
#define SIOCSIFBR SIOCSIFBR
#define SIOCSIFBRDADDR SIOCSIFBRDADDR
#define SIOCSIFDSTADDR SIOCSIFDSTADDR
#define SIOCSIFENCAP SIOCSIFENCAP
#define SIOCSIFFLAGS SIOCSIFFLAGS
#define SIOCSIFHWADDR SIOCSIFHWADDR
#define SIOCSIFHWBROADCAST SIOCSIFHWBROADCAST
#define SIOCSIFLINK SIOCSIFLINK
#define SIOCSIFMAP SIOCSIFMAP
#define SIOCSIFMEM SIOCSIFMEM
#define SIOCSIFMETRIC SIOCSIFMETRIC
#define SIOCSIFMTU SIOCSIFMTU
#define SIOCSIFNAME SIOCSIFNAME
#define SIOCSIFNETMASK SIOCSIFNETMASK
#define SIOCSIFPFLAGS SIOCSIFPFLAGS
#define SIOCSIFSLAVE SIOCSIFSLAVE
#define SIOCSIFTXQLEN SIOCSIFTXQLEN
#define SIOCSPGRP SIOCSPGRP
#define SIOCSRARP SIOCSRARP
#define SIOGIFINDEX SIOGIFINDEX
#define SIOCGIFCONF SIOCGIFCONF
#define SIOCGIFADDR SIOCGIFADDR
#define SIOCSIFADDR SIOCSIFADDR
#define SIOCDIFADDR SIOCDIFADDR
#define SIOCGIFBRDADDR SIOCGIFBRDADDR
#define SIOCGIFNETMASK SIOCGIFNETMASK
#define SIOCGIFFLAGS SIOCGIFFLAGS
#define SIOCSIFFLAGS SIOCSIFFLAGS
#define SIOCGIFMETRIC SIOCGIFMETRIC
#define SIOCSIFMETRIC SIOCSIFMETRIC
#define SIOCSIFBRDADDR SIOCSIFBRDADDR
#define SIOCSIFNETMASK SIOCSIFNETMASK
#define SIOCGIFDSTADDR SIOCGIFDSTADDR
#define SIOCSIFDSTADDR SIOCSIFDSTADDR
#define SIOCGIFMTU SIOCGIFMTU
#define SIOCSIFMTU SIOCSIFMTU
#define SIOCGPGRP SIOCGPGRP
#define SIOCSPGRP SIOCSPGRP
#define SIOCADDMULTI SIOCADDMULTI
#define SIOCDELMULTI SIOCDELMULTI
COSMOPOLITAN_C_END_
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */

View file

@ -155,73 +155,74 @@ extern const uint32_t CRTSCTS;
#define FF1 FF1
#define FF2 FF2
#define CLOCAL CLOCAL
#define CREAD CREAD
#define CS5 CS5
#define CS6 CS6
#define CS7 CS7
#define CS8 CS8
#define CSIZE CSIZE
#define CSTOPB CSTOPB
#define ECHO 8
#define ECHOCTL ECHOCTL
#define ECHOE ECHOE
#define ECHOK ECHOK
#define ECHOKE ECHOKE
#define ECHONL ECHONL
#define ECHOPRT ECHOPRT
#define EXTPROC EXTPROC
#define FLUSHO FLUSHO
#define HUPCL HUPCL
#define ICANON ICANON
#define IEXTEN IEXTEN
#define ISIG ISIG
#define IUCLC IUCLC
#define IUTF8 IUTF8
#define IXOFF IXOFF
#define IXON IXON
#define NOFLSH NOFLSH
#define OCRNL OCRNL
#define OFDEL OFDEL
#define OFILL OFILL
#define OLCUC OLCUC
#define ONLCR ONLCR
#define ONLRET ONLRET
#define ONOCR ONOCR
#define PARENB PARENB
#define PARODD PARODD
#define PENDIN PENDIN
#define TIOCCONS TIOCCONS
#define TIOCGETD TIOCGETD
#define TIOCGWINSZ TIOCGWINSZ
#define TIOCNOTTY TIOCNOTTY
#define TIOCNXCL TIOCNXCL
#define TIOCOUTQ TIOCOUTQ
#define TIOCSCTTY TIOCSCTTY
#define TIOCSETD TIOCSETD
#define TIOCSIG TIOCSIG
#define TIOCSPGRP TIOCSPGRP
#define TIOCSTI TIOCSTI
#define TIOCSWINSZ TIOCSWINSZ
#define TOSTOP TOSTOP
#define VDISCARD VDISCARD
#define VEOF VEOF
#define VEOL VEOL
#define VEOL2 VEOL2
#define VERASE VERASE
#define VINTR VINTR
#define VKILL VKILL
#define VLNEXT VLNEXT
#define VMIN VMIN
#define VQUIT VQUIT
#define VREPRINT VREPRINT
#define VSTART VSTART
#define VSTOP VSTOP
#define VSUSP VSUSP
#define VSWTC VSWTC
#define VTIME VTIME
#define VWERASE VWERASE
#define XCASE XCASE
#define CLOCAL CLOCAL
#define CREAD CREAD
#define CS5 CS5
#define CS6 CS6
#define CS7 CS7
#define CS8 CS8
#define CSIZE CSIZE
#define CSTOPB CSTOPB
#define ECHO 8
#define ECHOCTL ECHOCTL
#define ECHOE ECHOE
#define ECHOK ECHOK
#define ECHOKE ECHOKE
#define ECHONL ECHONL
#define ECHOPRT ECHOPRT
#define EXTPROC EXTPROC
#define FLUSHO FLUSHO
#define HUPCL HUPCL
#define ICANON ICANON
#define IEXTEN IEXTEN
#define ISIG ISIG
#define IUCLC IUCLC
#define IUTF8 IUTF8
#define IXOFF IXOFF
#define IXON IXON
#define NOFLSH NOFLSH
#define OCRNL OCRNL
#define OFDEL OFDEL
#define OFILL OFILL
#define OLCUC OLCUC
#define ONLCR ONLCR
#define ONLRET ONLRET
#define ONOCR ONOCR
#define PARENB PARENB
#define PARODD PARODD
#define PENDIN PENDIN
#define TOSTOP TOSTOP
#define VDISCARD VDISCARD
#define VEOF VEOF
#define VEOL VEOL
#define VEOL2 VEOL2
#define VERASE VERASE
#define VINTR VINTR
#define VKILL VKILL
#define VLNEXT VLNEXT
#define VMIN VMIN
#define VQUIT VQUIT
#define VREPRINT VREPRINT
#define VSTART VSTART
#define VSTOP VSTOP
#define VSUSP VSUSP
#define VSWTC VSWTC
#define VTIME VTIME
#define VWERASE VWERASE
#define XCASE XCASE
/* terminal ioctls */
#define TIOCGWINSZ TIOCGWINSZ /* get tty dimensions */
#define TIOCSWINSZ TIOCSWINSZ /* set tty dimensions */
#define TIOCCONS TIOCCONS /* redirect terminal */
#define TIOCGETD TIOCGETD /* get line discipline */
#define TIOCSETD TIOCSETD /* set line discipline */
#define TIOCNOTTY TIOCNOTTY /* give up terminal */
#define TIOCNXCL TIOCNXCL /* disable exclusive mode */
#define TIOCOUTQ TIOCOUTQ /* bytes in output buffer */
#define TIOCSCTTY TIOCSCTTY /* make controlling terminal */
#define TIOCSIG TIOCSIG /* generate pty signal */
#define TIOCSTI TIOCSTI /* insert fake tty input */
/* tcsetattr() */
#define TCSANOW 0