mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice-common
synced 2025-12-31 11:29:39 +00:00
define SPICE_CONSTRUCTOR_FUNC and SPICE_DESTRUCTOR_FUNC macros
Allow to define functions executed at program/shared object initialization or close. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Victor Toso <victortoso@redhat.com>
This commit is contained in:
parent
0f45924f4c
commit
2505f9ac96
@ -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 */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user