From 7ee786388ae0d6f8c8cea7bf012cc11fdb5b534a Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sun, 16 Jan 2022 01:18:49 +0900 Subject: [wasm] wasm/missing.{c,h}: add missing libc stubs for wasi-libc --- wasm/GNUmakefile.in | 1 + wasm/missing.c | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 wasm/missing.c (limited to 'wasm') diff --git a/wasm/GNUmakefile.in b/wasm/GNUmakefile.in index b3b427e023..4328dec9c6 100644 --- a/wasm/GNUmakefile.in +++ b/wasm/GNUmakefile.in @@ -8,6 +8,7 @@ wasmoptflags = @wasmoptflags@ WASM_OBJS = $(wasmdir)/machine_core.o $(wasmdir)/machine.o $(wasmdir)/setjmp.o $(wasmdir)/setjmp_core.o $(wasmdir)/fiber.o $(wasmdir)/runtime.o +wasm/missing.$(OBJEXT): $(wasmdir)/missing.c $(PLATFORM_D) wasm/fiber.$(OBJEXT): $(wasmdir)/fiber.c $(wasmdir)/fiber.h $(wasmdir)/asyncify.h $(PLATFORM_D) wasm/machine.$(OBJEXT): $(wasmdir)/machine.c $(srcdir)/wasm/machine.h $(wasmdir)/asyncify.h $(PLATFORM_D) wasm/setjmp.$(OBJEXT): $(wasmdir)/setjmp.c $(wasmdir)/setjmp.h $(wasmdir)/machine.h $(wasmdir)/asyncify.h $(PLATFORM_D) diff --git a/wasm/missing.c b/wasm/missing.c new file mode 100644 index 0000000000..5bbf988642 --- /dev/null +++ b/wasm/missing.c @@ -0,0 +1,199 @@ +#include +#include +#include "ruby/missing.h" + +// Produce weak symbols for missing functions to replace them with actual ones if exists. +#define WASM_MISSING_LIBC_FUNC __attribute__((weak)) + +WASM_MISSING_LIBC_FUNC +int +chmod(const char *pathname, rb_mode_t mode) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +chown(const char *pathname, rb_uid_t owner, rb_gid_t group) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +dup(int oldfd) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +dup2(int oldfd, int newfd) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +execl(const char *path, const char *arg, ...) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +execle(const char *path, const char *arg, ...) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +execv(const char *path, char *const argv[]) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +execve(const char *filename, char *const argv[], char *const envp[]) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +rb_uid_t +geteuid(void) +{ + return 0; +} + +WASM_MISSING_LIBC_FUNC +rb_uid_t +getuid(void) +{ + return 0; +} + +WASM_MISSING_LIBC_FUNC +rb_pid_t +getppid(void) +{ + return 0; +} + +WASM_MISSING_LIBC_FUNC +rb_gid_t +getegid(void) +{ + return 0; +} + +WASM_MISSING_LIBC_FUNC +rb_gid_t +getgid(void) +{ + return 0; +} + +WASM_MISSING_LIBC_FUNC +char * +getlogin(void) +{ + errno = ENOTSUP; + return NULL; +} + +WASM_MISSING_LIBC_FUNC +rb_mode_t +umask(rb_mode_t mask) +{ + return 0; +} + +WASM_MISSING_LIBC_FUNC +int +mprotect(const void *addr, size_t len, int prot) +{ + return 0; +} + +WASM_MISSING_LIBC_FUNC +int +pclose(FILE *stream) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +FILE * +popen(const char *command, const char *type) +{ + errno = ENOTSUP; + return NULL; +} + +WASM_MISSING_LIBC_FUNC +int +pipe(int pipefd[2]) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +posix_madvise(void *addr, size_t len, int advice) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +kill(rb_pid_t pid, int sig) +{ + errno = ENOTSUP; + return -1; +} + + +WASM_MISSING_LIBC_FUNC +void +tzset(void) +{ + return; +} + +WASM_MISSING_LIBC_FUNC +int +shutdown(int s, int how) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +int +system(const char *command) +{ + errno = ENOTSUP; + return -1; +} + +WASM_MISSING_LIBC_FUNC +pid_t +waitpid(pid_t pid, int *wstatus, int options) +{ + errno = ENOTSUP; + return -1; +} -- cgit v1.2.3