X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=common%2Fcommon.h;h=40eb0a2d55b4d255ca1d6708ce678cb5cac19c50;hb=b0194db8ea91d49b9e50319f6e20b8f580e338ed;hp=e2f2b3ba3339f016259013ab99f19bfa86af9215;hpb=0ad0ac6446aa4490800addafd8219f0f2a968c4d;p=apps%2Fpfixtools.git diff --git a/common/common.h b/common/common.h index e2f2b3b..40eb0a2 100644 --- a/common/common.h +++ b/common/common.h @@ -63,11 +63,23 @@ typedef int (*initcall_t)(void); typedef void (*exitcall_t)(void); -#define __init __attribute__((__used__,__section__(".mad.init"))) -#define __exit __attribute__((__used__,__section__(".mad.exit"))) - -#define module_init(fn) static __init initcall_t __init_##fn = fn; -#define module_exit(fn) static __exit exitcall_t __exit_##fn = fn; +void common_register_exit(exitcall_t _exit); +void common_init(void); + +#define module_init(fn) \ + __attribute__((constructor,used)) \ + static void __init_wrapper__ ## fn (void) { \ + common_init(); \ + if (fn() != 0) { \ + exit(-1); \ + } \ + } +#define module_exit(fn) \ + __attribute__((constructor,used)) \ + static void __exit_wrapper ## fn(void) { \ + common_init(); \ + common_register_exit(fn); \ + } #define likely(expr) __builtin_expect((expr) != 0, 1) #define unlikely(expr) __builtin_expect((expr) != 0, 0)