[libc-commits] [libc] [libc] Refactor core Linux syscalls to use syscall_wrappers (PR #185983)
Alexey Samsonov via libc-commits
libc-commits at lists.llvm.org
Thu Mar 12 09:57:54 PDT 2026
================
@@ -0,0 +1,68 @@
+.. _syscall_wrapper_refactor:
+
+==============================
+Syscall Wrapper Refactoring
+==============================
+
+Purpose
+=======
+
+LLVM-libc is transitioning to a centralized system for Linux syscalls. The goal
+is to move all direct ``syscall_impl`` calls into a dedicated directory:
+``src/__support/OSUtil/linux/syscall_wrappers/``.
+
+This refactor provides several benefits:
+
+* **Type Safety**: Using ``ErrorOr<T>`` ensures that error conditions are
+ handled explicitly.
+* **Consistency**: Standardizes the conversion of syscall return values into
+ errno-compatible objects.
+* **Maintainability**: Centralizes platform-specific syscall logic, making it
+ easier to audit and update.
+
+The Pattern
+===========
+
+Each syscall should have its own header-only library in the ``syscall_wrappers``
+directory. The wrapper function should return an ``ErrorOr<T>``.
+
+Example Wrapper (``src/__support/OSUtil/linux/syscall_wrappers/read.h``):
+--------------------------------------------------------------------------
+
+.. code-block:: c++
+
+ #include "src/__support/OSUtil/linux/syscall.h" // For syscall_impl
+ #include "src/__support/error_or.h"
+ #include "src/__support/common.h"
+ #include <sys/syscall.h> // For syscall numbers
----------------
vonosmas wrote:
I hope we can avoid including system header here if possible. E.g. today the only
way to get `SYS_` numbers is to generate our own `<sys/syscall.h>` header:
https://github.com/llvm/llvm-project/blob/main/libc/include/sys/syscall.h.def
Probably these `SYS_` numbers can be extracted out into our internal header under `include/`,
expose them via proxy header, and use here.
https://github.com/llvm/llvm-project/pull/185983
More information about the libc-commits
mailing list