[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH 1/6] lib/syscall_shim: Namespace definitions



Ensures that all introduced macros and prototypes are prefixed with
uk, __uk, UK, or __UK. This is done for reducing the risk of name
clashes in the future.

Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
---
 lib/syscall_shim/entry.c.in_end       |  2 +-
 lib/syscall_shim/include/uk/syscall.h | 61 +++++++++++++++------------
 2 files changed, 35 insertions(+), 28 deletions(-)

diff --git a/lib/syscall_shim/entry.c.in_end b/lib/syscall_shim/entry.c.in_end
index dd809e7b..78cb96ad 100644
--- a/lib/syscall_shim/entry.c.in_end
+++ b/lib/syscall_shim/entry.c.in_end
@@ -2,7 +2,7 @@
 long uk_syscall(long n, ...)
 {
        va_list ap;
-       syscall_arg_t a,b,c,d,e,f;
+       long a,b,c,d,e,f;
        va_start(ap, n);
        a=va_arg(ap, long);
        b=va_arg(ap, long);
diff --git a/lib/syscall_shim/include/uk/syscall.h 
b/lib/syscall_shim/include/uk/syscall.h
index ebefa403..7ef19e5d 100644
--- a/lib/syscall_shim/include/uk/syscall.h
+++ b/lib/syscall_shim/include/uk/syscall.h
@@ -41,26 +41,26 @@
 #include <uk/print.h>
 
 #define __uk_scc(X) ((long) (X))
-typedef long syscall_arg_t;
+typedef long uk_syscall_arg_t;
 
-#define __uk_syscall(syscall_nr, ...) \
+#define __uk_syscall_fn(syscall_nr, ...) \
        UK_CONCAT(uk_syscall_fn_, syscall_nr) (__VA_ARGS__)
 
-#define __uk_syscall0(n) __uk_syscall(n)
-#define __uk_syscall1(n,a) __uk_syscall(n,__uk_scc(a))
-#define __uk_syscall2(n,a,b) __uk_syscall(n,__uk_scc(a),__uk_scc(b))
-#define __uk_syscall3(n,a,b,c) 
__uk_syscall(n,__uk_scc(a),__uk_scc(b),__uk_scc(c))
-#define __uk_syscall4(n,a,b,c,d) 
__uk_syscall(n,__uk_scc(a),__uk_scc(b),__uk_scc(c),__uk_scc(d))
-#define __uk_syscall5(n,a,b,c,d,e) 
__uk_syscall(n,__uk_scc(a),__uk_scc(b),__uk_scc(c),__uk_scc(d),__uk_scc(e))
-#define __uk_syscall6(n,a,b,c,d,e,f) 
__uk_syscall(n,__uk_scc(a),__uk_scc(b),__uk_scc(c),__uk_scc(d),__uk_scc(e),__uk_scc(f))
-#define __uk_syscall7(n,a,b,c,d,e,f,g) 
(__uk_syscall)(n,__uk_scc(a),__uk_scc(b),__uk_scc(c),__uk_scc(d),__uk_scc(e),__uk_scc(f),__uk_scc(g))
+#define __uk_syscall0(n) __uk_syscall_fn(n)
+#define __uk_syscall1(n,a) __uk_syscall_fn(n,__uk_scc(a))
+#define __uk_syscall2(n,a,b) __uk_syscall_fn(n,__uk_scc(a),__uk_scc(b))
+#define __uk_syscall3(n,a,b,c) 
__uk_syscall_fn(n,__uk_scc(a),__uk_scc(b),__uk_scc(c))
+#define __uk_syscall4(n,a,b,c,d) 
__uk_syscall_fn(n,__uk_scc(a),__uk_scc(b),__uk_scc(c),__uk_scc(d))
+#define __uk_syscall5(n,a,b,c,d,e) 
__uk_syscall_fn(n,__uk_scc(a),__uk_scc(b),__uk_scc(c),__uk_scc(d),__uk_scc(e))
+#define __uk_syscall6(n,a,b,c,d,e,f) 
__uk_syscall_fn(n,__uk_scc(a),__uk_scc(b),__uk_scc(c),__uk_scc(d),__uk_scc(e),__uk_scc(f))
+#define __uk_syscall7(n,a,b,c,d,e,f,g) 
__uk_syscall_fn(n,__uk_scc(a),__uk_scc(b),__uk_scc(c),__uk_scc(d),__uk_scc(e),__uk_scc(f),__uk_scc(g))
 
 
-#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n
-#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0,)
+#define __UK_SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n
+#define __UK_SYSCALL_NARGS(...) 
__UK_SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0,)
 
