blob: b503cc6a22afdd6e515a177758a4481759f7712d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#ifndef _ddekit_initcall_h
#define _ddekit_initcall_h
// from l4/sys/compiler.h
#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ >= 4
#define L4_STICKY(x) __attribute__((used)) x
#else
#define L4_STICKY(x) __attribute__((unused)) x
#endif
#define l4str(s) #s
// from dde_linux/ARCH-x86/ctor.h
typedef void (*l4ddekit_initcall_t)(void);
#define __l4ddekit_initcall(p) \
__attribute__ ((__section__ (".l4dde_ctors." #p)))
/** Define a function to be a DDEKit initcall.
*
* Define a function to be a DDEKit initcall. This function will then be placed
* in a separate linker section of the binary (called .l4dde_ctors). The L4Env
* construction mechanism will execute all constructors in this section during
* application startup.
*
* This is the right place to place Linux' module_init functions & Co.
*
* \param fn function
*/
#define DDEKIT_INITCALL(fn) DDEKIT_CTOR(fn, 1)
#define DDEKIT_CTOR(fn, prio) \
static l4ddekit_initcall_t \
L4_STICKY(__l4ddekit_initcall_##fn) \
__l4ddekit_initcall(prio) = (void *)fn
/**
* Runs all registered initcalls.
*/
void ddekit_do_initcalls(void);
#endif
|