aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac19
-rw-r--r--src/debug.c11
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)
{