File syscalls.h
-
namespace wasm
SYSCALL NUMBERING
Have a look in the sysroot at include/bits/syscall.h to determine the system call numbering.
Enums
-
enum SocketCalls
Values:
-
enumerator sc_socket
-
enumerator sc_bind
-
enumerator sc_connect
-
enumerator sc_listen
-
enumerator sc_accept
-
enumerator sc_getsockname
-
enumerator sc_getpeername
-
enumerator sc_socketpair
-
enumerator sc_send
-
enumerator sc_recv
-
enumerator sc_sendto
-
enumerator sc_recvfrom
-
enumerator sc_shutdown
-
enumerator sc_setsockopt
-
enumerator sc_getsockopt
-
enumerator sc_sendmsg
-
enumerator sc_recvmsg
-
enumerator sc_accept4
-
enumerator sc_recvmmsg
-
enumerator sc_sendmmsg
-
enumerator sc_socket
Functions
-
void getBytesFromWasm(int32_t dataPtr, int32_t dataLen, uint8_t *buffer)
-
std::vector<uint8_t> getBytesFromWasm(int32_t dataPtr, int32_t dataLen)
-
std::string getStringFromWasm(int32_t strPtr)
-
std::pair<std::string, std::string> getUserKeyPairFromWasm(int32_t keyPtr)
-
std::string getMaskedPathFromWasm(int32_t strPtr)
-
sockaddr getSockAddr(int32_t addrPtr)
-
void writeNativeStatToWasmStat(struct ::stat64 *nativeStatPtr, int32_t wasmStatPtr)
-
std::vector<iovec> wasmIovecsToNativeIovecs(int32_t wasmIovecPtr, int32_t wasmIovecCount)
-
std::vector<iovec> wasiIovecsToNativeIovecs(int32_t wasiIovecPtr, int32_t wasiIovecCount)
-
std::shared_ptr<faabric::state::StateKeyValue> getStateKV(int32_t keyPtr, size_t size)
-
std::shared_ptr<faabric::state::StateKeyValue> getStateKV(int32_t keyPtr)
-
int32_t s__access(int32_t pathPtr, int32_t mode)
-
int32_t s__clock_gettime(int32_t clockId, int32_t timespecPtr)
-
int32_t s__close(int32_t fd)
-
int32_t s__dup(int32_t oldFd)
-
int32_t s__exit(int32_t a, int32_t b)
-
int32_t s__fcntl64(int32_t fd, int32_t cmd, int32_t c)
-
int32_t s__waitpid(int32_t pid, int32_t statusPtr, int32_t options)
-
int32_t s__fstat64(int32_t fd, int32_t statBufPtr)
-
int32_t s__futex(int32_t uaddrPtr, int32_t futex_op, int32_t val, int32_t timeoutPtr, int32_t uaddr2Ptr, int32_t other)
-
int32_t s__getdents64(int32_t fd, int32_t wasmDirentBuf, int32_t wasmDirentBufLen)
-
int32_t s__getrandom(int32_t bufPtr, int32_t bufLen, int32_t flags)
-
int32_t s__gettimeofday(int32_t tvPtr, int32_t tzPtr)
-
int32_t s__ioctl(int32_t fd, int32_t request, int32_t argPtr, int32_t d, int32_t e, int32_t f)
-
int32_t s__llseek(int32_t fd, int32_t offsetHigh, int32_t offsetLow, int32_t resultPtr, int32_t whence)
-
int32_t s__lstat64(int32_t pathPtr, int32_t statBufPtr)
-
int32_t s__madvise(int32_t address, int32_t numBytes, int32_t advice)
-
int32_t s__membarrier(int32_t a)
-
int32_t s__mkdir(int32_t pathPtr, int32_t mode)
-
int32_t s__mmap(int32_t addr, int32_t length, int32_t prot, int32_t flags, int32_t fd, int32_t offset)
-
int32_t s__mprotect(int32_t addrPtr, int32_t len, int32_t prot)
-
int32_t s__nanosleep(int32_t reqPtr, int32_t remPtr)
-
int32_t s__open(int32_t pathPtr, int32_t flags, int32_t mode)
-
int32_t s__poll(int32_t fdsPtr, int32_t nfds, int32_t timeout)
-
int32_t s__read(int32_t fd, int32_t bufPtr, int32_t bufLen)
-
int32_t s__readlink(int32_t pathPtr, int32_t bufPtr, int32_t bufLen)
-
int32_t s__readv(int32_t fd, int32_t iovecPtr, int32_t iovecCount)
-
int32_t s__rename(int32_t srcPtr, int32_t destPtr)
-
int32_t s__rt_sigprocmask(int32_t how, int32_t sigSetPtr, int32_t oldSetPtr, int32_t sigsetsize)
-
int32_t s__sched_getaffinity(int32_t pid, int32_t cpuSetSize, int32_t maskPtr)
-
int32_t s__sigaction(int32_t a, int32_t b, int32_t c)
-
int32_t s__sigemptyset(int32_t a)
-
int32_t s__siginterrupt(int32_t a, int32_t b)
-
int32_t s__socketcall(int32_t call, int32_t argsPtr)
-
int32_t s__stat64(int32_t pathPtr, int32_t statBufPtr)
-
int32_t s__unlink(int32_t pathPtr)
-
int32_t s__write(int32_t fd, int32_t bufPtr, int32_t bufLen)
-
int32_t s__writev(int32_t fd, int32_t iov, int32_t iovcnt)
-
void wasiLink()
-
struct wasm_dirent64
- #include <syscalls.h>
To double check this, work out which header from the sysroot is resolved Currently this is:
include/__struct_dirent.h
include/__typedef_ino_t.h
struct dirent { ino_t d_ino; # unsigned long long unsigned char d_type; char d_name[]; };
-
struct wasm_faabric_win_t
-
struct wasm_iovec
-
struct wasm_passwd
- #include <syscalls.h>
Found in pwd.h.
Note that char pointers are uint32_t
-
struct wasm_pthread
- #include <syscalls.h>
Found in pthread_impl.h The “real” pthread struct has a lot of stuff in it. We only care about a subset of the fields that appear at the start, especially the pointer to itself, which allows references to be treated like pointers.
Public Members
-
int32_t selfPtr
-
int32_t selfPtr
-
struct wasm_sockaddr
- #include <syscalls.h>
Socket-related struct (see https://beej.us/guide/bgnet/html/multi/sockaddr_inman.html)
-
struct wasm_stack_t
- #include <syscalls.h>
Found in bits/signal.h stack_t is used in calls to sigaltstack, either to specify a new stack or to get details about the existing
-
struct wasm_stat
Public Members
-
uint64_t st_dev
-
uint64_t st_ino
-
uint64_t st_nlink
-
uint32_t st_mode
-
uint32_t st_uid
-
uint32_t st_gid
-
uint32_t __pad0
-
uint64_t st_rdev
-
int64_t st_size
-
int32_t st_blksize
-
int64_t st_blocks
-
struct wasm_timespec st_atim
-
struct wasm_timespec st_mtim
-
struct wasm_timespec st_ctim
-
int64_t __unused[3]
-
uint64_t st_dev
-
struct wasm_timespec
- #include <syscalls.h>
Any structs passed as arguments must be re-implemented here with the following mappings (respecting signed/ unsigned):
int64_t = int64_t/uint64_t short = int16_t/uint16_t long = int32_t/uint32_t int = int32_t/uint32_t char = uint8_t pointers = Uptr size_t = int32_t time_t = int64_t
You need to look at include/bits/alltypes.h in the relevant sysroot to get a lot of the types
-
struct wasm_timeval
-
struct wasm_utsname
- #include <syscalls.h>
Found in sys/utsname.h Used to convey system info via uname
-
struct wasm_winsize
- #include <syscalls.h>
Found in ioctl.h Used to communicate size of the window we’re operating in
-
enum SocketCalls