diff options
author | Werner Koch <[email protected]> | 2024-12-04 14:32:40 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-12-04 14:33:02 +0000 |
commit | 4a62318422ca3f0f72b6fd00031daba556a10687 (patch) | |
tree | c323b2fbe60f15cbf141be0e54978a42c79a8b88 | |
parent | cpp: Add Kyber algorithm (diff) | |
download | gpgme-4a62318422ca3f0f72b6fd00031daba556a10687.tar.gz gpgme-4a62318422ca3f0f72b6fd00031daba556a10687.zip |
Add a configure test for gettid.
* configure.ac (HAVE_GETTID,HAVE_SYS_GETTID): New test.
* src/debug.c: Include syscall.h if needed.
(tid_log_callback) [HAVE_SYS_GETTID]: Use SYS_gettid
--
Linux introduced the gettid syscall with 2.4.11 but glibc only with
its version 2.30. This patch allows building on older platforms.
Co-authored-by: lgh1
-rw-r--r-- | configure.ac | 19 | ||||
-rw-r--r-- | src/debug.c | 11 |
2 files changed, 28 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index 7eef3523..d8d7dc42 100644 --- a/configure.ac +++ b/configure.ac @@ -919,6 +919,25 @@ fi # Check for getgid etc AC_CHECK_FUNCS(getgid getegid closefrom nanosleep) +# Check for gettid - test taken from strongswan git +AC_CHECK_FUNC(gettid, + [AC_DEFINE(HAVE_GETTID, 1, [Defined if gettid is available.])], + [AC_MSG_CHECKING([for SYS_gettid]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#define _GNU_SOURCE + #include <unistd.h> + #include <sys/syscall.h> + ]], + [[int main() { + return syscall(SYS_gettid);}]])], + [AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_SYS_GETTID,1, + [Defined is the system call gettid is available])], + [AC_MSG_RESULT([no])] + )] +) + # Replacement functions. AC_REPLACE_FUNCS(stpcpy) diff --git a/src/debug.c b/src/debug.c index 2a87305b..370f613c 100644 --- a/src/debug.c +++ b/src/debug.c @@ -29,6 +29,9 @@ #ifdef HAVE_UNISTD_H # include <unistd.h> #endif +#if defined(__linux) && defined(HAVE_SYS_GETTID) +# include <syscall.h> +#endif #include <ctype.h> #include <errno.h> #include <time.h> @@ -147,12 +150,16 @@ static int tid_log_callback (unsigned long *rvalue) { int len = sizeof (*rvalue); - uintptr_t thread; + uintptr_t thread = 0; #ifdef HAVE_W32_SYSTEM thread = (uintptr_t)GetCurrentThreadId (); #elif defined(__linux) - thread = (uintptr_t)gettid (); +# ifdef HAVE_GETTID + thread = (uintptr_t)gettid (); +# elif defined(HAVE_SYS_GETTID) + thread = (uintptr_t)syscall(SYS_gettid); +# endif #endif if (sizeof (thread) < len) { |