From 59d87ccc99f431da06a0ffab0d3e702d9ef82f48 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Fri, 19 Nov 2021 05:44:21 -0800 Subject: chore: make dependence on static syscalls explicit --- sys/linux/src/brk.c | 8 ++ sys/linux/src/chdir.c | 8 ++ sys/linux/src/chdirfd.c | 8 ++ sys/linux/src/chmod.c | 8 ++ sys/linux/src/close.c | 8 ++ sys/linux/src/dirents.c | 8 ++ sys/linux/src/dup.c | 8 ++ sys/linux/src/errno.inc.h | 89 +++++++++++++++ sys/linux/src/errormsg.c | 26 +++++ sys/linux/src/exec.c | 8 ++ sys/linux/src/fork.c | 8 ++ sys/linux/src/getgid.c | 8 ++ sys/linux/src/getpgid.c | 8 ++ sys/linux/src/getpid.c | 8 ++ sys/linux/src/getuid.c | 8 ++ sys/linux/src/info.c | 7 ++ sys/linux/src/infoat.c | 8 ++ sys/linux/src/infofd.c | 10 ++ sys/linux/src/internal.h | 271 ++++++++++++++++++++++++++++++++++++++++++++++ sys/linux/src/ioctl.c | 17 +++ sys/linux/src/madvise.c | 8 ++ sys/linux/src/mkdir.c | 8 ++ sys/linux/src/mkdirat.c | 8 ++ sys/linux/src/mkfifo.c | 8 ++ sys/linux/src/mknode.c | 7 ++ sys/linux/src/mknodeat.c | 8 ++ sys/linux/src/mlock.c | 8 ++ sys/linux/src/mmap.c | 17 +++ sys/linux/src/mprotect.c | 14 +++ sys/linux/src/mremap.c | 20 ++++ sys/linux/src/munlock.c | 8 ++ sys/linux/src/munmap.c | 8 ++ sys/linux/src/open.c | 8 ++ sys/linux/src/read.c | 8 ++ sys/linux/src/sbrk.c | 6 + sys/linux/src/seek.c | 8 ++ sys/linux/src/setpgid.c | 8 ++ sys/linux/src/wait.c | 7 ++ sys/linux/src/waitfor.c | 8 ++ sys/linux/src/write.c | 8 ++ 40 files changed, 715 insertions(+) create mode 100644 sys/linux/src/brk.c create mode 100644 sys/linux/src/chdir.c create mode 100644 sys/linux/src/chdirfd.c create mode 100644 sys/linux/src/chmod.c create mode 100644 sys/linux/src/close.c create mode 100644 sys/linux/src/dirents.c create mode 100644 sys/linux/src/dup.c create mode 100644 sys/linux/src/errno.inc.h create mode 100644 sys/linux/src/errormsg.c create mode 100644 sys/linux/src/exec.c create mode 100644 sys/linux/src/fork.c create mode 100644 sys/linux/src/getgid.c create mode 100644 sys/linux/src/getpgid.c create mode 100644 sys/linux/src/getpid.c create mode 100644 sys/linux/src/getuid.c create mode 100644 sys/linux/src/info.c create mode 100644 sys/linux/src/infoat.c create mode 100644 sys/linux/src/infofd.c create mode 100644 sys/linux/src/internal.h create mode 100644 sys/linux/src/ioctl.c create mode 100644 sys/linux/src/madvise.c create mode 100644 sys/linux/src/mkdir.c create mode 100644 sys/linux/src/mkdirat.c create mode 100644 sys/linux/src/mkfifo.c create mode 100644 sys/linux/src/mknode.c create mode 100644 sys/linux/src/mknodeat.c create mode 100644 sys/linux/src/mlock.c create mode 100644 sys/linux/src/mmap.c create mode 100644 sys/linux/src/mprotect.c create mode 100644 sys/linux/src/mremap.c create mode 100644 sys/linux/src/munlock.c create mode 100644 sys/linux/src/munmap.c create mode 100644 sys/linux/src/open.c create mode 100644 sys/linux/src/read.c create mode 100644 sys/linux/src/sbrk.c create mode 100644 sys/linux/src/seek.c create mode 100644 sys/linux/src/setpgid.c create mode 100644 sys/linux/src/wait.c create mode 100644 sys/linux/src/waitfor.c create mode 100644 sys/linux/src/write.c (limited to 'sys/linux') diff --git a/sys/linux/src/brk.c b/sys/linux/src/brk.c new file mode 100644 index 0000000..85dd30c --- /dev/null +++ b/sys/linux/src/brk.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·brk(void *addr) +{ + long ret = syscall(·Brk, addr); + return error(ret); +} diff --git a/sys/linux/src/chdir.c b/sys/linux/src/chdir.c new file mode 100644 index 0000000..d64446a --- /dev/null +++ b/sys/linux/src/chdir.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·chdir(char *path) +{ + intptr ret = syscall(·Chdir, path); + return error(ret); +} diff --git a/sys/linux/src/chdirfd.c b/sys/linux/src/chdirfd.c new file mode 100644 index 0000000..ad84d2b --- /dev/null +++ b/sys/linux/src/chdirfd.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·chdirfd(int fd) +{ + intptr ret = syscall(·FChdir, fd); + return error(ret); +} diff --git a/sys/linux/src/chmod.c b/sys/linux/src/chmod.c new file mode 100644 index 0000000..a37a037 --- /dev/null +++ b/sys/linux/src/chmod.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·chmod(char *path, uint mode) +{ + long ret = syscall(·Chmod, path, mode); + return error(ret); +} diff --git a/sys/linux/src/close.c b/sys/linux/src/close.c new file mode 100644 index 0000000..b9da3ab --- /dev/null +++ b/sys/linux/src/close.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·close(int fd) +{ + intptr ret = syscall(·Close, fd); + return error(ret); +} diff --git a/sys/linux/src/dirents.c b/sys/linux/src/dirents.c new file mode 100644 index 0000000..c00ce15 --- /dev/null +++ b/sys/linux/src/dirents.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·dirents(int fd, int len, void *buffer, int *size) +{ + long ret = *size = syscall(·GetDents, fd, buffer, len); + return error(ret); +} diff --git a/sys/linux/src/dup.c b/sys/linux/src/dup.c new file mode 100644 index 0000000..5877df3 --- /dev/null +++ b/sys/linux/src/dup.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·dup(int oldfd, int newfd) +{ + intptr ret = syscall(·Dup2, oldfd, newfd); + return error(ret); +} diff --git a/sys/linux/src/errno.inc.h b/sys/linux/src/errno.inc.h new file mode 100644 index 0000000..58ee427 --- /dev/null +++ b/sys/linux/src/errno.inc.h @@ -0,0 +1,89 @@ +E(0, "no error information") +E(sys·ErrorBadWideChar, "illegal byte sequence") +E(sys·ErrorBadDomain, "domain error") +E(sys·ErrorBadResult, "result not representable") +E(sys·ErrorNotTTY, "not a tty") +E(sys·ErrorAccess, "permission denied") +E(sys·ErrorNotPermit, "operation not permitted") +E(sys·ErrorNoEntry, "no such file or directory") +E(sys·ErrorNoProc, "no such process") +E(sys·ErrorExists, "file exists") +E(sys·ErrorOverflow, "value too large for data type") +E(sys·ErrorNoSpace, "no space left on device") +E(sys·ErrorNoMemory, "out of memory") +E(sys·ErrorBusy, "resource busy") +E(sys·ErrorInterrupt, "interrupted system call") +E(sys·ErrorAgain, "resource temporarily unavailable") +E(sys·ErrorNoSeek, "invalid seek") +E(sys·ErrorExDevice, "cross-device link") +E(sys·ErrorReadOnly, "read-only file system") +E(sys·ErrorNotEmptyDir, "directory not empty") +E(sys·ErrorResetConnect, "connection reset by peer") +E(sys·ErrorTimedOut, "operation timed out") +E(sys·ErrorRefuseConnect, "connection refused") +E(sys·ErrorHostDown, "host is down") +E(sys·ErrorHostHang, "host is unreachable") +E(sys·ErrorAddrInUse, "address in use") +E(sys·ErrorBadPipe, "broken pipe") +E(sys·ErrorIO, "i/o error") +E(sys·ErrorNoDevAddr, "no such device or address") +E(sys·ErrorNotBlk, "block device required") +E(sys·ErrorNoDevice, "no such device") +E(sys·ErrorNotDir, "not a directory") +E(sys·ErrorIsDir, "is a directory") +E(sys·ErrorTxtBusy, "text file busy") +E(sys·ErrorExecFmt, "exec format error") +E(sys·ErrorBadArg, "invalid argument") +E(sys·ErrorArgLen, "argument list too long") +E(sys·ErrorLinkLoop, "symbolic link loop") +E(sys·ErrorNameLen, "filename too long") +E(sys·ErrorNoFiles, "too many open files in system") +E(sys·ErrorNoFd, "no file descriptors available") +E(sys·ErrorBadFd, "bad file descriptor") +E(sys·ErrorNoChild, "no child process") +E(sys·ErrorBadAddr, "bad address") +E(sys·ErrorBigFile, "file too large") +E(sys·ErrorNoLink, "too many links") +E(sys·ErrorNoLock, "no locks available") +E(sys·ErrorDeadlock, "resource deadlock would occur") +E(sys·ErrorNoRecover, "state not recoverable") +E(sys·ErrorOwnerDie, "previous owner died") +E(sys·ErrorCancel, "operation canceled") +E(sys·ErrorNoSyscall, "function not implemented") +E(sys·ErrorNoMsg, "no message of desired type") +E(sys·ErrorNoIdent, "identifier removed") +E(sys·ErrorNoStr, "device not a stream") +E(sys·ErrorNoData, "no data available") +E(sys·ErrorTimeout, "device timeout") +E(sys·ErrorNoStream, "out of streams resources") +E(sys·ErrorDeadLink, "link has been severed") +E(sys·ErrorProtocol, "protocol error") +E(sys·ErrorBadMsg, "bad message") +E(sys·ErrorBadFdState, "file descriptor in bad state") +E(sys·ErrorNotSocket, "not a socket") +E(sys·ErrorNeedDstAddr, "destination address required") +E(sys·ErrorMsgLen, "message too large") +E(sys·ErrorBadProtocol, "protocol wrong type for socket") +E(sys·ErrorNoProtocol, "protocol not available") +E(sys·ErrorNoProtocolSupport, "protocol not supported") +E(sys·ErrorNoSocketSupport, "socket type not supported") +E(sys·ErrorNoSupport, "not supported") +E(sys·ErrorNoPFSupport, "protocol family not supported") +E(sys·ErrorNoAFSupport, "address family not supported by protocol") +E(sys·ErrorAddrNotAvail, "address not available") +E(sys·ErrorNetDown, "network is down") +E(sys·ErrorNetHang, "network unreachable") +E(sys·ErrorNetReset, "connection reset by network") +E(sys·ErrorAbortConnect, "connection aborted") +E(sys·ErrorNoBuffer, "no buffer space available") +E(sys·ErrorIsConnect, "socket is connected") +E(sys·ErrorNotConnect, "socket not connected") +E(sys·ErrorShutdown, "cannot send after socket shutdown") +E(sys·ErrorAlreadyConnect, "operation already in progress") +E(sys·ErrorInProgress, "operation in progress") +E(sys·ErrorStale, "stale file handle") +E(sys·ErrorRemoteIO, "remote i/o error") +E(sys·ErrorDiskQuota, "quota exceeded") +E(sys·ErrorNoMedium, "no medium found") +E(sys·ErrorBadMedium, "wrong medium type") +E(sys·ErrorMultihop, "multihop attempted") diff --git a/sys/linux/src/errormsg.c b/sys/linux/src/errormsg.c new file mode 100644 index 0000000..e1d4b73 --- /dev/null +++ b/sys/linux/src/errormsg.c @@ -0,0 +1,26 @@ +#include "internal.h" + +static const struct ErrorMessage { +#define E(n, s) char str##n[sizeof(s)]; +#include "errno.inc.h" +#undef E +} errormsg = { +#define E(n, s) s, +#include "errno.inc.h" +#undef E +}; + +static const ushort errmsgidx[] = { +#define E(n, s) [n] = offsetof(struct ErrorMessage, str##n), +#include "errno.inc.h" +#undef E +}; + +char * +sys·errormsg(int errno) +{ + if(errno >= arrlen(errmsgidx)) + errno=0; + + return (char*)(&errormsg + errmsgidx[errno]); +} diff --git a/sys/linux/src/exec.c b/sys/linux/src/exec.c new file mode 100644 index 0000000..d00e9dd --- /dev/null +++ b/sys/linux/src/exec.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·exec(char *prog, char *argv[], char *env[]) +{ + intptr ret = syscall(·ExecVe, prog, argv, env); + return error(ret); +} diff --git a/sys/linux/src/fork.c b/sys/linux/src/fork.c new file mode 100644 index 0000000..c33caa2 --- /dev/null +++ b/sys/linux/src/fork.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·fork(void) +{ + intptr ret = syscall(·Fork); + return error(ret); +} diff --git a/sys/linux/src/getgid.c b/sys/linux/src/getgid.c new file mode 100644 index 0000000..e9c6583 --- /dev/null +++ b/sys/linux/src/getgid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·getgid(void) +{ + long ret = syscall(·GetGid); + return error(ret); +} diff --git a/sys/linux/src/getpgid.c b/sys/linux/src/getpgid.c new file mode 100644 index 0000000..7077c8b --- /dev/null +++ b/sys/linux/src/getpgid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·getpgid(int pid) +{ + long ret = syscall(·GetPGid, pid); + return error(ret); +} diff --git a/sys/linux/src/getpid.c b/sys/linux/src/getpid.c new file mode 100644 index 0000000..527bdb2 --- /dev/null +++ b/sys/linux/src/getpid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·getpid(void) +{ + long ret = syscall(·GetPid); + return error(ret); +} diff --git a/sys/linux/src/getuid.c b/sys/linux/src/getuid.c new file mode 100644 index 0000000..aebf32b --- /dev/null +++ b/sys/linux/src/getuid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·getuid(void) +{ + long ret = syscall(·GetUid); + return error(ret); +} diff --git a/sys/linux/src/info.c b/sys/linux/src/info.c new file mode 100644 index 0000000..60f32a0 --- /dev/null +++ b/sys/linux/src/info.c @@ -0,0 +1,7 @@ +#include "internal.h" + +int +sys·info(char *path, sys·Info *file) +{ + return sys·infoat(sys·FdCwd, path, 0, sys·InfoAll, file); +} diff --git a/sys/linux/src/infoat.c b/sys/linux/src/infoat.c new file mode 100644 index 0000000..ccbaf18 --- /dev/null +++ b/sys/linux/src/infoat.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·infoat(int dirfd, char *path, int flag, uint mask, sys·Info *file) +{ + long ret = syscall(·StatX, dirfd, path, flag, mask, file); + return error(ret); +} diff --git a/sys/linux/src/infofd.c b/sys/linux/src/infofd.c new file mode 100644 index 0000000..8b2973b --- /dev/null +++ b/sys/linux/src/infofd.c @@ -0,0 +1,10 @@ +#include "internal.h" +#include + +int +sys·infofd(int fd, sys·Info *file) +{ + if(fd < 0) + return sys·ErrorBadFd; + return sys·infoat(fd, "", sys·AtEmptyPath, sys·InfoAll, file); +} diff --git a/sys/linux/src/internal.h b/sys/linux/src/internal.h new file mode 100644 index 0000000..e8bb76c --- /dev/null +++ b/sys/linux/src/internal.h @@ -0,0 +1,271 @@ +#pragma once + +#include +#include +#include + +#define syscall0(n) _syscall0(n) +#define syscall1(n,a1) _syscall1(n,sysarg(a1)) +#define syscall2(n,a1,a2) _syscall2(n,sysarg(a1),sysarg(a2)) +#define syscall3(n,a1,a2,a3) _syscall3(n,sysarg(a1),sysarg(a2),sysarg(a3)) +#define syscall4(n,a1,a2,a3,a4) _syscall4(n,sysarg(a1),sysarg(a2),sysarg(a3),sysarg(a4)) +#define syscall5(n,a1,a2,a3,a4,a5) _syscall5(n,sysarg(a1),sysarg(a2),sysarg(a3),sysarg(a4),sysarg(a5)) +#define syscall6(n,a1,a2,a3,a4,a5,a6) _syscall6(n,sysarg(a1),sysarg(a2),sysarg(a3),sysarg(a4),sysarg(a5),sysarg(a6)) +#define syscall7(n,a1,a2,a3,a4,a5,a6,a7) _syscall7(n,sysarg(a1),sysarg(a2),sysarg(a3),sysarg(a4),sysarg(a5),sysarg(a6),sysarg(a7)) + +#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n +#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0,) +#define __SYSCALL_CONCAT_X(a,b) a##b +#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X(a,b) +#define __SYSCALL_DISP(b,...) __SYSCALL_CONCAT(b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) + +#define syscall(...) __SYSCALL_DISP(syscall,__VA_ARGS__) + +#ifndef sysarg +# define sysarg(x) ((long)(x)) +#endif + +#define error(ret) ((ret) < 0 && (ret) > -4096) ? (-(ret)) : 0 + +/********************************************* + * XXX: below this line is computer generated + *********************************************/ + +/* legacy cleanup */ +#ifdef ·SocketCall +#endif + +#ifdef ·GetUid32 +# undef ·LChown +# undef ·GetUid +# undef ·GetGid +# undef ·GetEUid +# undef ·GetEGid +# undef ·SetReUid +# undef ·SetReGid +# undef ·GetGroups +# undef ·SetGroups +# undef ·FChown +# undef ·SetResUid +# undef ·GetResUid +# undef ·SetResGid +# undef ·GetResGid +# undef ·Chown +# undef ·SetUid +# undef ·SetGid +# undef ·SetFsUid +# undef ·SetFsGid +# define ·LChown ·LChown32 +# define ·GetUid ·GetUid32 +# define ·GetGid ·GetGid32 +# define ·GetEUid ·GetEUid32 +# define ·GetEGid ·GetEGid32 +# define ·SetReUid ·SetReUid32 +# define ·SetReGid ·SetReGid32 +# define ·GetGroups ·GetGroups32 +# define ·SetGroups ·SetGroups32 +# define ·FChown ·FChown32 +# define ·SetResUid ·SetResUid32 +# define ·GetResUid ·GetResUid32 +# define ·SetResGid ·SetResGid32 +# define ·GetResGid ·GetResGid32 +# define ·Chown ·Chown32 +# define ·SetUid ·SetUid32 +# define ·SetGid ·SetGid32 +# define ·SetFsUid ·SetFsUid32 +# define ·SetFsGid ·SetFsGid32 +#endif + +#ifdef ·FCntl64 +# undef ·FCntl +# define ·FCntl ·FCntl64 +#endif + +#ifdef ·GetDents64 +# undef ·GetDents +# define ·GetDents ·GetDents64 +#endif + +#ifdef ·FTruncate64 +# undef ·FTruncate +# undef ·Truncate +# define ·FTruncate ·FTruncate64 +# define ·Truncate ·Truncate64 +#endif + +#ifdef ·Stat64 +# undef ·Stat +# define ·Stat ·Stat64 +#endif + +#ifdef ·FStat64 +# undef ·FStat +# define ·FStat ·FStat64 +#endif + +#ifdef ·LStat64 +# undef ·LStat +# define ·LStat ·LStat64 +#endif + +#ifdef ·StatFs64 +# undef ·StatFs +# define ·StatFs ·StatFs64 +#endif + +#ifdef ·FStatFs64 +# undef ·FStatFs +# define ·FStatFs ·FStatFs64 +#endif + +#ifdef ·NewFStatAt +# undef ·FStatAt +# define ·FStatAt ·NewFStatAt +# undef ·FStatAt +# define ·FStatAt ·FStatAt64 +#endif + +#ifdef ·UGetRLimit +# undef ·GetRLimit +# define ·GetRLimit ·UGetRLimit +#endif + +#ifdef ·NewSelect +# undef ·Select +# define ·Select ·NewSelect +#endif + +#ifdef ·PRead64 +# undef ·PRead +# undef ·PWrite +# define ·PRead ·PRead64 +# define ·PWrite ·PWrite64 +#endif + +#ifdef ·FAdvise6464 +# undef ·FAdvise +# define ·FAdvise ·FAdvise6464 +# undef ·FAdvise +# define ·FAdvise ·FAdvise64 +#endif + +#ifdef ·SendFile64 +# undef ·SendFile +# define ·SendFile ·SendFile64 +#endif + +#ifndef ·TimerSetTime +# define ·TimerSetTime ·TimerSetTime32 +#endif + +#ifndef ·TimerGetTime +# define ·TimerGetTime ·TimerGetTime32 +#endif + +#ifndef ·TimerFdSetTime +# define ·TimerFdSetTime ·TimerFdSetTime32 +#endif + +#ifndef ·TimerFdGetTime +# define ·TimerFdGetTime ·TimerFdGetTime32 +#endif + +#ifndef ·ClockSetTime +# define ·ClockSetTime ·ClockSetTime32 +#endif + +#ifndef ·ClockGetTime +# define ·ClockGetTime ·ClockGetTime32 +#endif + +#ifndef ·ClockGetRes +# define ·ClockGetRes ·ClockGetResTime32 +#endif + +#ifndef ·ClockNanoSleep +# define ·ClockNanoSleep ·ClockNanoSleepTime32 +#endif + +#ifndef ·GetTimeOfDay +# define ·GetTimeOfDay ·GetTimeOfDayTime32 +#endif + +#ifndef ·SetTimeOfDay +# define ·SetTimeOfDay ·SetTimeOfDayTime32 +#endif + +#ifndef ·ClockGetTime +# define ·ClockGetTime ·ClockGetTime64 +#endif + +#ifndef ·ClockSetTime +# define ·ClockSetTime ·ClockSetTime64 +#endif + +#ifndef ·ClockAdjTime +# define ·ClockAdjTime ·ClockAdjTime64 +#endif + +#ifndef ·ClockGetRes +# define ·ClockGetRes ·ClockGetResTime64 +#endif + +#ifndef ·ClockNanoSleep +# define ·ClockNanoSleep ·ClockNanoSleepTime64 +#endif + +#ifndef ·TimerGetTime +# define ·TimerGetTime ·TimerGetTime64 +#endif + +#ifndef ·TimerSetTime +# define ·TimerSetTime ·TimerSetTime64 +#endif + +#ifndef ·TimerFdGetTime +# define ·TimerFdGetTime ·TimerFdGetTime64 +#endif + +#ifndef ·TimerFdSetTime +# define ·TimerFdSetTime ·TimerFdSetTime64 +#endif + +#ifndef ·UTimeNsAt +# define ·UTimeNsAt ·UTimeNsAtTime64 +#endif + +#ifndef ·PSelect6 +# define ·PSelect6 ·PSelect6Time64 +#endif + +#ifndef ·PPoll +# define ·PPoll ·PPollTime64 +#endif + +#ifndef ·RecvMMsg +# define ·RecvMMsg ·RecvMMsgTime64 +#endif + +#ifndef ·MQTimedSend +# define ·MQTimedSend ·MQTimedSendTime64 +#endif + +#ifndef ·MQTimedReceive +# define ·MQTimedReceive ·MQTimedReceiveTime64 +#endif + +#ifndef ·RtSigTimedWait +# define ·RtSigTimedWait ·RtSigTimedWaitTime64 +#endif + +#ifndef ·Futex +# define ·Futex ·FutexTime64 +#endif + +#ifndef ·SchedRrGetInterval +# define ·SchedRrGetInterval ·SchedRrGetIntervalTime64 +#endif + +#ifndef ·Accept +# define ·Accept ·Accept4 +#endif diff --git a/sys/linux/src/ioctl.c b/sys/linux/src/ioctl.c new file mode 100644 index 0000000..30c7318 --- /dev/null +++ b/sys/linux/src/ioctl.c @@ -0,0 +1,17 @@ +#include "internal.h" +#include + +int +sys·ioctl(int fd, int request, ...) +{ + long ret; + void *arg; + va_list ap; + + va_start(ap, request); + arg = va_arg(ap, void*); + va_end(ap); + + ret = syscall(·IoCtl, fd, request, arg); + return error(ret); +} diff --git a/sys/linux/src/madvise.c b/sys/linux/src/madvise.c new file mode 100644 index 0000000..49e512e --- /dev/null +++ b/sys/linux/src/madvise.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·madvise(void *addr, uintptr len, int advice) +{ + long ret = syscall(·MAdvise, addr, len, advice); + return error(ret); +} diff --git a/sys/linux/src/mkdir.c b/sys/linux/src/mkdir.c new file mode 100644 index 0000000..0672912 --- /dev/null +++ b/sys/linux/src/mkdir.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·mkdir(char *path, uint mode) +{ + long ret = syscall(·MkdirAt, sys·FdCwd, path, mode); + return error(ret); +} diff --git a/sys/linux/src/mkdirat.c b/sys/linux/src/mkdirat.c new file mode 100644 index 0000000..f6239d6 --- /dev/null +++ b/sys/linux/src/mkdirat.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +mkdirat(int dirfd, char *path, uint mode) +{ + long ret = syscall(·MkdirAt, dirfd, path, mode); + return error(ret); +} diff --git a/sys/linux/src/mkfifo.c b/sys/linux/src/mkfifo.c new file mode 100644 index 0000000..da12f31 --- /dev/null +++ b/sys/linux/src/mkfifo.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·mkfifo(char *path, uint mode) +{ + long ret = sys·mknode(path, mode|sys·ModeFifo, 0); + return error(ret); +} diff --git a/sys/linux/src/mknode.c b/sys/linux/src/mknode.c new file mode 100644 index 0000000..1824664 --- /dev/null +++ b/sys/linux/src/mknode.c @@ -0,0 +1,7 @@ +#include "internal.h" + +int +sys·mknode(char *path, uint mode, uint64 device) +{ + return sys·mknodeat(sys·FdCwd, path, mode, device); +} diff --git a/sys/linux/src/mknodeat.c b/sys/linux/src/mknodeat.c new file mode 100644 index 0000000..d592731 --- /dev/null +++ b/sys/linux/src/mknodeat.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·mknodeat(int dirfd, char *path, uint mode, uint64 device) +{ + long ret = syscall(·MkNodAt, dirfd, path, mode, device); + return error(ret); +} diff --git a/sys/linux/src/mlock.c b/sys/linux/src/mlock.c new file mode 100644 index 0000000..0de348f --- /dev/null +++ b/sys/linux/src/mlock.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·mlock(void *addr, uintptr len) +{ + long ret = syscall(·MLock, addr, len); + return error(ret); +} diff --git a/sys/linux/src/mmap.c b/sys/linux/src/mmap.c new file mode 100644 index 0000000..21d927b --- /dev/null +++ b/sys/linux/src/mmap.c @@ -0,0 +1,17 @@ +#include "internal.h" + +int +sys·mmap(void *start, uintptr len, int protect, int flags, int fd, intptr off, void **buf) +{ + long ret; + if(len >= PTRDIFF_MAX) + return sys·ErrorNoMemory; + + ret = syscall(·MMap, start, len, protect, flags, fd, off); + if(ret < 0){ + *buf = nil; + return -ret; + } + *buf = (void*)ret; + return 0; +} diff --git a/sys/linux/src/mprotect.c b/sys/linux/src/mprotect.c new file mode 100644 index 0000000..6d20dc1 --- /dev/null +++ b/sys/linux/src/mprotect.c @@ -0,0 +1,14 @@ +#include "internal.h" + +int +sys·mprotect(void *addr, uintptr len, int prot) +{ + long ret; + uintptr beg, end; + + beg = (uintptr)addr & -PAGESIZE; + end = (uintptr)(addr + len + PAGESIZE-1) & -PAGESIZE; + + ret = syscall(·MProtect, beg, end-beg, prot); + return error(ret); +} diff --git a/sys/linux/src/mremap.c b/sys/linux/src/mremap.c new file mode 100644 index 0000000..dda05ce --- /dev/null +++ b/sys/linux/src/mremap.c @@ -0,0 +1,20 @@ +#include "internal.h" + +int +sys·mremap(void *addr, uintptr from, uintptr to, int flags, void **ret) +{ + long r; + void *new; + + if(to >= PTRDIFF_MAX) + return sys·ErrorNoMemory; + + new = (flags & sys·RemapFixed) ? *ret : nil; + r = syscall(·MRemap, addr, from, to, flags, new); + if(r > 0){ + *ret = (void*)r; + return 0; + } + + return error(r); +} diff --git a/sys/linux/src/munlock.c b/sys/linux/src/munlock.c new file mode 100644 index 0000000..1986306 --- /dev/null +++ b/sys/linux/src/munlock.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·munlock(void *addr, uintptr len) +{ + long ret = syscall(·MUnlock, addr, len); + return error(ret); +} diff --git a/sys/linux/src/munmap.c b/sys/linux/src/munmap.c new file mode 100644 index 0000000..2eee00c --- /dev/null +++ b/sys/linux/src/munmap.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·munmap(void *addr, uintptr len) +{ + long ret = syscall(·MUnmap, addr, len); + return error(ret); +} diff --git a/sys/linux/src/open.c b/sys/linux/src/open.c new file mode 100644 index 0000000..fcc014b --- /dev/null +++ b/sys/linux/src/open.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·open(char *path, int flag, int mode, int *ret) +{ + intptr err = *ret = syscall(·Open, flag, mode); + return error(err); +} diff --git a/sys/linux/src/read.c b/sys/linux/src/read.c new file mode 100644 index 0000000..db9cabf --- /dev/null +++ b/sys/linux/src/read.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·read(int fd, uintptr len, void *buf, intptr *n) +{ + intptr ret = *n = syscall(·Read, fd, buf, len); + return error(ret); +} diff --git a/sys/linux/src/sbrk.c b/sys/linux/src/sbrk.c new file mode 100644 index 0000000..31af79b --- /dev/null +++ b/sys/linux/src/sbrk.c @@ -0,0 +1,6 @@ +#include "internal.h" + +int +sys·sbrk(intptr inc, void *ret) +{ +} diff --git a/sys/linux/src/seek.c b/sys/linux/src/seek.c new file mode 100644 index 0000000..f1f8628 --- /dev/null +++ b/sys/linux/src/seek.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·seek(int fd, intptr offset, int from, intptr *pos) +{ + long ret = *pos = syscall(·LSeek, fd, offset, from); + return error(ret); +} diff --git a/sys/linux/src/setpgid.c b/sys/linux/src/setpgid.c new file mode 100644 index 0000000..b77d696 --- /dev/null +++ b/sys/linux/src/setpgid.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·setpgid(int pid, int pgid) +{ + long ret = syscall(·SetPGid, pid, pgid); + return error(ret); +} diff --git a/sys/linux/src/wait.c b/sys/linux/src/wait.c new file mode 100644 index 0000000..6d97db2 --- /dev/null +++ b/sys/linux/src/wait.c @@ -0,0 +1,7 @@ +#include "internal.h" + +int +sys·wait(int *status) +{ + return sys·waitfor(-1, status, 0, nil); +} diff --git a/sys/linux/src/waitfor.c b/sys/linux/src/waitfor.c new file mode 100644 index 0000000..0228427 --- /dev/null +++ b/sys/linux/src/waitfor.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·waitfor(int pid, int *status, int option, sys·UsageInfo *resource) +{ + long ret = syscall(·Wait4, pid, status, option, resource); + return error(ret); +} diff --git a/sys/linux/src/write.c b/sys/linux/src/write.c new file mode 100644 index 0000000..7863673 --- /dev/null +++ b/sys/linux/src/write.c @@ -0,0 +1,8 @@ +#include "internal.h" + +int +sys·write(int fd, uintptr len, void *buf, intptr *ret) +{ + long err = *ret = syscall(·Write, fd, buf, len); + return err; +} -- cgit v1.2.1