kernel_defines.h File Reference

Common macros and compiler attributes/pragmas configuration. More...

Detailed Description

Common macros and compiler attributes/pragmas configuration.

Author
René Kijewski rene..nosp@m.kije.nosp@m.wski@.nosp@m.fu-b.nosp@m.erlin.nosp@m..de
Michel Rottleuthner miche.nosp@m.l.ro.nosp@m.ttleu.nosp@m.thne.nosp@m.r@haw.nosp@m.-ham.nosp@m.burg..nosp@m.de

Definition in file kernel_defines.h.

#include <stddef.h>
#include <stdint.h>
+ Include dependency graph for kernel_defines.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

#define container_of(PTR, TYPE, MEMBER)   ((TYPE *) ((char *) (PTR) - offsetof(TYPE, MEMBER)))
 Returns the container of a pointer to a member. More...
 
#define NORETURN
 The NORETURN keyword tells the compiler to assume that the function cannot return.
 
#define CONST
 A function declared as CONST is PURE and also not allowed to examine global memory. I.e. a CONST function cannot even dereference a pointer parameter.
 
#define PURE
 The function has no effects except the return value and its return value depends only on the parameters and/or global variables. Such a function can be subject to common subexpression elimination and loop optimization just as an arithmetic operator would be.
 
#define UNREACHABLE()   do { /* nothing */ } while (1)
 Tell the compiler that this line of code cannot be reached. More...
 
#define ARRAY_SIZE(a)   (sizeof((a)) / sizeof((a)[0]))
 Calculate the number of elements in a static array. More...
 
#define ALIGN_OF(T)   (offsetof(struct { char c; T t; }, t))
 Calculate the minimal alignment for type T. More...
 
#define BUILD_BUG_ON(condition)   ((void)sizeof(char[1 - 2 * !!(condition)]))
 Forces a compilation error if condition is true. This trick is only needed if the condition can't be evaluated before compile time (i.e. sizeof(sometype_t) < 42 ) For more details on this see for example: https://git.kernel.org/pub/scm/linux/kernel/git/stable/ linux-stable.git/tree/include/linux/bug.h. More...
 
#define IS_ACTIVE(macro)   __is_active(macro)
 Allows to verify a macro definition outside the preprocessor. More...
 
#define IS_USED(module)   IS_ACTIVE(module)
 Checks whether a module is being used or not. Can be used in C conditionals. More...
 

Macro Definition Documentation

◆ ALIGN_OF

#define ALIGN_OF (   T)    (offsetof(struct { char c; T t; }, t))

Calculate the minimal alignment for type T.

Parameters
[in]TType to examine
Returns
The minimal alignment of T.

Definition at line 131 of file kernel_defines.h.

◆ ARRAY_SIZE

#define ARRAY_SIZE (   a)    (sizeof((a)) / sizeof((a)[0]))

Calculate the number of elements in a static array.

Parameters
[in]aArray to examine
Returns
The number of elements in the array a.

Definition at line 122 of file kernel_defines.h.

◆ BUILD_BUG_ON

#define BUILD_BUG_ON (   condition)    ((void)sizeof(char[1 - 2 * !!(condition)]))

Forces a compilation error if condition is true. This trick is only needed if the condition can't be evaluated before compile time (i.e. sizeof(sometype_t) < 42 ) For more details on this see for example: https://git.kernel.org/pub/scm/linux/kernel/git/stable/ linux-stable.git/tree/include/linux/bug.h.

Parameters
[in]conditionA condition that will be evaluated at compile time

Definition at line 143 of file kernel_defines.h.

◆ container_of

#define container_of (   PTR,
  TYPE,
  MEMBER 
)    ((TYPE *) ((char *) (PTR) - offsetof(TYPE, MEMBER)))

Returns the container of a pointer to a member.

For a struct TYPE with a member MEMBER, given a pointer PTR to TYPE::MEMBER this function returns a pointer to the instance of TYPE.

E.g. for struct my_struct_t { ...; something_t n; ... } my_struct;, &my_struct == container_of(&my_struct.n, struct my_struct_t, n).

Parameters
[in]PTRpointer to a member
[in]TYPEa type name (a struct or union), container of PTR
[in]MEMBERname of the member of TYPE which PTR points to
Returns
Pointer to the container of PTR.

Definition at line 62 of file kernel_defines.h.

◆ IS_ACTIVE

#define IS_ACTIVE (   macro)    __is_active(macro)

Allows to verify a macro definition outside the preprocessor.

This macro is based on Linux's clever 'IS_BUILTIN' (https://github.com/torvalds/linux/blob/master/include/linux/kconfig.h). It takes a macro value that may be defined to 1 or not even defined (e.g. FEATURE_FOO) and then expands it to an expression that can be used in C code, either 1 or 0.

The advantage of using this is that the compiler sees all the code, so checks can be performed, sections that would not be executed are removed during optimization. For example:

if (IS_ACTIVE(FEATURE_FOO)) {
do_something();
}
Parameters
[in]macroMacro to evaluate
Returns
1 if the macro is defined to 1
0 if the macro is not defined, of if it is defined to something else than 1.
Note
This should only be used when macros are defined as 1, it will not work if the macro value is, for example, (1) or 1U.
Although this may seem to work similarly to the preprocessor's 'defined', it is not entirely equal. If the given macro has been defined with no value, this will expand to 0. Also note that this is intended to be used with 'boolean' macros that act as switches, and usually will be defined as 1 or not defined.

Definition at line 177 of file kernel_defines.h.

◆ IS_USED

#define IS_USED (   module)    IS_ACTIVE(module)

Checks whether a module is being used or not. Can be used in C conditionals.

Parameters
[in]moduleModule to check
Returns
1 if the module is being used
0 if the module is not being used

Definition at line 188 of file kernel_defines.h.

◆ UNREACHABLE

#define UNREACHABLE ( )    do { /* nothing */ } while (1)

Tell the compiler that this line of code cannot be reached.

Most useful in junction with NORETURN. Use this if the compiler cannot tell that e.g. an assembler instruction causes a longjmp, or a write causes a reboot.

Definition at line 112 of file kernel_defines.h.

IS_ACTIVE
#define IS_ACTIVE(macro)
Allows to verify a macro definition outside the preprocessor.
Definition: kernel_defines.h:177