[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |