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/nptl | |
parent | 1d350aa06091211863e41169729cee1bca39f72f (diff) | |
download | glibc-e3e589829d16af9f7e73c7b70f74f3c5d5003e45.tar.gz glibc-e3e589829d16af9f7e73c7b70f74f3c5d5003e45.tar.xz 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/nptl')
-rw-r--r-- | sysdeps/nptl/dl-tls_init_tp.c | 11 | ||||
-rw-r--r-- | sysdeps/nptl/dl-tunables.list | 6 | ||||
-rw-r--r-- | sysdeps/nptl/internaltypes.h | 1 |
3 files changed, 17 insertions, 1 deletions
diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c index fedb876fdb..b39dfbff2c 100644 --- a/sysdeps/nptl/dl-tls_init_tp.c +++ b/sysdeps/nptl/dl-tls_init_tp.c @@ -23,6 +23,9 @@ #include <tls.h> #include <rseq-internal.h> +#define TUNABLE_NAMESPACE pthread +#include <dl-tunables.h> + #ifndef __ASSUME_SET_ROBUST_LIST bool __nptl_set_robust_list_avail; rtld_hidden_data_def (__nptl_set_robust_list_avail) @@ -92,7 +95,13 @@ __tls_init_tp (void) } } - rseq_register_current_thread (pd); + { + bool do_rseq = true; +#if HAVE_TUNABLES + do_rseq = TUNABLE_GET (rseq, int, NULL); +#endif + rseq_register_current_thread (pd, do_rseq); + } /* Set initial thread's stack block from 0 up to __libc_stack_end. It will be bigger than it actually is, but for unwind.c/pt-longjmp.c diff --git a/sysdeps/nptl/dl-tunables.list b/sysdeps/nptl/dl-tunables.list index ac5d053298..d24f4be0d0 100644 --- a/sysdeps/nptl/dl-tunables.list +++ b/sysdeps/nptl/dl-tunables.list @@ -27,5 +27,11 @@ glibc { type: SIZE_T default: 41943040 } + rseq { + type: INT_32 + minval: 0 + maxval: 1 + default: 1 + } } } diff --git a/sysdeps/nptl/internaltypes.h b/sysdeps/nptl/internaltypes.h index 6032a6b785..dec8c5b5ff 100644 --- a/sysdeps/nptl/internaltypes.h +++ b/sysdeps/nptl/internaltypes.h @@ -48,6 +48,7 @@ struct pthread_attr #define ATTR_FLAG_OLDATTR 0x0010 #define ATTR_FLAG_SCHED_SET 0x0020 #define ATTR_FLAG_POLICY_SET 0x0040 +#define ATTR_FLAG_DO_RSEQ 0x0080 /* Used to allocate a pthread_attr_t object which is also accessed internally. */ |