* Gavin Shan:
diff --git a/tools/testing/selftests/kvm/rseq_test.c b/tools/testing/selftests/kvm/rseq_test.c index a54d4d05a058..acb1bf1f06b3 100644 --- a/tools/testing/selftests/kvm/rseq_test.c +++ b/tools/testing/selftests/kvm/rseq_test.c @@ -9,6 +9,7 @@ #include <string.h> #include <signal.h> #include <syscall.h> +#include <dlfcn.h> #include <sys/ioctl.h> #include <sys/sysinfo.h> #include <asm/barrier.h>
I'm surprised that there isn't a Makefile update to link with -ldl (still required for glibc 2.33 and earlier).
@@ -36,6 +37,8 @@ static __thread volatile struct rseq __rseq = { */ #define NR_TASK_MIGRATIONS 100000 +static bool __rseq_ownership; +static volatile struct rseq *__rseq_info; static pthread_t migration_thread; static cpu_set_t possible_mask; static int min_cpu, max_cpu; @@ -49,11 +52,33 @@ static void guest_code(void) GUEST_SYNC(0); } +static void sys_rseq_ownership(void) +{
- long *offset;
- unsigned int *size, *flags;
- offset = dlsym(RTLD_NEXT, "__rseq_offset");
- size = dlsym(RTLD_NEXT, "__rseq_size");
- flags = dlsym(RTLD_NEXT, "__rseq_flags");
- if (offset && size && *size && flags) {
__rseq_ownership = false;
__rseq_info = (struct rseq *)((uintptr_t)__builtin_thread_pointer() +
*offset);
__builtin_thread_pointer doesn't work on all architectures/GCC versions. Is this a problem for selftests?
Thanks, Florian