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 | e3e589829d16af9f7e73c7b70f74f3c5d5003e45 (patch) | |
tree | f52c82410e4faed193d05dcf28c2586d6f83de16 /sysdeps/unix/sysv/linux/rseq-internal.h | |
parent | 1d350aa06091211863e41169729cee1bca39f72f (diff) | |
download | glibc-e3e589829d16af9f7e73c7b70f74f3c5d5003e45.tar glibc-e3e589829d16af9f7e73c7b70f74f3c5d5003e45.tar.gz glibc-e3e589829d16af9f7e73c7b70f74f3c5d5003e45.tar.bz2 glibc-e3e589829d16af9f7e73c7b70f74f3c5d5003e45.zip |
nptl: Add glibc.pthread.rseq tunable to control rseq registration
This tunable allows applications to register the rseq area instead
of glibc.
Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Diffstat (limited to 'sysdeps/unix/sysv/linux/rseq-internal.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/rseq-internal.h | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h index 909f547825..15bc7ffd6e 100644 --- a/sysdeps/unix/sysv/linux/rseq-internal.h +++ b/sysdeps/unix/sysv/linux/rseq-internal.h @@ -21,22 +21,27 @@ #include <sysdep.h> #include <errno.h> #include <kernel-features.h> +#include <stdbool.h> #include <stdio.h> #include <sys/rseq.h> #ifdef RSEQ_SIG static inline void -rseq_register_current_thread (struct pthread *self) +rseq_register_current_thread (struct pthread *self, bool do_rseq) { - int ret = INTERNAL_SYSCALL_CALL (rseq, - &self->rseq_area, sizeof (self->rseq_area), - 0, RSEQ_SIG); - if (INTERNAL_SYSCALL_ERROR_P (ret)) - THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_REGISTRATION_FAILED); + if (do_rseq) + { + int ret = INTERNAL_SYSCALL_CALL (rseq, &self->rseq_area, + sizeof (self->rseq_area), + 0, RSEQ_SIG); + if (!INTERNAL_SYSCALL_ERROR_P (ret)) + return; + } + THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_REGISTRATION_FAILED); } #else /* RSEQ_SIG */ static inline void -rseq_register_current_thread (struct pthread *self) +rseq_register_current_thread (struct pthread *self, bool do_rseq) { THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_REGISTRATION_FAILED); } |