From: Sergiu Moga Date: Wed, 19 Mar 2025 15:11:28 +0000 (+0200) Subject: lib/syscall_shim: Add non-LL execenv syscall registration variant X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=eb8098504c641c627e9bd3ba95c6cc5fc99589e3;p=unikraft%2Funikraft.git lib/syscall_shim: Add non-LL execenv syscall registration variant 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 Approved-by: Michalis Pappas Reviewed-by: Michalis Pappas Reviewed-by: Andrei Tatar GitHub-Closes: #1618 --- diff --git a/lib/syscall_shim/include/uk/syscall.h b/lib/syscall_shim/include/uk/syscall.h index 770a179ae..262f45dc3 100644 --- a/lib/syscall_shim/include/uk/syscall.h +++ b/lib/syscall_shim/include/uk/syscall.h @@ -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