From 1ca9be85f6682e355cac8c60916e101a670c3890 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 1 May 2000 20:25:13 +0000 Subject: [PATCH] Added DECL_GLOBAL_CONSTRUCTOR macro. --- dlls/ddraw/dga.c | 11 +---------- dlls/ddraw/dga2.c | 11 +---------- dlls/ddraw/x11.c | 11 +---------- include/winnt.h | 19 +++++++++++++++++++ 4 files changed, 22 insertions(+), 30 deletions(-) diff --git a/dlls/ddraw/dga.c b/dlls/ddraw/dga.c index 0990171b718..c8ce82d3ebc 100644 --- a/dlls/ddraw/dga.c +++ b/dlls/ddraw/dga.c @@ -190,13 +190,4 @@ ddraw_driver dga_driver = { DGA_Create }; -#ifdef __GNUC__ -static void DGA_register(void) __attribute__((constructor)); -#else /* defined(__GNUC__) */ -static void __asm__dummy_dll_init(void) { - asm("\t.section .init ,\"ax\"\n" - "\tcall DGA_register\n" - "\t.previous\n"); -} -#endif /* defined(__GNUC__) */ -static void DGA_register(void) { ddraw_register_driver(&dga_driver); } +DECL_GLOBAL_CONSTRUCTOR(DGA_register) { ddraw_register_driver(&dga_driver); } diff --git a/dlls/ddraw/dga2.c b/dlls/ddraw/dga2.c index 8b9b3c3c130..247cf0e1e38 100644 --- a/dlls/ddraw/dga2.c +++ b/dlls/ddraw/dga2.c @@ -182,13 +182,4 @@ ddraw_driver dga2_driver = { DGA2_Create }; -#ifdef __GNUC__ -static void DGA2_register(void) __attribute__((constructor)); -#else /* defined(__GNUC__) */ -static void __asm__dummy_dll_init(void) { - asm("\t.section .init ,\"ax\"\n" - "\tcall DGA2_register\n" - "\t.previous\n"); -} -#endif /* defined(__GNUC__) */ -static void DGA2_register(void) { ddraw_register_driver(&dga2_driver); } +DECL_GLOBAL_CONSTRUCTOR(DGA2_register) { ddraw_register_driver(&dga2_driver); } diff --git a/dlls/ddraw/x11.c b/dlls/ddraw/x11.c index 29b507ee839..24217c69a9f 100644 --- a/dlls/ddraw/x11.c +++ b/dlls/ddraw/x11.c @@ -105,13 +105,4 @@ ddraw_driver x11_driver = { X11_Create }; -#ifdef __GNUC__ -static void X11_register(void) __attribute__((constructor)); -#else /* defined(__GNUC__) */ -static void __asm__dummy_dll_init(void) { - asm("\t.section .init ,\"ax\"\n" - "\tcall X11_register\n" - "\t.previous\n"); -} -#endif /* defined(__GNUC__) */ -static void X11_register(void) { ddraw_register_driver(&x11_driver); } +DECL_GLOBAL_CONSTRUCTOR(X11_register) { ddraw_register_driver(&x11_driver); } diff --git a/include/winnt.h b/include/winnt.h index dc2877abdab..63b549a1af3 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -762,6 +762,25 @@ typedef HANDLE *PHANDLE; # error You must define GET_IP for this CPU #endif +/* Constructor functions */ + +#ifdef __GNUC__ +# define DECL_GLOBAL_CONSTRUCTOR(func) \ + static void func(void) __attribute__((constructor)); \ + static void func(void) +#else /* __GNUC__ */ +# ifdef __i386__ +# define DECL_GLOBAL_CONSTRUCTOR(func) \ + static void __dummy_init_##func(void) { \ + asm(".section .init,\"ax\"\n\t" \ + "call " #func "\n\t" \ + ".previous"); } \ + static void func(void) +# else /* __i386__ */ +# error You must define the DECL_GLOBAL_CONSTRUCTOR macro for your platform +# endif +#endif /* __GNUC__ */ + #endif /* __WINE__ */ /* -- 2.11.4.GIT