From: Helmut Schaa Date: Fri, 13 Dec 2013 13:05:00 +0000 (+0100) Subject: compiler: Add OVS_CONSTRUCTOR to mark functions as init functions X-Git-Tag: sliver-openvswitch-2.1.90-1~10^2~184 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=6164839f3ee00436b32af3100c903ee152803117;p=sliver-openvswitch.git compiler: Add OVS_CONSTRUCTOR to mark functions as init functions Functions marked with OVS_CONSTRUCTOR are called unconditionally before main. Tested with GCC. Untested with MSVC. Signed-off-by: Helmut Schaa Signed-off-by: Ben Pfaff --- diff --git a/lib/compiler.h b/lib/compiler.h index 0dbacbfcc..daca32dd7 100644 --- a/lib/compiler.h +++ b/lib/compiler.h @@ -179,4 +179,17 @@ #define OVS_PACKED(DECL) __pragma(pack(push, 1)) DECL __pragma(pack(pop)) #endif +#ifdef _MSC_VER +#define CCALL __cdecl +#pragma section(".CRT$XCU",read) +#define OVS_CONSTRUCTOR(f) \ + static void __cdecl f(void); \ + __declspec(allocate(".CRT$XCU")) void (__cdecl*f##_)(void) = f; \ + static void __cdecl f(void) +#else +#define OVS_CONSTRUCTOR(f) \ + static void f(void) __attribute__((constructor)); \ + static void f(void) +#endif + #endif /* compiler.h */