[PATCH 1/2] define SPICE_CONSTRUCTOR_FUNC and SPICE_DESTRUCTOR_FUNC macros

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Allow to define functions executed at program/shared object initialization
or close.

Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
---
 common/macros.h | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/common/macros.h b/common/macros.h
index 47289be..fe36929 100644
--- a/common/macros.h
+++ b/common/macros.h
@@ -29,5 +29,27 @@
 #define SPICE_ATTR_PRINTF
 #endif /* __GNUC__ */
 
+#ifdef __GNUC__
+#define SPICE_CONSTRUCTOR_FUNC(func_name) \
+    static void __attribute__((constructor)) func_name(void)
+#define SPICE_DESTRUCTOR_FUNC(func_name) \
+    static void __attribute__((destructor)) func_name(void)
+#elif defined(_MSC_VER)
+#define SPICE_CONSTRUCTOR_FUNC(func_name) \
+    static void func_name(void); \
+    static int func_name ## _wrapper(void) { func_name(); return 0; } \
+    __pragma(section(".CRT$XCU",read)) \
+    __declspec(allocate(".CRT$XCU")) static int (* _array ## func_name)(void) = func_name ## _wrapper; \
+    static void func_name(void)
+#define SPICE_DESTRUCTOR_FUNC(func_name) \
+    static void func_name(void); \
+    static int func_name ## _wrapper(void) { func_name(); return 0; } \
+    __pragma(section(".CRT$XPU",read)) \
+    __declspec(allocate(".CRT$XPU")) static int (* _array ## func_name)(void) = func_name ## _wrapper; \
+    static void func_name(void)
+#else
+#error Please implement SPICE_CONSTRUCTOR_FUNC and SPICE_DESTRUCTOR_FUNC for this compiler
+#endif
+
 
 #endif /* __MACROS_H */
-- 
2.5.0

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]