|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v2 4/5] lib/syscall_shim: Provide uk_vsyscall(), uk_vsyscall_r()
Provide a variant to the general and raw system call function
uk_syscall() and uk_syscall_r() that accepts a va_list argument instead:
long uk_vsyscall(long n, va_list arg);
long uk_vsyscall_r(long n, va_list arg);
Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
---
lib/syscall_shim/include/uk/syscall.h | 3 +++
lib/syscall_shim/uk_syscall.c.in_end | 12 ++++++++++++
lib/syscall_shim/uk_syscall_r.c.in_end | 12 ++++++++++++
3 files changed, 27 insertions(+)
diff --git a/lib/syscall_shim/include/uk/syscall.h
b/lib/syscall_shim/include/uk/syscall.h
index aafe20a7..dc7bc7ef 100644
--- a/lib/syscall_shim/include/uk/syscall.h
+++ b/lib/syscall_shim/include/uk/syscall.h
@@ -41,6 +41,7 @@
#include <uk/essentials.h>
#include <uk/errptr.h>
#include <errno.h>
+#include <stdarg.h>
#include <uk/print.h>
/*
@@ -288,6 +289,7 @@ typedef long uk_syscall_arg_t;
/* System call, returns -1 and sets errno on errors */
long uk_syscall(long n, ...);
+long uk_vsyscall(long n, va_list arg);
/*
* Use this variant instead of `uk_syscall()` whenever the system call number
@@ -299,6 +301,7 @@ long uk_syscall(long n, ...);
/* Raw system call, returns negative codes on errors */
long uk_syscall_r(long n, ...);
+long uk_vsyscall_r(long n, va_list arg);
/*
* Use this variant instead of `uk_syscall_r()` whenever the system call number
diff --git a/lib/syscall_shim/uk_syscall.c.in_end
b/lib/syscall_shim/uk_syscall.c.in_end
index 79a8b7fd..8a5f8e0b 100644
--- a/lib/syscall_shim/uk_syscall.c.in_end
+++ b/lib/syscall_shim/uk_syscall.c.in_end
@@ -13,3 +13,15 @@ long uk_syscall(long n, ...)
va_end(ap);
return __uk_syscall(n,a,b,c,d,e,f);
}
+
+long uk_vsyscall(long n, va_list arg)
+{
+ long a,b,c,d,e,f;
+ a=va_arg(arg, long);
+ b=va_arg(arg, long);
+ c=va_arg(arg, long);
+ d=va_arg(arg, long);
+ e=va_arg(arg, long);
+ f=va_arg(arg, long);
+ return __uk_syscall(n,a,b,c,d,e,f);
+}
diff --git a/lib/syscall_shim/uk_syscall_r.c.in_end
b/lib/syscall_shim/uk_syscall_r.c.in_end
index ee8a5689..ae74716e 100644
--- a/lib/syscall_shim/uk_syscall_r.c.in_end
+++ b/lib/syscall_shim/uk_syscall_r.c.in_end
@@ -14,6 +14,18 @@ long uk_syscall_r(long n, ...)
return __uk_syscall_r(n,a,b,c,d,e,f);
}
+long uk_vsyscall_r(long n, va_list arg)
+{
+ long a,b,c,d,e,f;
+ a=va_arg(arg, long);
+ b=va_arg(arg, long);
+ c=va_arg(arg, long);
+ d=va_arg(arg, long);
+ e=va_arg(arg, long);
+ f=va_arg(arg, long);
+ return __uk_syscall_r(n,a,b,c,d,e,f);
+}
+
#if CONFIG_LIBSYSCALL_SHIM_HANDLER
#include <uk/plat/syscall.h>
#include <uk/assert.h>
--
2.20.1
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |