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/rseq-internal.h | |
parent | e3e589829d16af9f7e73c7b70f74f3c5d5003e45 (diff) | |
download | glibc-c901c3e764d7c7079f006b4e21e877d5036eb4f5.tar.gz glibc-c901c3e764d7c7079f006b4e21e877d5036eb4f5.tar.xz glibc-c901c3e764d7c7079f006b4e21e877d5036eb4f5.zip |
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/rseq-internal.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/rseq-internal.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h index 15bc7ffd6e..9e8f99fd51 100644 --- a/sysdeps/unix/sysv/linux/rseq-internal.h +++ b/sysdeps/unix/sysv/linux/rseq-internal.h @@ -26,7 +26,7 @@ #include <sys/rseq.h> #ifdef RSEQ_SIG -static inline void +static inline bool rseq_register_current_thread (struct pthread *self, bool do_rseq) { if (do_rseq) @@ -35,15 +35,17 @@ rseq_register_current_thread (struct pthread *self, bool do_rseq) sizeof (self->rseq_area), 0, RSEQ_SIG); if (!INTERNAL_SYSCALL_ERROR_P (ret)) - return; + return true; } THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_REGISTRATION_FAILED); + return false; } #else /* RSEQ_SIG */ -static inline void +static inline bool rseq_register_current_thread (struct pthread *self, bool do_rseq) { THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_REGISTRATION_FAILED); + return false; } #endif /* RSEQ_SIG */ |