diff options
author | Florian Weimer <fweimer@redhat.com> | 2021-12-09 09:49:32 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2021-12-09 09:49:32 +0100 |
commit | c901c3e764d7c7079f006b4e21e877d5036eb4f5 (patch) | |
tree | ed5a2defd04179a354f4581b0b94b50b6634751e /sysdeps/unix/sysv/linux/tst-rseq-disable.c | |
parent | e3e589829d16af9f7e73c7b70f74f3c5d5003e45 (diff) | |
download | glibc-c901c3e764d7c7079f006b4e21e877d5036eb4f5.zip glibc-c901c3e764d7c7079f006b4e21e877d5036eb4f5.tar.gz glibc-c901c3e764d7c7079f006b4e21e877d5036eb4f5.tar.bz2 |
nptl: Add public rseq symbols and <sys/rseq.h>
The relationship between the thread pointer and the rseq area
is made explicit. The constant offset can be used by JIT compilers
to optimize rseq access (e.g., for really fast sched_getcpu).
Extensibility is provided through __rseq_size and __rseq_flags.
(In the future, the kernel could request a different rseq size
via the auxiliary vector.)
Co-Authored-By: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
Diffstat (limited to 'sysdeps/unix/sysv/linux/tst-rseq-disable.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/tst-rseq-disable.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/tst-rseq-disable.c b/sysdeps/unix/sysv/linux/tst-rseq-disable.c index 000e351..6d73f77 100644 --- a/sysdeps/unix/sysv/linux/tst-rseq-disable.c +++ b/sysdeps/unix/sysv/linux/tst-rseq-disable.c @@ -21,6 +21,7 @@ #include <support/namespace.h> #include <support/xthread.h> #include <sysdep.h> +#include <thread_pointer.h> #include <unistd.h> #ifdef RSEQ_SIG @@ -30,6 +31,11 @@ static void check_rseq_disabled (void) { struct pthread *pd = THREAD_SELF; + + TEST_COMPARE (__rseq_flags, 0); + TEST_VERIFY ((char *) __thread_pointer () + __rseq_offset + == (char *) &pd->rseq_area); + TEST_COMPARE (__rseq_size, 0); TEST_COMPARE ((int) pd->rseq_area.cpu_id, RSEQ_CPU_ID_REGISTRATION_FAILED); int ret = syscall (__NR_rseq, &pd->rseq_area, sizeof (pd->rseq_area), |