The branch, master has been updated via e0af87f socket_wrapper.c/tests: fall back to pragma init/fini for constructor/destructor if possible via 83a4c3c configure: check for pragma init/fini for constructors/destructors from 3b6e207 Bump version to 1.2.5
https://git.samba.org/?p=socket_wrapper.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit e0af87fff246887aacab8c94c3cf4dca2a28a94c Author: Björn Jacke <bja...@samba.org> Date: Fri Oct 30 15:44:53 2020 +0100 socket_wrapper.c/tests: fall back to pragma init/fini for constructor/destructor if possible Signed-off-by: Bjoern Jacke <bja...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 83a4c3c3c53c6ab171ee786ba7c9f509d73f36fd Author: Björn Jacke <bja...@samba.org> Date: Fri Oct 30 15:31:42 2020 +0100 configure: check for pragma init/fini for constructors/destructors Signed-off-by: Bjoern Jacke <bja...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> ----------------------------------------------------------------------- Summary of changes: ConfigureChecks.cmake | 26 ++++++++++++++++++++++++++ config.h.cmake | 2 ++ src/socket_wrapper.c | 7 +++++++ tests/thread_deadlock.c | 5 ++++- 4 files changed, 39 insertions(+), 1 deletion(-) Changeset truncated at 500 lines: diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index 4a2f55e..3c8e615 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -216,6 +216,32 @@ int main(void) { return 0; }" HAVE_DESTRUCTOR_ATTRIBUTE) +check_c_source_compiles(" +#pragma init (test_constructor) +void test_constructor(void); + +void test_constructor(void) +{ + return; +} + +int main(void) { + return 0; +}" HAVE_PRAGMA_INIT) + +check_c_source_compiles(" +#pragma fini (test_destructor) +void test_destructor(void); + +void test_destructor(void) +{ + return; +} + +int main(void) { + return 0; +}" HAVE_PRAGMA_FINI) + check_c_source_compiles(" #define FALL_THROUGH __attribute__((fallthrough)) diff --git a/config.h.cmake b/config.h.cmake index d3ceb23..38166d2 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -66,6 +66,8 @@ #cmakedefine HAVE_GCC_THREAD_LOCAL_STORAGE 1 #cmakedefine HAVE_CONSTRUCTOR_ATTRIBUTE 1 #cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1 +#cmakedefine HAVE_PRAGMA_INIT 1 +#cmakedefine HAVE_PRAGMA_FINI 1 #cmakedefine HAVE_FALLTHROUGH_ATTRIBUTE 1 #cmakedefine HAVE_ADDRESS_SANITIZER_ATTRIBUTE 1 #cmakedefine HAVE_SOCKADDR_STORAGE 1 diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index ffdd31a..35d61b5 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -334,7 +334,14 @@ static pthread_mutex_t mtu_update_mutex; bool socket_wrapper_enabled(void); +#if ! defined(HAVE_CONSTRUCTOR_ATTRIBUTE) && defined(HAVE_PRAGMA_INIT) +/* xlC and other oldschool compilers support (only) this */ +#pragma init (swrap_constructor) +#endif void swrap_constructor(void) CONSTRUCTOR_ATTRIBUTE; +#if ! defined(HAVE_DESTRUCTOR_ATTRIBUTE) && defined(HAVE_PRAGMA_FINI) +#pragma fini (swrap_destructor) +#endif void swrap_destructor(void) DESTRUCTOR_ATTRIBUTE; #ifndef HAVE_GETPROGNAME diff --git a/tests/thread_deadlock.c b/tests/thread_deadlock.c index b72367f..6c58af3 100644 --- a/tests/thread_deadlock.c +++ b/tests/thread_deadlock.c @@ -43,7 +43,10 @@ #else #define CONSTRUCTOR_ATTRIBUTE #endif /* HAVE_CONSTRUCTOR_ATTRIBUTE */ - +#if ! defined(HAVE_CONSTRUCTOR_ATTRIBUTE) && defined(HAVE_PRAGMA_INIT) +/* xlC and other oldschool compilers support (only) this */ +#pragma init (thread_deadlock_constructor) +#endif void thread_deadlock_constructor(void) CONSTRUCTOR_ATTRIBUTE; static void thread_deadlock_prepare(void) -- Socket Wrapper Repository