Get all tests passing on NetBSD

This commit is contained in:
Justine Tunney 2021-02-05 09:44:54 -08:00
parent 23ae9dfceb
commit b2cd58a322
41 changed files with 202 additions and 655 deletions

View file

@ -61,7 +61,7 @@
# build/config.mk
SHELL = /bin/sh
HOSTS ?= freebsd openbsd rhel7 rhel5 xnu win7 win10
HOSTS ?= freebsd openbsd netbsd rhel7 rhel5 xnu win7 win10
SANITY := $(shell build/sanitycheck $$PPID)
GNUMAKEFLAGS += --output-sync

View file

@ -32,9 +32,11 @@ int sys_execve(const char *prog, char *const argv[], char *const envp[]) {
for (i = 0; argv[i];) ++i;
shargs = alloca((i + 2) * sizeof(char *));
memcpy(shargs + 2, argv + 1, i * sizeof(char *));
shargs[0] = !IsFreebsd() ? _PATH_BSHELL
: firstnonnull(commandv("bash", alloca(PATH_MAX)),
_PATH_BSHELL);
if (IsFreebsd() || IsNetbsd()) {
shargs[0] = firstnonnull(commandv("bash", alloca(PATH_MAX)), _PATH_BSHELL);
} else {
shargs[0] = _PATH_BSHELL;
}
shargs[1] = prog;
return __sys_execve(shargs[0], shargs, envp);
}

View file

