【发布时间】:2019-03-25 04:37:34
【问题描述】:
我试图从 /include/linux/syscall.h 中理解一段代码,其中一个宏定义似乎有多个值,用分号分隔每个值:
235 #define __SYSCALL_DEFINEx(x, name, ...) \
236 __diag_push(); \
237 __diag_ignore(GCC, 8, "-Wattribute-alias", \
238 "Type aliasing is used to sanitize syscall arguments");\
239 asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \
240 __attribute__((alias(__stringify(__se_sys##name)))); \
241 ALLOW_ERROR_INJECTION(sys##name, ERRNO); \
242 static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
243 asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
244 asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
245 { \
246 long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__));\
247 __MAP(x,__SC_TEST,__VA_ARGS__); \
248 __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \
249 return ret; \
250 } \
251 __diag_pop(); \
252 static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
我以前没见过这个,也找不到任何关于这个的参考。 __SYSCALL_DEFINEx(x, name, ...) 以这种方式定义时会做什么?
【问题讨论】:
标签: c linux-kernel c-preprocessor