summaryrefslogtreecommitdiff
path: root/testsuite/init_module.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/init_module.c')
-rw-r--r--testsuite/init_module.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/testsuite/init_module.c b/testsuite/init_module.c
index 199186b..503e703 100644
--- a/testsuite/init_module.c
+++ b/testsuite/init_module.c
@@ -355,6 +355,27 @@ TS_EXPORT long int syscall(long int __sysno, ...)
return ret;
}
+ if (__sysno == __NR_gettid) {
+ static void *nextlib = NULL;
+ static long (*nextlib_syscall)(long number, ...);
+
+ if (nextlib_syscall == NULL) {
+#ifdef RTLD_NEXT
+ nextlib = RTLD_NEXT;
+#else
+ nextlib = dlopen("libc.so.6", RTLD_LAZY);
+#endif
+ nextlib_syscall = dlsym(nextlib, "syscall");
+ if (nextlib_syscall == NULL) {
+ fprintf(stderr, "FIXME FIXME FIXME: could not load syscall symbol: %s\n",
+ dlerror());
+ abort();
+ }
+ }
+
+ return nextlib_syscall(__NR_gettid);
+ }
+
/*
* FIXME: no way to call the libc function due since this is a
* variadic argument function and we don't have a vsyscall() variant