mirror of
https://github.com/Qortal/Brooklyn.git
synced 2025-02-15 03:35:55 +00:00
* 0day explit mitigation * Memory corruption prevention * Privilege escalation prevention * Buffer over flow prevention * File System corruption defense * Thread escape prevention This may very well be the most intensive inclusion to BrooklynR. This will not be part of an x86 suite nor it will be released as tool kit. The security core toolkit will remain part of kernel base.
67 lines
2.3 KiB
C
67 lines
2.3 KiB
C
#ifndef __LINUX_KCONFIG_H
|
|
#define __LINUX_KCONFIG_H
|
|
|
|
#include <generated/autoconf.h>
|
|
|
|
#define __ARG_PLACEHOLDER_1 0,
|
|
#define __take_second_arg(__ignored, val, ...) val
|
|
|
|
/*
|
|
* The use of "&&" / "||" is limited in certain expressions.
|
|
* The followings enable to calculate "and" / "or" with macro expansion only.
|
|
*/
|
|
#define __and(x, y) ___and(x, y)
|
|
#define ___and(x, y) ____and(__ARG_PLACEHOLDER_##x, y)
|
|
#define ____and(arg1_or_junk, y) __take_second_arg(arg1_or_junk y, 0)
|
|
|
|
#define __or(x, y) ___or(x, y)
|
|
#define ___or(x, y) ____or(__ARG_PLACEHOLDER_##x, y)
|
|
#define ____or(arg1_or_junk, y) __take_second_arg(arg1_or_junk 1, y)
|
|
|
|
/*
|
|
* Helper macros to use CONFIG_ options in C/CPP expressions. Note that
|
|
* these only work with boolean and tristate options.
|
|
*/
|
|
|
|
/*
|
|
* Getting something that works in C and CPP for an arg that may or may
|
|
* not be defined is tricky. Here, if we have "#define CONFIG_BOOGER 1"
|
|
* we match on the placeholder define, insert the "0," for arg1 and generate
|
|
* the triplet (0, 1, 0). Then the last step cherry picks the 2nd arg (a one).
|
|
* When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when
|
|
* the last step cherry picks the 2nd arg, we get a zero.
|
|
*/
|
|
#define __is_defined(x) ___is_defined(x)
|
|
#define ___is_defined(val) ____is_defined(__ARG_PLACEHOLDER_##val)
|
|
#define ____is_defined(arg1_or_junk) __take_second_arg(arg1_or_junk 1, 0)
|
|
|
|
/*
|
|
* IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
|
|
* otherwise. For boolean options, this is equivalent to
|
|
* IS_ENABLED(CONFIG_FOO).
|
|
*/
|
|
#define IS_BUILTIN(option) __is_defined(option)
|
|
|
|
/*
|
|
* IS_MODULE(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'm', 0
|
|
* otherwise.
|
|
*/
|
|
#define IS_MODULE(option) __is_defined(option##_MODULE)
|
|
|
|
/*
|
|
* IS_REACHABLE(CONFIG_FOO) evaluates to 1 if the currently compiled
|
|
* code can call a function defined in code compiled based on CONFIG_FOO.
|
|
* This is similar to IS_ENABLED(), but returns false when invoked from
|
|
* built-in code when CONFIG_FOO is set to 'm'.
|
|
*/
|
|
#define IS_REACHABLE(option) __or(IS_BUILTIN(option), \
|
|
__and(IS_MODULE(option), __is_defined(MODULE)))
|
|
|
|
/*
|
|
* IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
|
|
* 0 otherwise.
|
|
*/
|
|
#define IS_ENABLED(option) __or(IS_BUILTIN(option), IS_MODULE(option))
|
|
|
|
#endif /* __LINUX_KCONFIG_H */
|