@ -24,8 +24,9 @@
#include "libc/sysv/consts/o.h"
#include "libc/sysv/errfuns.h"
#define XNU_F_GETPATH 50
#define XNU_MAXPATHLEN 1024
#define NETBSD_F_GETPATH 15
#define XNU_F_GETPATH 50
#define XNU_MAXPATHLEN 1024
char *sys_getcwd_xnu(char *res, size_t size) {
int fd;

View file

@ -28,7 +28,7 @@ static int __pid;
static int __getpid(void) {
if (!IsWindows()) {
return sys_getpid();
return sys_getpid().ax;
} else {
return GetCurrentProcessId();
}
@ -46,7 +46,7 @@ static void __updatepid(void) {
int getpid(void) {
static bool once;
if (__vforked) {
return sys_getpid();
return sys_getpid().ax;
}
if (!once) {
__updatepid();

View file

@ -24,7 +24,11 @@
*/
int32_t getppid(void) {
if (!IsWindows()) {
return sys_getppid();
if (!IsNetbsd()) {
return sys_getppid();
} else {
return sys_getpid().dx;
}
} else {
return sys_getppid_nt();
}

View file

@ -58,7 +58,7 @@ struct Fd {
struct Fds {
size_t f; // lowest free slot
size_t n; // monotonic capacity
struct Fd * p;
struct Fd *p;
struct Fd __init_p[OPEN_MAX];
};
@ -172,7 +172,7 @@ i32 sys_setresgid(uint32_t, uint32_t, uint32_t) hidden;
i32 sys_setresuid(uint32_t, uint32_t, uint32_t) hidden;
i32 sys_setrlimit(i32, const struct rlimit *) hidden;
i32 sys_setsid(void) hidden;
i32 sys_sigaction(i32, const void *, void *, i64) hidden;
i32 sys_sigaction(i32, const void *, void *, i64, i64) hidden;
i32 sys_sigprocmask(i32, const sigset *, sigset *, u64) hidden;
i32 sys_sigsuspend(const sigset *, u64) hidden;
i32 sys_symlinkat(const char *, i32, const char *) hidden;
@ -199,7 +199,7 @@ i64 sys_splice(i32, i64 *, i32, i64 *, u64, u32) hidden;
i64 sys_vmsplice(i32, const struct iovec *, i64, u32) hidden;
i64 sys_write(i32, const void *, u64) hidden;
u32 sys_getgid(void) hidden;
u32 sys_getpid(void) hidden;
axdx_t sys_getpid(void) hidden;
u32 sys_getsid(int) hidden;
u32 sys_gettid(void) hidden;
u32 sys_getuid(void) hidden;
@ -219,6 +219,7 @@ void __sigenter_xnu(void *, i32, i32, void *, void *) hidden wontreturn;
int sys_utimensat_xnu(int, const char *, const struct timespec *, int) hidden;
int sys_nanosleep_xnu(const struct timespec *, struct timespec *) hidden;
void __stat2linux(void *) hidden;
void __restore_rt_netbsd(void) hidden;
void __xnutrampoline(void *, i32, i32, const struct __darwin_siginfo *,
const struct __darwin_ucontext *) hidden wontreturn;

29
libc/calls/netbsdtramp.S Normal file
View file

@ -0,0 +1,29 @@
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi
Copyright 2021 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/macros.h"
.text.syscall
__restore_rt_netbsd:
mov %r15,%rdi
mov $308,%rax # setcontext
syscall
mov $-1,%edi
mov $1,%rax # exit
syscall
.endfn __restore_rt_netbsd,globl,hidden

View file

@ -34,8 +34,8 @@ sys_pipe:
xor %esi,%esi
#endif
call __sys_pipe
#if SupportsXnu()
testb IsXnu()
#if SupportsXnu() || SupportsNetbsd()
testb $XNU|NETBSD,__hostos(%rip)
jz 1f
cmp $-1,%rax
je 1f

View file

@ -22,6 +22,7 @@
#include "libc/calls/sigbits.h"
#include "libc/calls/struct/sigaction-freebsd.internal.h"
#include "libc/calls/struct/sigaction-linux.internal.h"
#include "libc/calls/struct/sigaction-netbsd.h"
#include "libc/calls/struct/sigaction-openbsd.internal.h"
#include "libc/calls/struct/sigaction-xnu.internal.h"
#include "libc/calls/struct/sigaction.h"
@ -42,6 +43,7 @@ union metasigaction {
struct sigaction_linux linux;
struct sigaction_freebsd freebsd;
struct sigaction_openbsd openbsd;
struct sigaction_netbsd netbsd;
struct sigaction_xnu_in xnu_in;
struct sigaction_xnu_out xnu_out;
};
@ -63,7 +65,7 @@ union metasigaction {
} while (0);
#endif
static void sigaction$cosmo2native(union metasigaction *sa) {
static void sigaction_cosmo2native(union metasigaction *sa) {
if (!sa) return;
switch (__hostos) {
case LINUX:
@ -82,12 +84,16 @@ static void sigaction$cosmo2native(union metasigaction *sa) {
SWITCHEROO(sa->cosmo, sa->openbsd, sa_handler, sa_flags, sa_flags,
sa_mask);
break;
case NETBSD:
SWITCHEROO(sa->cosmo, sa->netbsd, sa_handler, sa_flags, sa_flags,
sa_mask);
break;
default:
break;
}
}
static void sigaction$native2cosmo(union metasigaction *sa) {
static void sigaction_native2cosmo(union metasigaction *sa) {
if (!sa) return;
switch (__hostos) {
case LINUX:
@ -106,6 +112,10 @@ static void sigaction$native2cosmo(union metasigaction *sa) {
SWITCHEROO(sa->openbsd, sa->cosmo, sa_handler, sa_flags, sa_flags,
sa_mask);
break;
case NETBSD:
SWITCHEROO(sa->netbsd, sa->cosmo, sa_handler, sa_flags, sa_flags,
sa_mask);
break;
default:
break;
}
@ -128,9 +138,12 @@ int(sigaction)(int sig, const struct sigaction *act, struct sigaction *oldact) {
sizeof(struct sigaction) > sizeof(struct sigaction_xnu_in) &&
sizeof(struct sigaction) > sizeof(struct sigaction_xnu_out) &&
sizeof(struct sigaction) > sizeof(struct sigaction_freebsd) &&
sizeof(struct sigaction) > sizeof(struct sigaction_openbsd));
sizeof(struct sigaction) > sizeof(struct sigaction_openbsd) &&
sizeof(struct sigaction) > sizeof(struct sigaction_netbsd));
int64_t arg4, arg5;
int rc, rva, oldrva;
struct sigaction *ap, copy;
if (IsMetal()) return enosys(); /* TODO: Signals on Metal */
if (!(0 < sig && sig < NSIG)) return einval();
if (sig == SIGKILL || sig == SIGSTOP) return einval();
if (!act) {
@ -147,32 +160,43 @@ int(sigaction)(int sig, const struct sigaction *act, struct sigaction *oldact) {
return einval();
}
if (!IsWindows()) {
if (!IsMetal()) {
if (act) {
memcpy(&copy, act, sizeof(copy));
ap = &copy;
if (IsXnu()) {
ap->sa_restorer = (void *)&__xnutrampoline;
ap->sa_handler = (void *)&__xnutrampoline;
} else if (IsLinux()) {
if (!(ap->sa_flags & SA_RESTORER)) {
ap->sa_flags |= SA_RESTORER;
ap->sa_restorer = &__restore_rt;
}
} else if (rva >= kSigactionMinRva) {
ap->sa_sigaction = (sigaction_f)__sigenter;
if (act) {
memcpy(&copy, act, sizeof(copy));
ap = &copy;
if (IsXnu()) {
ap->sa_restorer = (void *)&__xnutrampoline;
ap->sa_handler = (void *)&__xnutrampoline;
} else if (IsLinux()) {
if (!(ap->sa_flags & SA_RESTORER)) {
ap->sa_flags |= SA_RESTORER;
ap->sa_restorer = &__restore_rt;
}
sigaction$cosmo2native((union metasigaction *)ap);
} else {
ap = NULL;
} else if (IsNetbsd()) {
ap->sa_sigaction = act->sa_sigaction;
} else if (rva >= kSigactionMinRva) {
ap->sa_sigaction = (sigaction_f)__sigenter;
}
rc = sys_sigaction(
sig, ap, oldact,
(!IsXnu() ? 8 /* or linux whines */
: (int64_t)(intptr_t)oldact /* from go code */));
if (rc != -1) sigaction$native2cosmo((union metasigaction *)oldact);
sigaction_cosmo2native((union metasigaction *)ap);
} else {
return enosys(); /* TODO: Signals on Metal */
ap = NULL;
}
if (IsXnu()) {
arg4 = (int64_t)(intptr_t)oldact; /* from go code */
arg5 = 0;
} else if (IsNetbsd()) {
if (ap) {
arg4 = (int64_t)(intptr_t)&__restore_rt_netbsd;
arg5 = 2; /* netbsd/lib/libc/arch/x86_64/sys/__sigtramp2.S */
} else {
arg4 = 0;
arg5 = 0; /* netbsd/lib/libc/arch/x86_64/sys/__sigtramp2.S */
}
} else {
arg4 = 8; /* or linux whines */
arg5 = 0;
}
if ((rc = sys_sigaction(sig, ap, oldact, arg4, arg5)) != -1) {
sigaction_native2cosmo((union metasigaction *)oldact);
}
} else {
if (oldact) {

View file

@ -21,6 +21,6 @@
/ Directly calls ftruncate() impl on host o/s if available.
sys_ftruncate:
mov %rsi,%rdx # openbsd:pad
mov %rsi,%rdx # netbsd+openbsd:pad
jmp __sys_ftruncate
.endfn sys_ftruncate,globl,hidden

View file

@ -22,9 +22,9 @@
/ Directly calls lseek() impl on host o/s if available.
sys_lseek:
#if SupportsOpenbsd()
testb IsOpenbsd() # openbsd:evilpad
cmovnz %rdx,%rcx
#if SupportsOpenbsd() || SupportsNetbsd()
testb $OPENBSD|NETBSD,__hostos(%rip)
cmovnz %rdx,%rcx # openbsd:evilpad
cmovnz %rsi,%rdx
cmovnz .Lzero(%rip),%rsi
#endif

View file

@ -23,7 +23,7 @@
sys_mmap:
push %rbp
mov %rsp,%rbp
push %r9 # openbsd:pad
push %r9 # netbsd+openbsd:pad
call __sys_mmap
leave
ret

View file

@ -21,6 +21,6 @@
/ Directly calls pread() impl on host o/s if available.
sys_pread:
mov %rcx,%r8 # openbsd:pad
mov %rcx,%r8 # netbsd+openbsd:pad
jmp __sys_pread
.endfn sys_pread,globl,hidden

View file

@ -21,6 +21,6 @@
/ Directly calls preadv() impl on host o/s if available.
sys_preadv:
mov %rcx,%r8 # openbsd:pad
mov %rcx,%r8 # netbsd+openbsd:pad
jmp __sys_preadv
.endfn sys_preadv,globl,hidden

View file

@ -21,6 +21,6 @@
/ Directly calls pwrite() impl on host o/s if available.
sys_pwrite:
mov %rcx,%r8 # openbsd:pad
mov %rcx,%r8 # netbsd+openbsd:pad
jmp __sys_pwrite
.endfn sys_pwrite,globl,hidden

View file

@ -21,6 +21,6 @@
/ Directly calls pwritev() impl on host o/s if available.
sys_pwritev:
mov %rcx,%r8 # openbsd:pad
mov %rcx,%r8 # netbsd+openbsd:pad
jmp __sys_pwritev
.endfn sys_pwritev,globl,hidden

View file

@ -21,6 +21,6 @@
/ Directly calls truncate() impl on host o/s if available.
sys_truncate:
mov %rsi,%rdx # openbsd:pad
mov %rsi,%rdx # netbsd+openbsd:pad
jmp __sys_truncate
.endfn sys_truncate,globl,hidden

View file

@ -33,7 +33,7 @@
#include "libc/sysv/errfuns.h"
textwindows int sys_wait4_nt(int pid, int *opt_out_wstatus, int options,
struct rusage *opt_out_rusage) {
struct rusage *opt_out_rusage) {
int pids[64];
int64_t handles[64];
uint32_t dwExitCode;

View file

@ -19,7 +19,7 @@
#include "libc/fmt/conv.h"
#include "libc/nt/struct/filetime.h"
int64_t filetimetotime(struct NtFileTime ft) {
textwindows int64_t filetimetotime(struct NtFileTime ft) {
uint64_t t = (uint64_t)ft.dwHighDateTime << 32 | ft.dwLowDateTime;
return (t - MODERNITYSECONDS * HECTONANOSECONDS) / HECTONANOSECONDS;
}

View file

@ -23,7 +23,7 @@
/**
* Converts Windows COBOL timestamp to UNIX epoch in nanoseconds.
*/
struct timespec FileTimeToTimeSpec(struct NtFileTime ft) {
textwindows struct timespec FileTimeToTimeSpec(struct NtFileTime ft) {
uint64_t x;
x = ft.dwHighDateTime;
x <<= 32;

View file

@ -21,7 +21,7 @@
#include "libc/fmt/conv.h"
#include "libc/nt/struct/filetime.h"
void FileTimeToTimeVal(struct timeval *tv, struct NtFileTime ft) {
textwindows void FileTimeToTimeVal(struct timeval *tv, struct NtFileTime ft) {
uint64_t x;
x = ft.dwHighDateTime;
x <<= 32;

View file

@ -21,6 +21,7 @@
#include "libc/calls/internal.h"
#include "libc/calls/struct/dirent.h"
#include "libc/dce.h"
#include "libc/macros.h"
#include "libc/mem/mem.h"
#include "libc/nt/enum/fileflagandattributes.h"
#include "libc/nt/enum/filetype.h"
@ -86,6 +87,17 @@ struct dirent_openbsd {
char d_name[256];
};
/**
* NetBSD getdents().
*/
struct dirent_netbsd {
uint64_t d_fileno;
uint16_t d_reclen;
uint16_t d_namlen;
uint8_t d_type;
char d_name[512];
};
static textwindows noinline DIR *opendir_nt(const char *name) {
int len;
DIR *res;
@ -205,6 +217,7 @@ struct dirent *readdir(DIR *dir) {
long basep;
struct dirent *ent;
struct dirent_bsd *bsd;
struct dirent_netbsd *nbsd;
struct dirent_openbsd *obsd;
if (!IsWindows()) {
if (dir->buf_pos >= dir->buf_end) {
@ -227,6 +240,15 @@ struct dirent *readdir(DIR *dir) {
ent->d_reclen = obsd->d_reclen;
ent->d_type = obsd->d_type;
memcpy(ent->d_name, obsd->d_name, obsd->d_namlen + 1);
} else if (IsNetbsd()) {
nbsd = (struct dirent_netbsd *)(dir->buf + dir->buf_pos);
dir->buf_pos += nbsd->d_reclen;
ent = &dir->ent;
ent->d_ino = nbsd->d_fileno;
ent->d_off = dir->tell++;
ent->d_reclen = nbsd->d_reclen;
ent->d_type = nbsd->d_type;
memcpy(ent->d_name, nbsd->d_name, MAX(256, nbsd->d_namlen + 1));
} else {
bsd = (struct dirent_bsd *)(dir->buf + dir->buf_pos);
dir->buf_pos += bsd->d_reclen;

View file

@ -26,6 +26,7 @@
#include "libc/runtime/runtime.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "libc/sysv/consts/ok.h"
#include "libc/sysv/consts/sig.h"
/**
@ -39,7 +40,11 @@ int system(const char *cmdline) {
int pid, wstatus;
sigset_t chldmask, savemask;
struct sigaction ignore, saveint, savequit;
if (!cmdline) return 1;
if (!cmdline) {
if (IsWindows()) return 1;
if (access(_PATH_BSHELL, X_OK) == 0) return 1;
return 0;
}
ignore.sa_flags = 0;
ignore.sa_handler = SIG_IGN;
sigemptyset(&ignore.sa_mask);

View file

@ -1,2 +1,2 @@
.include "o/libc/sysv/macros.internal.inc"
.scall sys_getcwd 0xfff130146ffff04f globl hidden
.scall sys_getcwd 0x128130146ffff04f globl hidden

View file

@ -1,2 +1,2 @@
.include "o/libc/sysv/macros.internal.inc"
.scall sys_getgid 0xfff02f02f202f068 globl hidden
.scall sys_getgid 0x02f02f02f202f068 globl hidden

View file

@ -1,2 +1,2 @@
.include "o/libc/sysv/macros.internal.inc"
.scall sys_getpid 0xfff0140142014027 globl hidden
.scall sys_getpid 0x0140140142014027 globl hidden

View file

@ -1,2 +1,2 @@
.include "o/libc/sysv/macros.internal.inc"
.scall sys_getuid 0xfff0180182018066 globl hidden
.scall sys_getuid 0x0180180182018066 globl hidden

View file

@ -1,2 +1,2 @@
.include "o/libc/sysv/macros.internal.inc"
.scall sys_sigaction 0xfff02e1a0202e00d globl hidden
.scall sys_sigaction 0x15402e1a0202e00d globl hidden

View file

@ -1,2 +1,2 @@
.include "o/libc/sysv/macros.internal.inc"
.scall sysctl 0xfff0ca0ca20cafff globl
.scall sysctl 0x0ca0ca0ca20cafff globl

View file

@ -2804,7 +2804,7 @@ syscon nr __NR_mmap 0x0009 0x20000c5 0x01dd 0x00c5 0x0c5 -1
syscon nr __NR_msync 0x001a 0x2000041 0x0041 0x0100 0x115 -1
syscon nr __NR_mprotect 0x000a 0x200004a 0x004a 0x004a 0x04a -1
syscon nr __NR_munmap 0x000b 0x2000049 0x0049 0x0049 0x049 -1
syscon nr __NR_sigaction 0x000d 0x200002e 0x01a0 0x002e -1 -1
syscon nr __NR_sigaction 0x000d 0x200002e 0x01a0 0x002e 0x154 -1
syscon nr __NR_sigprocmask 0x000e 0x2000030 0x0154 0x0030 0x125 -1
syscon nr __NR_ioctl 0x0010 0x2000036 0x0036 0x0036 0x036 -1
syscon nr __NR_pread 0x0011 0x2000099 0x01db 0x00ad 0x0ad -1
@ -2830,7 +2830,7 @@ syscon nr __NR_nanosleep 0x0023 -1 0x00f0 0x005b 0x1ae -1
syscon nr __NR_getitimer 0x0024 0x2000056 0x0056 0x0046 0x1aa -1
syscon nr __NR_setitimer 0x0026 0x2000053 0x0053 0x0045 0x1a9 -1
syscon nr __NR_alarm 0x0025 -1 -1 -1 -1 -1
syscon nr __NR_getpid 0x0027 0x2000014 0x0014 0x0014 -1 -1
syscon nr __NR_getpid 0x0027 0x2000014 0x0014 0x0014 0x014 -1
syscon nr __NR_sendfile 0x0028 0x2000151 0x0189 -1 -1 -1
syscon nr __NR_socket 0x0029 0x2000061 0x0061 0x0061 0x18a -1
syscon nr __NR_connect 0x002a 0x2000062 0x0062 0x0062 0x062 -1
@ -2874,7 +2874,7 @@ syscon nr __NR_fsync 0x004a 0x200005f 0x005f 0x005f 0x05f -1
syscon nr __NR_fdatasync 0x004b 0x20000bb 0x0226 0x005f 0x0f1 -1
syscon nr __NR_truncate 0x004c 0x20000c8 0x01df 0x00c8 0x0c8 -1
syscon nr __NR_ftruncate 0x004d 0x20000c9 0x01e0 0x00c9 0x0c9 -1
syscon nr __NR_getcwd 0x004f -1 0x0146 0x0130 -1 -1
syscon nr __NR_getcwd 0x004f -1 0x0146 0x0130 0x128 -1
syscon nr __NR_chdir 0x0050 0x200000c 0x000c 0x000c 0x00c -1
syscon nr __NR_fchdir 0x0051 0x200000d 0x000d 0x000d 0x00d -1
syscon nr __NR_rename 0x0052 0x2000080 0x0080 0x0080 0x080 -1
@ -2898,8 +2898,8 @@ syscon nr __NR_sysinfo 0x0063 -1 -1 -1 -1 -1
syscon nr __NR_times 0x0064 -1 -1 -1 -1 -1
syscon nr __NR_ptrace 0x0065 0x200001a 0x001a 0x001a 0x01a -1
syscon nr __NR_syslog 0x0067 -1 -1 -1 -1 -1
syscon nr __NR_getuid 0x0066 0x2000018 0x0018 0x0018 -1 -1
syscon nr __NR_getgid 0x0068 0x200002f 0x002f 0x002f -1 -1
syscon nr __NR_getuid 0x0066 0x2000018 0x0018 0x0018 0x018 -1
syscon nr __NR_getgid 0x0068 0x200002f 0x002f 0x002f 0x02f -1
syscon nr __NR_getppid 0x006e 0x2000027 0x0027 0x0027 -1 -1
syscon nr __NR_getpgrp 0x006f 0x2000051 0x0051 0x0051 0x051 -1
syscon nr __NR_setsid 0x0070 0x2000093 0x0093 0x0093 0x093 -1
@ -3138,7 +3138,7 @@ syscon nr __NR_unmount -1 0x200009f 0x0016 0x0016 0x016 -1
syscon nr __NR_issetugid -1 0x2000147 0x00fd 0x00fd -1 -1
syscon nr __NR_minherit -1 0x20000fa 0x00fa 0x00fa 0x111 -1
syscon nr __NR_pathconf -1 0x20000bf 0x00bf 0x00bf 0x0bf -1
syscon nr __NR_sysctl -1 0x20000ca -1 0x00ca -1 -1
syscon nr __NR_sysctl -1 0x20000ca -1 0x00ca 0x0ca -1
syscon nr __NR_ntp_adjtime -1 0x200020f 0x00b0 -1 0x0b0 -1
syscon nr __NR_ntp_gettime -1 0x2000210 0x00f8 -1 0x1c0 -1
syscon nr __NR_shm_unlink -1 0x200010b 0x01e3 -1 -1 -1

View file

@ -1,2 +1,2 @@
.include "libc/sysv/consts/syscon.inc"
.syscon nr __NR_getcwd 0x004f -1 0x0146 0x0130 -1 -1
.syscon nr __NR_getcwd 0x004f -1 0x0146 0x0130 0x128 -1

View file

@ -1,2 +1,2 @@
.include "libc/sysv/consts/syscon.inc"
.syscon nr __NR_getgid 0x0068 0x200002f 0x002f 0x002f -1 -1
.syscon nr __NR_getgid 0x0068 0x200002f 0x002f 0x002f 0x02f -1

View file

@ -1,2 +1,2 @@
.include "libc/sysv/consts/syscon.inc"
.syscon nr __NR_getpid 0x0027 0x2000014 0x0014 0x0014 -1 -1
.syscon nr __NR_getpid 0x0027 0x2000014 0x0014 0x0014 0x014 -1

View file

@ -1,2 +1,2 @@
.include "libc/sysv/consts/syscon.inc"
.syscon nr __NR_getuid 0x0066 0x2000018 0x0018 0x0018 -1 -1
.syscon nr __NR_getuid 0x0066 0x2000018 0x0018 0x0018 0x018 -1

View file

@ -1,2 +1,2 @@
.include "libc/sysv/consts/syscon.inc"
.syscon nr __NR_sigaction 0x000d 0x200002e 0x01a0 0x002e -1 -1
.syscon nr __NR_sigaction 0x000d 0x200002e 0x01a0 0x002e 0x154 -1

View file

@ -1,2 +1,2 @@
.include "libc/sysv/consts/syscon.inc"
.syscon nr __NR_sysctl -1 0x20000ca -1 0x00ca -1 -1
.syscon nr __NR_sysctl -1 0x20000ca -1 0x00ca 0x0ca -1

View file

@ -1,554 +0,0 @@
0 INDIR { int|sys||syscall(int code, ... register_t args[SYS_MAXSYSARGS]); }
1 STD { void|sys||exit(int rval); }
2 STD { int|sys||fork(void); }
3 STD RUMP { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }
4 STD RUMP { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }
5 STD RUMP { int|sys||open(const char *path, int flags, ... mode_t mode); }
6 STD RUMP { int|sys||close(int fd); }
7 COMPAT_50 MODULAR compat_50 { int|sys||wait4(pid_t pid, int *status, int options, struct rusage50 *rusage); }
8 COMPAT_43 MODULAR compat_43 { int|sys||creat(const char *path, mode_t mode); } ocreat
9 STD RUMP { int|sys||link(const char *path, const char *link); }
10 STD RUMP { int|sys||unlink(const char *path); }
11 OBSOL execv
12 STD RUMP { int|sys||chdir(const char *path); }
13 STD RUMP { int|sys||fchdir(int fd); }
14 COMPAT_50 MODULAR compat_50 RUMP { int|sys||mknod(const char *path, mode_t mode, uint32_t dev); }
15 STD RUMP { int|sys||chmod(const char *path, mode_t mode); }
16 STD RUMP { int|sys||chown(const char *path, uid_t uid, gid_t gid); }
17 STD { int|sys||obreak(char *nsize); } break
18 COMPAT_20 MODULAR compat_20 { int|sys||getfsstat(struct statfs12 *buf, long bufsize, int flags); }
19 COMPAT_43 MODULAR compat_43 { long|sys||lseek(int fd, long offset, int whence); } olseek
20 NOERR RUMP { pid_t|sys||getpid_with_ppid(void); } getpid
21 COMPAT_40 MODULAR compat_40 { int|sys||mount(const char *type, const char *path, int flags, void *data); }
22 STD RUMP { int|sys||unmount(const char *path, int flags); }
23 STD RUMP { int|sys||setuid(uid_t uid); }
24 NOERR RUMP { uid_t|sys||getuid_with_euid(void); } getuid
25 NOERR RUMP { uid_t|sys||geteuid(void); }
26 STD MODULAR ptrace { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }
27 STD RUMP { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }
28 STD RUMP { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }
29 STD RUMP { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
30 STD RUMP { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }
31 STD RUMP { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
32 STD RUMP { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
33 STD RUMP { int|sys||access(const char *path, int flags); }
34 STD RUMP { int|sys||chflags(const char *path, u_long flags); }
35 STD RUMP { int|sys||fchflags(int fd, u_long flags); }
36 NOERR RUMP { void|sys||sync(void); }
37 STD { int|sys||kill(pid_t pid, int signum); }
38 COMPAT_43 MODULAR compat_43 { int|sys||stat(const char *path, struct stat43 *ub); } stat43
39 NOERR RUMP { pid_t|sys||getppid(void); }
40 COMPAT_43 MODULAR compat_43 { int|sys||lstat(const char *path, struct stat43 *ub); } lstat43
41 STD RUMP { int|sys||dup(int fd); }
42 STD RUMP { int|sys||pipe(void); }
43 NOERR RUMP { gid_t|sys||getegid(void); }
44 STD { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }
45 STD RUMP { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }
46 COMPAT_13 MODULAR compat_13 { int|sys||sigaction(int signum, const struct sigaction13 *nsa, struct sigaction13 *osa); } sigaction13
47 NOERR RUMP { gid_t|sys||getgid_with_egid(void); } getgid
48 COMPAT_13 MODULAR compat_13 { int|sys||sigprocmask(int how, int mask); } sigprocmask13
49 STD RUMP { int|sys||__getlogin(char *namebuf, size_t namelen); }
50 STD RUMP { int|sys||__setlogin(const char *namebuf); }
51 STD { int|sys||acct(const char *path); }
52 COMPAT_13 MODULAR compat_13 { int|sys||sigpending(void); } sigpending13
53 COMPAT_13 MODULAR compat_13 { int|sys||sigaltstack( const struct sigaltstack13 *nss, struct sigaltstack13 *oss); } sigaltstack13
54 STD RUMP { int|sys||ioctl(int fd, u_long com, ... void *data); }
55 COMPAT_12 MODULAR compat_12 { int|sys||reboot(int opt); } oreboot
56 STD RUMP { int|sys||revoke(const char *path); }
57 STD RUMP { int|sys||symlink(const char *path, const char *link); }
58 STD RUMP { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }
59 STD { int|sys||execve(const char *path, char * const *argp, char * const *envp); }
60 STD RUMP { mode_t|sys||umask(mode_t newmask); }
61 STD RUMP { int|sys||chroot(const char *path); }
62 COMPAT_43 MODULAR compat_43 { int|sys||fstat(int fd, struct stat43 *sb); } fstat43
63 COMPAT_43 MODULAR compat_43 { int|sys||getkerninfo(int op, char *where, int *size, int arg); } ogetkerninfo
64 COMPAT_43 MODULAR compat_43 { int|sys||getpagesize(void); } ogetpagesize
65 COMPAT_12 MODULAR compat_12 { int|sys||msync(void *addr, size_t len); }
; XXX COMPAT_??? for 4.4BSD-compatible vfork(2)?
66 STD { int|sys||vfork(void); }
67 OBSOL vread
68 OBSOL vwrite
69 OBSOL sbrk
70 OBSOL sstk
71 COMPAT_43 MODULAR compat_43 { int|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long pos); } ommap
72 STD { int|sys||ovadvise(int anom); } vadvise
73 STD { int|sys||munmap(void *addr, size_t len); }
74 STD { int|sys||mprotect(void *addr, size_t len, int prot); }
75 STD { int|sys||madvise(void *addr, size_t len, int behav); }
76 OBSOL vhangup
77 OBSOL vlimit
78 STD { int|sys||mincore(void *addr, size_t len, char *vec); }
79 STD RUMP { int|sys||getgroups(int gidsetsize, gid_t *gidset); }
80 STD RUMP { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }
81 STD RUMP { int|sys||getpgrp(void); }
82 STD RUMP { int|sys||setpgid(pid_t pid, pid_t pgid); }
83 COMPAT_50 MODULAR compat_50 { int|sys||setitimer(int which, const struct itimerval50 *itv, struct itimerval50 *oitv); }
84 COMPAT_43 MODULAR compat_43 { int|sys||wait(void); } owait
85 COMPAT_12 MODULAR compat_12 { int|sys||swapon(const char *name); } oswapon
86 COMPAT_50 MODULAR compat_50 { int|sys||getitimer(int which, struct itimerval50 *itv); }
87 COMPAT_43 MODULAR compat_43 { int|sys||gethostname(char *hostname, u_int len); } ogethostname
88 COMPAT_43 MODULAR compat_43 { int|sys||sethostname(char *hostname, u_int len); } osethostname
89 COMPAT_43 MODULAR compat_43 { int|sys||getdtablesize(void); } ogetdtablesize
90 STD RUMP { int|sys||dup2(int from, int to); }
91 STD RUMP { ssize_t|sys||getrandom(void *buf, size_t buflen, unsigned int flags); }
92 STD RUMP { int|sys||fcntl(int fd, int cmd, ... void *arg); }
93 COMPAT_50 MODULAR compat_50 RUMP { int|sys||select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval50 *tv); }
94 UNIMPL setdopt
95 STD RUMP { int|sys||fsync(int fd); }
96 STD { int|sys||setpriority(int which, id_t who, int prio); }
97 COMPAT_30 MODULAR compat_30 { int|sys||socket(int domain, int type, int protocol); }
98 STD RUMP { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }
99 COMPAT_43 MODULAR compat_43 { int|sys||accept(int s, void *name, socklen_t *anamelen); } oaccept
100 STD { int|sys||getpriority(int which, id_t who); }
101 COMPAT_43 MODULAR compat_43 { int|sys||send(int s, void *buf, int len, int flags); } osend
102 COMPAT_43 MODULAR compat_43 { int|sys||recv(int s, void *buf, int len, int flags); } orecv
103 COMPAT_13 MODULAR compat_13 { int|sys||sigreturn(struct sigcontext13 *sigcntxp); } sigreturn13
104 STD RUMP { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }
105 STD RUMP { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
106 STD RUMP { int|sys||listen(int s, int backlog); }
107 OBSOL vtimes
108 COMPAT_43 MODULAR compat_43 { int|sys||sigvec(int signum, struct sigvec *nsv, struct sigvec *osv); } osigvec
109 COMPAT_43 MODULAR compat { int|sys||sigblock(int mask); } osigblock
110 COMPAT_43 MODULAR compat { int|sys||sigsetmask(int mask); } osigsetmask
111 COMPAT_13 MODULAR compat { int|sys||sigsuspend(int mask); } sigsuspend13
112 COMPAT_43 MODULAR compat_43 { int|sys||sigstack(struct sigstack *nss, struct sigstack *oss); } osigstack
113 COMPAT_43 MODULAR compat_43 { int|sys||recvmsg(int s, struct omsghdr *msg, int flags); } orecvmsg
114 COMPAT_43 MODULAR compat_43 { int|sys||sendmsg(int s, void *msg, int flags); } osendmsg
115 OBSOL vtrace
116 COMPAT_50 MODULAR compat_50 { int|sys||gettimeofday(struct timeval50 *tp, void *tzp); }
117 COMPAT_50 MODULAR compat_50 { int|sys||getrusage(int who, struct rusage50 *rusage); }
118 STD RUMP { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
119 OBSOL resuba
120 STD RUMP { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }
121 STD RUMP { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }
122 COMPAT_50 MODULAR compat_50 { int|sys||settimeofday(const struct timeval50 *tv, const void *tzp); }
123 STD RUMP { int|sys||fchown(int fd, uid_t uid, gid_t gid); }
124 STD RUMP { int|sys||fchmod(int fd, mode_t mode); }
125 COMPAT_43 MODULAR compat_43 { int|sys||recvfrom(int s, void *buf, size_t len, int flags, void *from, socklen_t *fromlenaddr); } orecvfrom
126 STD RUMP { int|sys||setreuid(uid_t ruid, uid_t euid); }
127 STD RUMP { int|sys||setregid(gid_t rgid, gid_t egid); }
128 STD RUMP { int|sys||rename(const char *from, const char *to); }
129 COMPAT_43 MODULAR compat_43 { int|sys||truncate(const char *path, long length); } otruncate
130 COMPAT_43 MODULAR compat_43 { int|sys||ftruncate(int fd, long length); } oftruncate
131 STD RUMP { int|sys||flock(int fd, int how); }
132 STD RUMP { int|sys||mkfifo(const char *path, mode_t mode); }
133 STD RUMP { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
134 STD RUMP { int|sys||shutdown(int s, int how); }
135 STD RUMP { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }
136 STD RUMP { int|sys||mkdir(const char *path, mode_t mode); }
137 STD RUMP { int|sys||rmdir(const char *path); }
138 COMPAT_50 MODULAR compat_50 RUMP { int|sys||utimes(const char *path, const struct timeval50 *tptr); }
139 OBSOL 4.2 sigreturn
140 COMPAT_50 MODULAR compat_50 { int|sys||adjtime(const struct timeval50 *delta, struct timeval50 *olddelta); }
141 COMPAT_43 MODULAR compat_43 { int|sys||getpeername(int fdes, void *asa, socklen_t *alen); } ogetpeername
142 COMPAT_43 MODULAR compat_43 { int32_t|sys||gethostid(void); } ogethostid
143 COMPAT_43 MODULAR compat_43 { int|sys||sethostid(int32_t hostid); } osethostid
144 COMPAT_43 MODULAR compat_43 { int|sys||getrlimit(int which, struct orlimit *rlp); } ogetrlimit
145 COMPAT_43 MODULAR compat_43 { int|sys||setrlimit(int which, const struct orlimit *rlp); } osetrlimit
146 COMPAT_43 MODULAR compat_43 { int|sys||killpg(int pgid, int signum); } okillpg
147 STD RUMP { int|sys||setsid(void); }
148 COMPAT_50 MODULAR compat_50_quota { int|sys||quotactl(const char *path, int cmd, int uid, void *arg); }
149 COMPAT_43 MODULAR compat_43 { int|sys||quota(void); } oquota
150 COMPAT_43 MODULAR compat_43 { int|sys||getsockname(int fdec, void *asa, socklen_t *alen); } ogetsockname
; Syscalls 151-180 inclusive are reserved for vendor-specific
; system calls. (This includes various calls added for compatibity
; with other Unix variants.)
; Some of these calls are now supported by BSD...
151 UNIMPL
152 UNIMPL
153 UNIMPL
154 UNIMPL
155 STD MODULAR nfsserver RUMP { int|sys||nfssvc(int flag, void *argp); }
156 COMPAT_43 MODULAR compat_43 { int|sys||getdirentries(int fd, char *buf, u_int count, long *basep); } ogetdirentries
157 COMPAT_20 MODULAR compat_20 { int|sys||statfs(const char *path, struct statfs12 *buf); }
158 COMPAT_20 MODULAR compat_20 { int|sys||fstatfs(int fd, struct statfs12 *buf); }
159 UNIMPL
160 UNIMPL
161 COMPAT_30 MODULAR compat_30 { int|sys||getfh(const char *fname, struct compat_30_fhandle *fhp); }
162 COMPAT_09 MODULAR compat_09 { int|sys||getdomainname(char *domainname, int len); } ogetdomainname
163 COMPAT_09 MODULAR compat_09 { int|sys||setdomainname(char *domainname, int len); } osetdomainname
164 COMPAT_09 MODULAR compat { int|sys||uname(struct outsname *name); } ouname
165 STD { int|sys||sysarch(int op, void *parms); }
166 STD { int|sys||__futex(int *uaddr, int op, int val, const struct timespec *timeout, int *uaddr2, int val2, int val3); }
167 STD { int|sys||__futex_set_robust_list(void *head, size_t len); }
168 STD { int|sys||__futex_get_robust_list(lwpid_t lwpid, void **headp, size_t *lenp); }
; XXX more generally, never on machines where sizeof(void *) != sizeof(int)
#if !defined(_LP64)
169 COMPAT_10 MODULAR compat_sysv_10 { int|sys||semsys(int which, int a2, int a3, int a4, int a5); } osemsys
#else
169 EXCL 1.0 semsys
#endif
; XXX more generally, never on machines where sizeof(void *) != sizeof(int)
#if !defined(_LP64)
170 COMPAT_10 MODULAR compat_sysv_10 { int|sys||msgsys(int which, int a2, int a3, int a4, int a5, int a6); } omsgsys
#else
170 EXCL 1.0 msgsys
#endif
; XXX more generally, never on machines where sizeof(void *) != sizeof(int)
#if !defined(_LP64)
171 COMPAT_10 MODULAR compat_sysv_10 { int|sys||shmsys(int which, int a2, int a3, int a4); } oshmsys
#else
171 EXCL 1.0 shmsys
#endif
172 UNIMPL
173 STD RUMP { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }
174 STD RUMP { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }
; For some reason, ntp_gettime doesn't want to raise SIGSYS when it's excluded.
175 COMPAT_30 MODULAR compat_30 { int|sys||ntp_gettime(struct ntptimeval30 *ntvp); }
#if defined(NTP) || !defined(_KERNEL_OPT)
176 STD { int|sys||ntp_adjtime(struct timex *tp); }
#else
176 EXCL ntp_adjtime
#endif
177 UNIMPL
178 UNIMPL
179 UNIMPL
180 UNIMPL
; Syscalls 180-199 are used by/reserved for BSD
181 STD RUMP { int|sys||setgid(gid_t gid); }
182 STD RUMP { int|sys||setegid(gid_t egid); }
183 STD RUMP { int|sys||seteuid(uid_t euid); }
184 STD MODULAR lfs { int|sys||lfs_bmapv(fsid_t *fsidp, struct block_info *blkiov, int blkcnt); }
185 STD MODULAR lfs { int|sys||lfs_markv(fsid_t *fsidp, struct block_info *blkiov, int blkcnt); }
186 STD MODULAR lfs { int|sys||lfs_segclean(fsid_t *fsidp, u_long segment); }
187 COMPAT_50 MODULAR compat_50 { int|sys||lfs_segwait(fsid_t *fsidp, struct timeval50 *tv); }
188 COMPAT_12 MODULAR compat_12 { int|sys||stat(const char *path, struct stat12 *ub); } stat12
189 COMPAT_12 MODULAR compat_12 { int|sys||fstat(int fd, struct stat12 *sb); } fstat12
190 COMPAT_12 MODULAR compat_12 { int|sys||lstat(const char *path, struct stat12 *ub); } lstat12
191 STD RUMP { long|sys||pathconf(const char *path, int name); }
192 STD RUMP { long|sys||fpathconf(int fd, int name); }
193 STD RUMP { int|sys||getsockopt2(int s, int level, int name, void *val, socklen_t *avalsize); }
194 STD RUMP { int|sys||getrlimit(int which, struct rlimit *rlp); }
195 STD RUMP { int|sys||setrlimit(int which, const struct rlimit *rlp); }
196 COMPAT_12 MODULAR compat_12 { int|sys||getdirentries(int fd, char *buf, u_int count, long *basep); }
197 STD { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }
198 INDIR { quad_t|sys||__syscall(quad_t code, ... register_t args[SYS_MAXSYSARGS]); }
199 STD RUMP { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }
200 STD RUMP { int|sys||truncate(const char *path, int PAD, off_t length); }
201 STD RUMP { int|sys||ftruncate(int fd, int PAD, off_t length); }
202 STD RUMP { int|sys||__sysctl(const int *name, u_int namelen, void *oldv, size_t *oldlenp, const void *newv, size_t newlen); }
203 STD { int|sys||mlock(const void *addr, size_t len); }
204 STD { int|sys||munlock(const void *addr, size_t len); }
205 STD { int|sys||undelete(const char *path); }
206 COMPAT_50 MODULAR compat_50 RUMP { int|sys||futimes(int fd, const struct timeval50 *tptr); }
207 STD RUMP { pid_t|sys||getpgid(pid_t pid); }
208 STD RUMP { int|sys||reboot(int opt, char *bootstr); }
209 STD RUMP { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }
;
; Syscalls 210-219 are reserved for dynamically loaded syscalls
;
210 EXTERN MODULAR openafs { int|sys||afssys(long id, long a1, long a2, long a3, long a4, long a5, long a6); }
211 UNIMPL
212 UNIMPL
213 UNIMPL
214 UNIMPL
215 UNIMPL
216 UNIMPL
217 UNIMPL
218 UNIMPL
219 UNIMPL
; System calls 220-300 are reserved for use by NetBSD
220 COMPAT_14 MODULAR compat_sysv_14 { int|sys||__semctl(int semid, int semnum, int cmd, union __semun *arg); }
221 STD MODULAR sysv_ipc { int|sys||semget(key_t key, int nsems, int semflg); }
222 STD MODULAR sysv_ipc { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }
223 STD MODULAR sysv_ipc { int|sys||semconfig(int flag); }
224 COMPAT_14 MODULAR compat_sysv_14 { int|sys||msgctl(int msqid, int cmd, struct msqid_ds14 *buf); }
225 STD MODULAR sysv_ipc { int|sys||msgget(key_t key, int msgflg); }
226 STD MODULAR sysv_ipc { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
227 STD MODULAR sysv_ipc { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
228 STD MODULAR sysv_ipc { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }
229 COMPAT_14 MODULAR compat_sysv_14 { int|sys||shmctl(int shmid, int cmd, struct shmid_ds14 *buf); }
230 STD MODULAR sysv_ipc { int|sys||shmdt(const void *shmaddr); }
231 STD MODULAR sysv_ipc { int|sys||shmget(key_t key, size_t size, int shmflg); }
232 COMPAT_50 MODULAR compat_50 { int|sys||clock_gettime(clockid_t clock_id, struct timespec50 *tp); }
233 COMPAT_50 MODULAR compat_50 { int|sys||clock_settime(clockid_t clock_id, const struct timespec50 *tp); }
234 COMPAT_50 MODULAR compat_50 { int|sys||clock_getres(clockid_t clock_id, struct timespec50 *tp); }
235 STD RUMP { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }
236 STD RUMP { int|sys||timer_delete(timer_t timerid); }
237 COMPAT_50 MODULAR compat_50 { int|sys||timer_settime(timer_t timerid, int flags, const struct itimerspec50 *value, struct itimerspec50 *ovalue); }
238 COMPAT_50 MODULAR compat_50 { int|sys||timer_gettime(timer_t timerid, struct itimerspec50 *value); }
239 STD RUMP { int|sys||timer_getoverrun(timer_t timerid); }
;
; Syscalls 240-269 are reserved for other IEEE Std1003.1b syscalls
;
240 COMPAT_50 MODULAR compat_50 { int|sys||nanosleep(const struct timespec50 *rqtp, struct timespec50 *rmtp); }
241 STD RUMP { int|sys||fdatasync(int fd); }
242 STD { int|sys||mlockall(int flags); }
243 STD { int|sys||munlockall(void); }
244 COMPAT_50 MODULAR compat_50 { int|sys||__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec50 *timeout); }
245 STD { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }
246 STD RUMP { int|sys||modctl(int cmd, void *arg); }
247 STD MODULAR ksem RUMP { int|sys||_ksem_init(unsigned int value, intptr_t *idp); }
248 STD MODULAR ksem RUMP { int|sys||_ksem_open(const char *name, int oflag, mode_t mode, unsigned int value, intptr_t *idp); }
249 STD MODULAR ksem RUMP { int|sys||_ksem_unlink(const char *name); }
250 STD MODULAR ksem RUMP { int|sys||_ksem_close(intptr_t id); }
251 STD MODULAR ksem RUMP { int|sys||_ksem_post(intptr_t id); }
252 STD MODULAR ksem RUMP { int|sys||_ksem_wait(intptr_t id); }
253 STD MODULAR ksem RUMP { int|sys||_ksem_trywait(intptr_t id); }
254 STD MODULAR ksem RUMP { int|sys||_ksem_getvalue(intptr_t id, unsigned int *value); }
255 STD MODULAR ksem RUMP { int|sys||_ksem_destroy(intptr_t id); }
256 STD MODULAR ksem RUMP { int|sys||_ksem_timedwait(intptr_t id, const struct timespec *abstime); }
257 STD MODULAR mqueue { mqd_t|sys||mq_open(const char * name, int oflag, mode_t mode, struct mq_attr *attr); }
258 STD MODULAR mqueue { int|sys||mq_close(mqd_t mqdes); }
259 STD MODULAR mqueue { int|sys||mq_unlink(const char *name); }
260 STD MODULAR mqueue { int|sys||mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); }
261 STD MODULAR mqueue { int|sys||mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat); }
262 STD MODULAR mqueue { int|sys||mq_notify(mqd_t mqdes, const struct sigevent *notification); }
263 STD MODULAR mqueue { int|sys||mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); }
264 STD MODULAR mqueue { ssize_t|sys||mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); }
265 COMPAT_50 MODULAR compat_50 { int|sys||mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec50 *abs_timeout); }
266 COMPAT_50 MODULAR compat_50 { ssize_t|sys||mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec50 *abs_timeout); }
267 UNIMPL
268 UNIMPL
269 UNIMPL
270 STD RUMP { int|sys||__posix_rename(const char *from, const char *to); }
271 STD { int|sys||swapctl(int cmd, void *arg, int misc); }
272 COMPAT_30 MODULAR compat_30 { int|sys||getdents(int fd, char *buf, size_t count); }
273 STD { int|sys||minherit(void *addr, size_t len, int inherit); }
274 STD RUMP { int|sys||lchmod(const char *path, mode_t mode); }
275 STD RUMP { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }
276 COMPAT_50 MODULAR compat_50 RUMP { int|sys||lutimes(const char *path, const struct timeval50 *tptr); }
277 STD { int|sys|13|msync(void *addr, size_t len, int flags); }
278 COMPAT_30 MODULAR compat_30 { int|sys|13|stat(const char *path, struct stat13 *ub); }
279 COMPAT_30 MODULAR compat_30 { int|sys|13|fstat(int fd, struct stat13 *sb); }
280 COMPAT_30 MODULAR compat_30 { int|sys|13|lstat(const char *path, struct stat13 *ub); }
281 STD { int|sys|14|sigaltstack( const struct sigaltstack *nss, struct sigaltstack *oss); }
282 STD { int|sys|14|vfork(void); }
283 STD RUMP { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }
284 STD RUMP { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }
285 STD RUMP { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }
286 STD RUMP { pid_t|sys||getsid(pid_t pid); }
287 STD { pid_t|sys||__clone(int flags, void *stack); }
288 STD RUMP { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }
289 STD RUMP { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
290 STD RUMP { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
291 COMPAT_16 MODULAR compat_16 { int|sys|14|sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
292 STD { int|sys|14|sigpending(sigset_t *set); }
293 STD { int|sys|14|sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
294 STD { int|sys|14|sigsuspend(const sigset_t *set); }
295 COMPAT_16 MODULAR compat_16 { int|sys|14|sigreturn(struct sigcontext *sigcntxp); }
296 STD RUMP { int|sys||__getcwd(char *bufp, size_t length); }
297 STD RUMP { int|sys||fchroot(int fd); }
298 COMPAT_30 MODULAR compat_30 { int|sys||fhopen(const struct compat_30_fhandle *fhp, int flags); }
299 COMPAT_30 MODULAR compat_30 { int|sys||fhstat(const struct compat_30_fhandle *fhp, struct stat13 *sb); }
300 COMPAT_20 MODULAR compat_20 { int|sys||fhstatfs(const struct compat_30_fhandle *fhp, struct statfs12 *buf); }
301 COMPAT_50 MODULAR compat_sysv_50 { int|sys|13|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }
302 COMPAT_50 MODULAR compat_sysv_50 { int|sys|13|msgctl(int msqid, int cmd, struct msqid_ds *buf); }
303 COMPAT_50 MODULAR compat_sysv_50 { int|sys|13|shmctl(int shmid, int cmd, struct shmid_ds13 *buf); }
304 STD RUMP { int|sys||lchflags(const char *path, u_long flags); }
305 NOERR RUMP { int|sys||issetugid(void); }
306 STD RUMP { int|sys||utrace(const char *label, void *addr, size_t len); }
307 STD { int|sys||getcontext(struct __ucontext *ucp); }
308 STD { int|sys||setcontext(const struct __ucontext *ucp); }
309 STD { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }
310 STD { int|sys||_lwp_exit(void); }
311 STD { lwpid_t|sys||_lwp_self(void); }
312 STD { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }
313 STD { int|sys||_lwp_suspend(lwpid_t target); }
314 STD { int|sys||_lwp_continue(lwpid_t target); }
315 STD { int|sys||_lwp_wakeup(lwpid_t target); }
316 STD { void *|sys||_lwp_getprivate(void); }
317 STD { void|sys||_lwp_setprivate(void *ptr); }
318 STD { int|sys||_lwp_kill(lwpid_t target, int signo); }
319 STD { int|sys||_lwp_detach(lwpid_t target); }
320 COMPAT_50 MODULAR compat_50 { int|sys||_lwp_park(const struct timespec50 *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
321 STD { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }
322 STD { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }
323 STD { int|sys||_lwp_setname(lwpid_t target, const char *name); }
324 STD { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }
325 STD { int|sys||_lwp_ctl(int features, struct lwpctl **address); }
; Syscalls 326-339 reserved for LWP syscalls.
326 UNIMPL
327 UNIMPL
328 UNIMPL
329 UNIMPL
; SA system calls.
330 COMPAT_60 MODULAR compat_60 { int|sys||sa_register(void *newv, void **oldv, int flags, ssize_t stackinfo_offset); }
331 COMPAT_60 MODULAR compat_60 { int|sys||sa_stacks(int num, stack_t *stacks); }
332 COMPAT_60 MODULAR compat_60 { int|sys||sa_enable(void); }
333 COMPAT_60 MODULAR compat_60 { int|sys||sa_setconcurrency(int concurrency); }
334 COMPAT_60 MODULAR compat_60 { int|sys||sa_yield(void); }
335 COMPAT_60 MODULAR compat_60 { int|sys||sa_preempt(int sa_id); }
336 OBSOL sys_sa_unblockyield
;
; Syscalls 337-339 are reserved for other scheduler activation syscalls.
;
337 UNIMPL
338 UNIMPL
339 UNIMPL
340 STD { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }
341 OBSOL sys_pmc_get_info
342 OBSOL sys_pmc_control
343 STD { int|sys||rasctl(void *addr, size_t len, int op); }
344 STD RUMP { int|sys||kqueue(void); }
345 COMPAT_50 MODULAR compat_50 RUMP { int|sys||kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec50 *timeout); }
; Scheduling system calls.
346 STD { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }
347 STD { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }
348 STD { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }
349 STD { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }
350 STD { int|sys||sched_yield(void); }
351 STD { int|sys||_sched_protect(int priority); }
352 UNIMPL
353 UNIMPL
354 STD RUMP { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }
355 STD { int|sys||uuidgen(struct uuid *store, int count); }
356 COMPAT_90 MODULAR compat_90 { int|sys||getvfsstat(struct statvfs90 *buf, size_t bufsize, int flags); }
357 COMPAT_90 MODULAR compat_90 { int|sys||statvfs1(const char *path, struct statvfs90 *buf, int flags); }
358 COMPAT_90 MODULAR compat_90 { int|sys||fstatvfs1(int fd, struct statvfs90 *buf, int flags); }
359 COMPAT_30 MODULAR compat_30 { int|sys||fhstatvfs1( const struct compat_30_fhandle *fhp, struct statvfs90 *buf, int flags); }
360 STD RUMP { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
361 STD RUMP { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
362 STD RUMP { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
363 STD RUMP { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
364 STD RUMP { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
365 STD RUMP { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
366 STD RUMP { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
367 STD RUMP { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
368 STD RUMP { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
369 STD RUMP { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
370 STD RUMP { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
371 STD RUMP { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
372 STD RUMP { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
373 COMPAT_50 MODULAR compat_50 RUMP { int|sys||pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec50 *ts, const sigset_t *mask); }
374 COMPAT_50 MODULAR compat_50 RUMP { int|sys||pollts(struct pollfd *fds, u_int nfds, const struct timespec50 *ts, const sigset_t *mask); }
375 STD RUMP { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
376 STD RUMP { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
377 STD RUMP { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }
378 STD RUMP { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }
379 STD RUMP { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }
380 STD RUMP { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }
381 STD RUMP { int|sys||listxattr(const char *path, char *list, size_t size); }
382 STD RUMP { int|sys||llistxattr(const char *path, char *list, size_t size); }
383 STD RUMP { int|sys||flistxattr(int fd, char *list, size_t size); }
384 STD RUMP { int|sys||removexattr(const char *path, const char *name); }
385 STD RUMP { int|sys||lremovexattr(const char *path, const char *name); }
386 STD RUMP { int|sys||fremovexattr(int fd, const char *name); }
387 COMPAT_50 MODULAR compat_50 RUMP { int|sys|30|stat(const char *path, struct stat30 *ub); }
388 COMPAT_50 MODULAR compat_50 RUMP { int|sys|30|fstat(int fd, struct stat30 *sb); }
389 COMPAT_50 MODULAR compat_50 RUMP { int|sys|30|lstat(const char *path, struct stat30 *ub); }
390 STD RUMP { int|sys|30|getdents(int fd, char *buf, size_t count); }
391 IGNORED old posix_fadvise
392 COMPAT_30 MODULAR compat_30 { int|sys|30|fhstat(const struct compat_30_fhandle *fhp, struct stat30 *sb); }
393 COMPAT_50 MODULAR compat_30 { int|sys|30|ntp_gettime(struct ntptimeval50 *ntvp); }
394 STD RUMP { int|sys|30|socket(int domain, int type, int protocol); }
395 STD RUMP { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }
396 STD RUMP { int|sys|40|fhopen(const void *fhp, size_t fh_size, int flags); }
397 COMPAT_90 MODULAR compat_90 { int|sys||fhstatvfs1(const void *fhp, size_t fh_size, struct statvfs90 *buf, int flags); }
398 COMPAT_50 MODULAR compat_50 RUMP { int|sys|40|fhstat(const void *fhp, size_t fh_size, struct stat30 *sb); }
; Asynchronous I/O system calls
399 STD MODULAR aio RUMP { int|sys||aio_cancel(int fildes, struct aiocb *aiocbp); }
400 STD MODULAR aio RUMP { int|sys||aio_error(const struct aiocb *aiocbp); }
401 STD MODULAR aio RUMP { int|sys||aio_fsync(int op, struct aiocb *aiocbp); }
402 STD MODULAR aio RUMP { int|sys||aio_read(struct aiocb *aiocbp); }
403 STD MODULAR aio RUMP { int|sys||aio_return(struct aiocb *aiocbp); }
404 COMPAT_50 MODULAR compat { int|sys||aio_suspend(const struct aiocb *const *list, int nent, const struct timespec50 *timeout); }
405 STD MODULAR aio RUMP { int|sys||aio_write(struct aiocb *aiocbp); }
406 STD MODULAR aio RUMP { int|sys||lio_listio(int mode, struct aiocb *const *list, int nent, struct sigevent *sig); }
407 UNIMPL
408 UNIMPL
409 UNIMPL
410 STD RUMP { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }
411 STD { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }
; Processor-sets system calls
412 STD { int|sys||pset_create(psetid_t *psid); }
413 STD { int|sys||pset_destroy(psetid_t psid); }
414 STD { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }
415 STD { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }
416 NOERR RUMP { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }
417 STD RUMP { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
418 STD RUMP { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }
419 STD RUMP { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }
420 STD RUMP { int|sys|50|utimes(const char *path, const struct timeval *tptr); }
421 STD RUMP { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }
422 STD MODULAR lfs { int|sys|50|lfs_segwait(fsid_t *fsidp, struct timeval *tv); }
423 STD RUMP { int|sys|50|futimes(int fd, const struct timeval *tptr); }
424 STD RUMP { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }
425 STD RUMP { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
426 STD RUMP { int|sys|50|getitimer(int which, struct itimerval *itv); }
427 STD RUMP { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }
428 STD RUMP { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }
429 STD RUMP { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }
430 STD RUMP { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
431 STD { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }
432 STD MODULAR mqueue { int|sys|50|mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
433 STD MODULAR mqueue { ssize_t|sys|50|mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
434 COMPAT_60 MODULAR compat_60 { int|sys||_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
435 STD RUMP { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }
436 STD RUMP { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
437 STD RUMP { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
438 STD MODULAR aio RUMP { int|sys|50|aio_suspend( const struct aiocb *const *list, int nent, const struct timespec *timeout); }
439 STD RUMP { int|sys|50|stat(const char *path, struct stat *ub); }
440 STD RUMP { int|sys|50|fstat(int fd, struct stat *sb); }
441 STD RUMP { int|sys|50|lstat(const char *path, struct stat *ub); }
442 STD MODULAR sysv_ipc { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }
443 STD MODULAR sysv_ipc { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }
444 STD MODULAR sysv_ipc { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }
445 STD { int|sys|50|getrusage(int who, struct rusage *rusage); }
446 STD RUMP { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
447 STD RUMP { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }
#if defined(NTP) || !defined(_KERNEL_OPT)
448 STD { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }
#else
448 EXCL ___ntp_gettime50
#endif
449 STD { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
450 STD RUMP { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }
451 STD RUMP { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }
; 452 only ever appeared in 5.99.x and can be reused after netbsd-7
452 OBSOL 5.99 quotactl
453 STD RUMP { int|sys||pipe2(int *fildes, int flags); }
454 STD RUMP { int|sys||dup3(int from, int to, int flags); }
455 STD RUMP { int|sys||kqueue1(int flags); }
456 STD RUMP { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }
457 STD RUMP { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }
458 STD RUMP { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }
459 STD RUMP { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }
460 STD RUMP { int|sys||mknodat(int fd, const char *path, mode_t mode, int PAD, dev_t dev); }
461 STD RUMP { int|sys||mkdirat(int fd, const char *path, mode_t mode); }
462 STD RUMP { int|sys||faccessat(int fd, const char *path, int amode, int flag); }
463 STD RUMP { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }
464 STD RUMP { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }
465 STD { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }
466 STD RUMP { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }
467 STD RUMP { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }
468 STD RUMP { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }
469 STD RUMP { ssize_t|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }
470 STD RUMP { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
471 STD RUMP { int|sys||unlinkat(int fd, const char *path, int flag); }
472 STD RUMP { int|sys||futimens(int fd, const struct timespec *tptr); }
473 STD RUMP { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
474 NOERR { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
475 STD RUMP { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
476 STD RUMP { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
477 NOERR RUMP { int|sys||clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
478 STD { int|sys|60|_lwp_park(clockid_t clock_id, int flags, struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
479 NOERR RUMP { int|sys||posix_fallocate(int fd, int PAD, off_t pos, off_t len); }
480 STD RUMP { int|sys||fdiscard(int fd, int PAD, off_t pos, off_t len); }
481 STD { int|sys||wait6(idtype_t idtype, id_t id, int *status, int options, struct wrusage *wru, siginfo_t *info); }
482 STD RUMP { int|sys||clock_getcpuclockid2(idtype_t idtype, id_t id, clockid_t *clock_id); }
483 STD RUMP { int|sys|90|getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }
484 STD RUMP { int|sys|90|statvfs1(const char *path, struct statvfs *buf, int flags); }
485 STD RUMP { int|sys|90|fstatvfs1(int fd, struct statvfs *buf, int flags); }
486 STD RUMP { int|sys|90|fhstatvfs1(const void *fhp, size_t fh_size, struct statvfs *buf, int flags); }
487 STD { int|sys||__acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
488 STD { int|sys||__acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
489 STD { int|sys||__acl_delete_link(const char *path, acl_type_t type); }
490 STD { int|sys||__acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
491 STD { int|sys||__acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
492 STD { int|sys||__acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
493 STD { int|sys||__acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
494 STD { int|sys||__acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
495 STD { int|sys||__acl_delete_file(const char *path, acl_type_t type); }
496 STD { int|sys||__acl_delete_fd(int filedes, acl_type_t type); }
497 STD { int|sys||__acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
498 STD { int|sys||__acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
499 STD RUMP { long|sys||lpathconf(const char *path, int name); }

View file

@ -1,6 +1,6 @@
import sys
H = '/home/jart/vendor/netbsd/sys/sys/ioctl.h'
H = '/home/jart/vendor/netbsd/sys/sys/spawn.h'
G = 'errno'
MAGNUMS = {}

View file

@ -43,16 +43,16 @@ scall __sys_fstat 0x1b80352272153005 globl hidden # needs __stat2linux()
scall __sys_lstat 0x1b90280282154006 globl hidden # needs __stat2linux(); blocked on Android
scall sys_poll 0x0d10fc0d120e6007 globl hidden
scall sys_ppoll 0xfff06d221ffff10f globl hidden # consider INTON/INTOFF tutorial in examples/unbourne.c
scall __sys_lseek 0x0c70c71de20c7008 globl hidden # openbsd:evilpad
scall __sys_mmap 0x0c50c51dd20c5009 globl hidden # openbsd:pad
scall __sys_lseek 0x0c70c71de20c7008 globl hidden # netbsd+openbsd:evilpad
scall __sys_mmap 0x0c50c51dd20c5009 globl hidden # netbsd+openbsd:pad
scall sys_msync 0x115100041204101a globl hidden
scall sys_mprotect 0x04a04a04a204a00a globl hidden
scall sys_munmap 0x049049049204900b globl hidden
scall sys_sigaction 0xfff02e1a0202e00d globl hidden # rt_sigaction on Lunix
scall sys_sigaction 0x15402e1a0202e00d globl hidden # rt_sigaction on Lunix; it's complicated on NetBSD
scall sys_sigprocmask 0x125030154203000e globl hidden # a.k.a. rt_sigprocmask
scall sys_ioctl 0x0360360362036010 globl hidden
scall __sys_pread 0x0ad0ad1db2099011 globl hidden # a.k.a. pread64; openbsd:pad
scall __sys_pwrite 0x0ae0ae1dc209a012 globl hidden # a.k.a. pwrite64; openbsd:pad
scall __sys_pread 0x0ad0ad1db2099011 globl hidden # a.k.a. pread64; netbsd+openbsd:pad
scall __sys_pwrite 0x0ae0ae1dc209a012 globl hidden # a.k.a. pwrite64; netbsd+openbsd:pad
scall sys_readv 0x0780780782078013 globl hidden
scall sys_writev 0x0790790792079014 globl hidden
scall sys_access 0x0210210212021015 globl hidden
@ -74,7 +74,7 @@ scall sys_nanosleep 0x1ae05b0f0ffff023 globl hidden
scall sys_getitimer 0x1aa0460562056024 globl hidden
scall sys_setitimer 0x1a90450532053026 globl hidden
scall sys_alarm 0xfffffffffffff025 globl hidden
scall sys_getpid 0xfff0140142014027 globl hidden
scall sys_getpid 0x0140140142014027 globl hidden # netbsd returns ppid in edx
scall sys_sendfile 0xffffff1892151028 globl hidden # Linux vs. XNU/BSD ABIs very different
scall __sys_socket 0x18a0610612061029 globl hidden
scall __sys_connect 0x062062062206202a globl hidden
@ -116,9 +116,9 @@ scall sys_fcntl 0x05c05c05c205c048 globl hidden
scall sys_flock 0x0830830832083049 globl hidden
scall sys_fsync 0x05f05f05f205f04a globl hidden
scall sys_fdatasync 0x0f105f22620bb04b globl hidden # fsync() on openbsd
scall __sys_truncate 0x0c80c81df20c804c globl hidden # openbsd:pad
scall __sys_ftruncate 0x0c90c91e020c904d globl hidden # openbsd:pad
scall sys_getcwd 0xfff130146ffff04f globl hidden
scall __sys_truncate 0x0c80c81df20c804c globl hidden # netbsd+openbsd:pad
scall __sys_ftruncate 0x0c90c91e020c904d globl hidden # netbsd+openbsd:pad
scall sys_getcwd 0x128130146ffff04f globl hidden
scall sys_chdir 0x00c00c00c200c050 globl hidden
scall sys_fchdir 0x00d00d00d200d051 globl hidden
scall sys_rename 0x0800800802080052 globl hidden
@ -142,9 +142,9 @@ scall sys_sysinfo 0xfffffffffffff063 globl hidden
scall sys_times 0xfffffffffffff064 globl hidden
scall sys_ptrace 0x01a01a01a201a065 globl hidden
scall syslog 0xfffffffffffff067 globl
scall sys_getuid 0xfff0180182018066 globl hidden
scall sys_getgid 0xfff02f02f202f068 globl hidden
scall sys_getppid 0xfff027027202706e globl hidden
scall sys_getuid 0x0180180182018066 globl hidden
scall sys_getgid 0x02f02f02f202f068 globl hidden
scall sys_getppid 0xfff027027202706e globl hidden # see sys_getpid()→edx for netbsd
scall getpgrp 0x051051051205106f globl
scall sys_setsid 0x0930930932093070 globl hidden
scall sys_getsid 0x11e0ff136213607c globl hidden
@ -396,7 +396,7 @@ scall unmount 0x016016016209ffff globl
scall issetugid 0xfff0fd0fd2147fff globl
scall minherit 0x1110fa0fa20fafff globl
scall pathconf 0x0bf0bf0bf20bffff globl
scall sysctl 0xfff0ca0ca20cafff globl
scall sysctl 0x0ca0ca0ca20cafff globl
#───────────────────────XNU & FREEBSD────────────────────────
scall ntp_adjtime 0x0b0fff0b0220ffff globl
scall ntp_gettime 0x1c0fff0f82210fff globl

View file

@ -32,6 +32,10 @@ void OnSigInt(int sig) {
gotsigint = true;
}
void SetUp(void) {
gotsigint = false;
}
TEST(sigaction, test) {
/* TODO(jart): Why does RHEL5 behave differently? */
/* TODO(jart): Windows needs huge signal overhaul */
@ -61,3 +65,12 @@ TEST(sigaction, test) {
EXPECT_EQ(0, WTERMSIG(status));
EXPECT_NE(-1, sigprocmask(SIG_BLOCK, &oldmask, NULL));
}
TEST(sigaction, raise) {
if (IsWindows()) return;
struct sigaction saint = {.sa_handler = OnSigInt};
EXPECT_NE(-1, sigaction(SIGINT, &saint, NULL));
ASSERT_FALSE(gotsigint);
EXPECT_NE(-1, raise(SIGINT));
ASSERT_TRUE(gotsigint);
}

View file

@ -147,7 +147,7 @@ struct Client {
struct Client *next;
int fd;
int iovlen;
bool close;
bool closeit;
uint32_t insize;
uint32_t addrsize;
uint8_t gzip_footer[8];
@ -921,7 +921,7 @@ bool HandleRequest(struct Client *c) {
content = "";
gzipped = false;
contentlength = -1;
c->close = false;
c->closeit = false;
if ((msgsize = ParseHttpRequest(&c->req, c->inbuf, c->insize)) != -1) {
if (!msgsize) return false;
if (logmessages) {
@ -929,13 +929,13 @@ bool HandleRequest(struct Client *c) {
c->req.length - 4, c->inbuf);
}
version = GetHttpVersion(c);
if (version < 101) c->close = true, legacyhttp = true;
if (version < 101) c->closeit = true, legacyhttp = true;
if (version <= 101) {
if (IsConnectionClose(c)) c->close = true;
if (IsConnectionClose(c)) c->closeit = true;
path = c->inbuf + c->req.uri.a;
pathlen = c->req.uri.b - c->req.uri.a;
if (c->req.method == kHttpGet || c->req.method == kHttpHead) {
if (ParseContentLength(&c->req, c->inbuf)) c->close = true;
if (ParseContentLength(&c->req, c->inbuf)) c->closeit = true;
VERBOSEF(
"%s %s %.*s referer %.*s", c->addrstr, kHttpMethod[c->req.method],
pathlen, path,
@ -1026,7 +1026,7 @@ bool HandleRequest(struct Client *c) {
p = AppendStatus(p, 405, "method not allowed");
p = AppendContentTypeTextPlain(p);
content = "Method Not Allowed\r\n";
c->close = true;
c->closeit = true;
}
} else {
WARNF("%s http version not supported %`'.*s", c->addrstr,
@ -1034,19 +1034,19 @@ bool HandleRequest(struct Client *c) {
p = AppendStatus(p, 505, "HTTP Version Not Supported");
p = AppendContentTypeTextPlain(p);
content = "HTTP Version Not Supported\r\n";
c->close = true;
c->closeit = true;
}
} else {
WARNF("%s parse error %s", c->addrstr, strerror(errno));
p = AppendStatus(p, 400, "Bad Request");
p = AppendContentTypeTextPlain(p);
content = "Bad Request\r\n";
c->close = true;
c->closeit = true;
}
p = AppendDate(p);
p = AppendNosniff(p);
p = AppendServer(p);
if (c->close) p = AppendConnectionClose(p);
if (c->closeit) p = AppendConnectionClose(p);
if (contentlength == -1) contentlength = strlen(content);
actualcontentlength = contentlength;
if (gzipped) {
@ -1081,11 +1081,11 @@ bool HandleRequest(struct Client *c) {
/* LogRequestLatency(); */
if (WriteSome(c->fd, c->iov, c->iovlen) == -1) {
VERBOSEF("%s send error %s", c->addrstr, strerror(errno));
c->close = true;
c->closeit = true;
c->insize = 0;
c->iovlen = 0;
}
if (!c->close) {
if (!c->closeit) {
memcpy(c->inbuf, c->inbuf + msgsize, c->insize - msgsize);
c->insize -= msgsize;
}
@ -1118,7 +1118,7 @@ static void ProcessInbuf(struct Client *c) {
CHECK_NE(-1, epoll_ctl(epfd, EPOLL_CTL_MOD, c->fd,
&(struct epoll_event){EPOLLOUT, {c}}));
} else {
if (c->close && !c->insize) {
if (c->closeit && !c->insize) {
DeleteClient(c);
} else if (c->insize) {
continue;
@ -1156,7 +1156,7 @@ static void ProcessRead(struct Client *c) {
static void ProcessWrite(struct Client *c) {
if (WriteSome(c->fd, c->iov, c->iovlen) != -1) {
if (!GetIovSize(c->iov, c->iovlen)) {
if (!c->close) {
if (!c->closeit) {
CHECK_NE(-1, epoll_ctl(epfd, EPOLL_CTL_MOD, c->fd,
&(struct epoll_event){EPOLLIN, {c}}));
ProcessInbuf(c);
@ -1181,7 +1181,7 @@ static void ProcessConnect(void) {
c->next = clients;
c->insize = 0;
c->iovlen = 0;
c->close = false;
c->closeit = false;
c->startconnection = nowl();
c->startrequest = c->startconnection;
DescribeAddress(c->addrstr, &c->addr);