-#define __SYSCALL_DEF_NARGS_X(z, a1,a2, b1,b2, c1,c2, d1,d2, e1,e2, f1,f2, 
g1,g2, nr, ...) nr
-#define __SYSCALL_DEF_NARGS(...) __SYSCALL_DEF_NARGS_X(__VA_ARGS__, 7,7, 6,6, 
5,5, 4,4, 3,3, 2,2, 1,1,0)
+#define __UK_SYSCALL_DEF_NARGS_X(z, a1,a2, b1,b2, c1,c2, d1,d2, e1,e2, f1,f2, 
g1,g2, nr, ...) nr
+#define __UK_SYSCALL_DEF_NARGS(...) __UK_SYSCALL_DEF_NARGS_X(__VA_ARGS__, 7,7, 
6,6, 5,5, 4,4, 3,3, 2,2, 1,1,0)
 
 #define __UK_NAME2SCALL_FN(name) UK_CONCAT(uk_syscall_, name)
 
@@ -73,9 +73,9 @@ typedef long syscall_arg_t;
 #define UK_ARG_MAP7(m, type, arg, ...) m(type, arg), UK_ARG_MAP6(m, 
__VA_ARGS__)
 #define UK_ARG_MAPx(nr_args, ...) UK_CONCAT(UK_ARG_MAP, nr_args)(__VA_ARGS__)
 
-#define S_ARG_LONG(type, arg) unsigned long arg
-#define S_ARG_ACTUAL(type, arg) type arg
-#define S_ARG_CAST(type, arg) (type) arg
+#define UK_S_ARG_LONG(type, arg)   unsigned long arg
+#define UK_S_ARG_ACTUAL(type, arg) type arg
+#define UK_S_ARG_CAST(type, arg)   (type) arg
 
 
 /* NOTE and TODO:
@@ -94,22 +94,24 @@ typedef long syscall_arg_t;
  */
 #ifdef CONFIG_LIBSYSCALL_SHIM
 #define __UK_SYSCALL_DEFINE(x, name, ...)                              \
-       static inline long __##name(UK_ARG_MAPx(x, S_ARG_ACTUAL, __VA_ARGS__)); 
\
-       long name(UK_ARG_MAPx(x, S_ARG_LONG, __VA_ARGS__))                      
\
+       static inline long __##name(UK_ARG_MAPx(x, UK_S_ARG_ACTUAL,     \
+                                               __VA_ARGS__));          \
+       long name(UK_ARG_MAPx(x, UK_S_ARG_LONG, __VA_ARGS__))           \
        {                                                               \
                long ret = __##name(                                    \
-                       UK_ARG_MAPx(x, S_ARG_CAST, __VA_ARGS__));               
\
+                       UK_ARG_MAPx(x, UK_S_ARG_CAST, __VA_ARGS__));    \
                return ret;                                             \
        }                                                               \
-       static inline long __##name(UK_ARG_MAPx(x, S_ARG_ACTUAL, __VA_ARGS__))
+       static inline long __##name(UK_ARG_MAPx(x, UK_S_ARG_ACTUAL,     \
+                                               __VA_ARGS__))
 #else
 #define __UK_SYSCALL_DEFINE(x, name, ...)                              \
-       static inline long name(UK_ARG_MAPx(x, S_ARG_ACTUAL, __VA_ARGS__))
+       static inline long name(UK_ARG_MAPx(x, UK_S_ARG_ACTUAL, __VA_ARGS__))
 #endif
 
 #define _UK_SYSCALL_DEFINE(...) __UK_SYSCALL_DEFINE(__VA_ARGS__)
 #define UK_SYSCALL_DEFINE(name, ...)                           \
-       _UK_SYSCALL_DEFINE(__SYSCALL_DEF_NARGS(__VA_ARGS__),    \
+       _UK_SYSCALL_DEFINE(__UK_SYSCALL_DEF_NARGS(__VA_ARGS__), \
                            __UK_NAME2SCALL_FN(name),           \
                            __VA_ARGS__)
 
@@ -126,12 +128,12 @@ typedef long syscall_arg_t;
        UK_CONCAT(__UK_SPROTO_ARGS, args_nr)()
 
 #define UK_SYSCALL_PROTO(args_nr, syscall_name)                        \
-       long UK_CONCAT(uk_syscall_, syscall_name)(      \
+       long __UK_NAME2SCALLE_FN(syscall_name)(                 \
                __UK_SPROTO_ARGSx(args_nr))
 
 #define uk_syscall_stub(syscall_name) ({                       \
                        uk_pr_debug("syscall \"" syscall_name   \
-                                   "\" is not implemented");   \
+                                   "\" is not implemented\n"); \
                        errno = -ENOSYS;                        \
                        -1;                                     \
                })
@@ -145,8 +147,13 @@ typedef long syscall_arg_t;
 
 long uk_syscall(long n, ...);
 
-#define syscall(...)                                                   \
-       UK_CONCAT(__uk_syscall, __SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__)
+/*
+ * Use this variant instead of `uk_syscall()` whenever the system call number
+ * is a constant. This macro maps the function call directly to the target
+ * handler instead of doing a look-up at runtime
+ */
+#define uk_syscall_static(...)                                         \
+       UK_CONCAT(__uk_syscall, __UK_SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__)
 #endif
 
 #endif /* __UK_SYSCALL_H__ */
-- 
2.20.1


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.