diff options
author | Zheng Da <zhengda1936@gmail.com> | 2010-01-19 11:21:27 +0100 |
---|---|---|
committer | Zheng Da <zhengda1936@gmail.com> | 2010-01-19 11:21:27 +0100 |
commit | 76ab4925b163ee5bf6594c79be063662e2157d00 (patch) | |
tree | 9d46a9885a9925df46bace7ee65d0c6b31169170 /libddekit/include | |
parent | 2680eecc499e43679be098e5834d4f3a62f59a0c (diff) |
Add initcall in ddekit.
Diffstat (limited to 'libddekit/include')
-rw-r--r-- | libddekit/include/ddekit/initcall.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/libddekit/include/ddekit/initcall.h b/libddekit/include/ddekit/initcall.h new file mode 100644 index 00000000..b503cc6a --- /dev/null +++ b/libddekit/include/ddekit/initcall.h @@ -0,0 +1,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 |