From 39cdd0fba4706b67025bcc111ec4b1913d9a1bc2 Mon Sep 17 00:00:00 2001 From: Marco Schlumpp Date: Thu, 6 Apr 2023 18:56:16 +0200 Subject: [PATCH] Use unikraft syscalls for futex MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Marco Schlumpp Signed-off-by: Andrei Tatar Reviewed-by: Stefan Jumarea Reviewed-by: Maria Sfiraiala Reviewed-by: Razvan Deaconescu Approved-by: Eduard Vintilă Tested-by: Unikraft CI GitHub-Closes: #28 --- patches/0000-atomic_futex_syscall.patch | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 patches/0000-atomic_futex_syscall.patch diff --git a/patches/0000-atomic_futex_syscall.patch b/patches/0000-atomic_futex_syscall.patch new file mode 100644 index 0000000..76d05ec --- /dev/null +++ b/patches/0000-atomic_futex_syscall.patch @@ -0,0 +1,27 @@ +diff --git a/src/atomic.cpp b/src/atomic.cpp +--- a/src/atomic.cpp ++++ b/src/atomic.cpp (date 1680772930656) +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + // libc++ uses SYS_futex as a universal syscall name. However, on 32 bit architectures + // with a 64 bit time_t, we need to specify SYS_futex_time64. +@@ -45,13 +46,13 @@ + __cxx_contention_t __val) + { + static constexpr timespec __timeout = { 2, 0 }; +- syscall(SYS_futex, __ptr, FUTEX_WAIT_PRIVATE, __val, &__timeout, 0, 0); ++ uk_syscall_static(SYS_futex, __ptr, FUTEX_WAIT_PRIVATE, __val, &__timeout, 0, 0); + } + + static void __libcpp_platform_wake_by_address(__cxx_atomic_contention_t const volatile* __ptr, + bool __notify_one) + { +- syscall(SYS_futex, __ptr, FUTEX_WAKE_PRIVATE, __notify_one ? 1 : INT_MAX, 0, 0, 0); ++ uk_syscall_static(SYS_futex, __ptr, FUTEX_WAKE_PRIVATE, __notify_one ? 1 : INT_MAX, 0, 0, 0); + } + + #elif defined(__APPLE__) && defined(_LIBCPP_USE_ULOCK) -- 2.39.5