Add helper to run a function as a routine kmsg
[akaros.git] / kern / include / compiler.h
1 #pragma once
2
3 /* Linux calls it __ASSEMBLY__ */
4 #ifdef __ASSEMBLER__
5 #define __ASSEMBLY__ 1
6 #endif
7
8 /* This is a bit hokey.  It turns off the #define inline to include
9  * always_inline, which breaks our uses of "extern inline". */
10 #define CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING 1
11 #define CONFIG_OPTIMIZE_INLINING 1
12
13 /* Make sure Linux's compiler.h is only included here. */
14 #define __AKAROS_COMPILER_H 1
15 #include <linux/compiler.h>
16 #undef __AKAROS_COMPILER_H
17
18 /* Linux uses this as a tag for the __CHECKER__ and either defined it to
19  * nothing or to some attribute.  We use it for the name of the pcpu variables
20  * .section, so need it to not be #defined yet. */
21 #undef __percpu
22
23 /* If __VA_ARGS__ is empty, the ## will eat the comma to the left, so we call
24  * __MACRO_NARG with 1 + NR_ARGS arguments, then the 6, 5, 4, etc.  __MACRO_NARG
25  * will strip the 0 (the _0), then the args (if any), and then return the Nth
26  * integer passed in, which will be the number of original args. */
27 #define __MACRO_NARG(_0, _1, _2, _3, _4, _5, _6, x, ...) x
28 #define MACRO_NR_ARGS(...) __MACRO_NARG(0, ##__VA_ARGS__, 6, 5, 4, 3, 2, 1, 0)