]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
lib/syscall_shim: Add non-LL execenv syscall registration variant
authorSergiu Moga <sergiu@unikraft.io>
Wed, 19 Mar 2025 15:11:28 +0000 (17:11 +0200)
committerUnikraft Bot <monkey@unikraft.io>
Thu, 17 Apr 2025 12:33:46 +0000 (12:33 +0000)
Based on UK_LLSYSCALL_R_E_DEFINE and provides a libc-style wrapper
in case UK_LIBC_SYSCALLS is enabled.

(Similar to its UK_SYSCALL_R_DEFINE, non-execenv variants)

Checkpatch-Ignore: MACRO_ARG_REUSE
Checkpatch-Ignore: COMPLEX_MACRO
Checkpatch-Ignore: SPACING
Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1618

lib/syscall_shim/include/uk/syscall.h

index 770a179aedc6ab83de07dba8a12a591de2a5da66..262f45dc3a2b3e8535139788a360aa2e974104de 100644 (file)
@@ -567,6 +567,74 @@ typedef long uk_syscall_arg_t;
                               __VA_ARGS__)
 #endif /* UK_LIBC_SYSCALLS */
 
+/*
+ * UK_SYSCALL_R_E_DEFINE()
+ * Based on UK_LLSYSCALL_R_E_DEFINE and provides a libc-style wrapper
+ * in case UK_LIBC_SYSCALLS is enabled
+ */
+#if UK_LIBC_SYSCALLS
+#define __UK_SYSCALL_R_E_DEFINE(x, rtype, name, ename, rname, doname, ...)\
+       long ename(UK_ARG_MAPx(x, UK_S_ARG_LONG, __VA_ARGS__));         \
+       rtype name(UK_ARG_MAPx(x, UK_S_ARG_ACTUAL, __VA_ARGS__))        \
+       {                                                               \
+               rtype ret;                                              \
+                                                                       \
+               ret = (rtype) ename(                                    \
+                       UK_ARG_MAPx(x, UK_S_ARG_CAST_LONG, __VA_ARGS__)); \
+               return ret;                                             \
+       }                                                               \
+       _UK_LLSYSCALL_R_E_DEFINE(x,                                     \
+                                rtype,                                 \
+                                name,                                  \
+                                __UK_NAME2SCALLE_FN(e_##name),         \
+                                __UK_NAME2SCALLR_FN(e_##name),         \
+                                __UK_NAME2SCALLDO_FN(e_##name),        \
+                                __VA_ARGS__)
+#define _UK_SYSCALL_R_E_DEFINE(...) __UK_SYSCALL_R_E_DEFINE(__VA_ARGS__)
+#define UK_SYSCALL_R_E_DEFINE(rtype, name, ...)                                \
+       UK_SYSCALL_EXECENV_PROLOGUE_DEFINE(__UK_NAME2SCALLE_FN(name),   \
+                                      __UK_NAME2SCALLE_FN(e_##name),   \
+                                      UK_NARGS(__VA_ARGS__),           \
+                                      __VA_ARGS__)                     \
+       UK_SYSCALL_EXECENV_PROLOGUE_DEFINE(__UK_NAME2SCALLR_FN(name),   \
+                                      __UK_NAME2SCALLR_FN(e_##name),   \
+                                      UK_NARGS(__VA_ARGS__),           \
+                                      __VA_ARGS__)                     \
+       UK_SYSCALL_EXECENV_PROLOGUE_DEFINE(__UK_NAME2SCALLDO_FN(name),  \
+                                      __UK_NAME2SCALLDO_FN(e_##name),  \
+                                      UK_NARGS(__VA_ARGS__),           \
+                                      __VA_ARGS__)                     \
+       _UK_SYSCALL_R_E_DEFINE(UK_NARGS(__VA_ARGS__),                   \
+                            rtype,                                     \
+                            name,                                      \
+                            __UK_NAME2SCALLE_FN(name),                 \
+                            __UK_NAME2SCALLR_FN(name),                 \
+                            __UK_NAME2SCALLDO_FN(name),                \
+                            __VA_ARGS__)
+#else
+#define UK_SYSCALL_R_E_DEFINE(rtype, name, ...)                                \
+       UK_SYSCALL_EXECENV_PROLOGUE_DEFINE(__UK_NAME2SCALLE_FN(name),   \
+                                      __UK_NAME2SCALLE_FN(e_##name),   \
+                                      UK_NARGS(__VA_ARGS__),           \
+                                      __VA_ARGS__)                     \
+       UK_SYSCALL_EXECENV_PROLOGUE_DEFINE(__UK_NAME2SCALLR_FN(name),   \
+                                      __UK_NAME2SCALLR_FN(e_##name),   \
+                                      UK_NARGS(__VA_ARGS__),           \
+                                      __VA_ARGS__)                     \
+       UK_SYSCALL_EXECENV_PROLOGUE_DEFINE(__UK_NAME2SCALLDO_FN(name),  \
+                                      __UK_NAME2SCALLDO_FN(e_##name),  \
+                                      UK_NARGS(__VA_ARGS__),           \
+                                      __VA_ARGS__)                     \
+       _UK_LLSYSCALL_R_E_DEFINE(UK_NARGS(__VA_ARGS__),                 \
+                                rtype,                                 \
+                                name,                                  \
+                                __UK_NAME2SCALLE_FN(e_##name),         \
+                                __UK_NAME2SCALLR_FN(e_##name),         \
+                                __UK_NAME2SCALLDO_FN(e_##name),        \
+                                __VA_ARGS__)
+
+#endif /* UK_LIBC_SYSCALLS */
+
 
 #define __UK_SPROTO_ARGS_TYPE long
 #define __UK_SPROTO_ARGS0()  void