libsel4muslcsys: Add some missing thread routines A C library may call set_thread_area on startup and tkill on shutdown, so we need to implement stubs of these
diff --git a/libsel4muslcsys/src/sys_exit.c b/libsel4muslcsys/src/sys_exit.c index d2e1ec8..3872fab 100644 --- a/libsel4muslcsys/src/sys_exit.c +++ b/libsel4muslcsys/src/sys_exit.c
@@ -61,6 +61,14 @@ } long +sys_tkill(va_list ap) +{ + printf("%s assuming self kill\n", __FUNCTION__); + sel4_abort(); + return 0; +} + +long sys_exit_group(va_list ap) { printf("Ignoring call to %s\n", __FUNCTION__);
diff --git a/libsel4muslcsys/src/sys_thread.c b/libsel4muslcsys/src/sys_thread.c index 6bea175..84704d4 100644 --- a/libsel4muslcsys/src/sys_thread.c +++ b/libsel4muslcsys/src/sys_thread.c
@@ -12,7 +12,12 @@ #include <bits/errno.h> long sys_set_thread_area(va_list ap) { - return -ENOSYS; + /* As part of the initialization of the C library we need to set the + * thread area (also knows as the TLS base) for thread local storage. + * As we do not properly support TLS we just ignore this call. Will + * be fine provided we do not create multiple threads (through libc) + * or use TLS */ + return 0; } long sys_set_tid_address(va_list ap) {
diff --git a/libsel4muslcsys/src/syscalls.h b/libsel4muslcsys/src/syscalls.h index fb5dba3..757cb39 100644 --- a/libsel4muslcsys/src/syscalls.h +++ b/libsel4muslcsys/src/syscalls.h
@@ -22,6 +22,7 @@ long sys_gettid(va_list ap); long sys_getpid(va_list ap); long sys_tgkill(va_list ap); +long sys_tkill(va_list ap); long sys_exit_group(va_list ap); long sys_open(va_list ap); long sys_close(va_list ap);
diff --git a/libsel4muslcsys/src/vsyscall.c b/libsel4muslcsys/src/vsyscall.c index ed1ece2..45c4561 100644 --- a/libsel4muslcsys/src/vsyscall.c +++ b/libsel4muslcsys/src/vsyscall.c
@@ -30,6 +30,7 @@ [__NR_gettid] = sys_gettid, [__NR_getpid] = sys_getpid, [__NR_tgkill] = sys_tgkill, + [__NR_tkill] = sys_tkill, [__NR_exit_group] = sys_exit_group, [__NR_open] = sys_open, [__NR_close] = sys_close,