Re: [PATCH v2] testsuite: also wrap gettid in syscall()
From: Lucas De Marchi <hidden>
Date: 2018-01-08 21:55:39
On Mon, Jan 8, 2018 at 1:31 PM, Caio Marcelo de Oliveira Filho [off-list ref] wrote:
+1 On Mon, Jan 08, 2018 at 01:28:29PM -0800, Lucas De Marchi wrote:quoted
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). --- v2: - Check nextlib_syscall rather than nextlib to avoid races in multithreaded programs - Add error message in case we fail to get symbol testsuite/init_module.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)diff --git a/testsuite/init_module.c b/testsuite/init_module.c index 199186b..c70147e 100644 --- a/testsuite/init_module.c +++ b/testsuite/init_module.c@@ -355,6 +355,26 @@ 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: libc is missing syscall symbol\n");
I added a call to dlerror() here and applied. thanks for reviewing. Lucas De Marchi