From: Lucas De Marchi Date: Mon, 8 Jan 2018 16:22:29 +0000 (-0800) Subject: testsuite: also wrap gettid in syscall() X-Git-Tag: v25~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7acc5daeecd033477737e780782aed475de72961;p=thirdparty%2Fkmod.git testsuite: also wrap gettid in syscall() Not a perfect solution for overriding syscall(), but at least it makes the testsuite to pass in a modified nsswitch.conf (one that has a module which calls syscall() to get the thread id). --- diff --git a/testsuite/init_module.c b/testsuite/init_module.c index 199186b8..503e703a 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