Thread (2 messages) flat view 2 messages, 2 authors, 2020-06-24

Re: [PATCH 1/3] glibc: Perform rseq registration at C startup and thread creation (v21)

From: Florian Weimer <hidden>
Date: 2020-06-24 14:21:06
Also in: lkml

* Mathieu Desnoyers:
quoted hunk
diff --git a/manual/threads.texi b/manual/threads.texi
index bb7a42c655..d5069d5581 100644
--- a/manual/threads.texi
+++ b/manual/threads.texi
+@deftypevar {struct rseq} __rseq_abi
+@standards{Linux, sys/rseq.h}
+@Theglibc{} implements a @code{__rseq_abi} TLS symbol to interact with
+the Restartable Sequences system call.  The layout of this structure is
+defined by the @file{sys/rseq.h} header.  Registration of each thread's
+@code{__rseq_abi} is performed by @theglibc{} at library initialization
+and thread creation. The manual for the rseq system call can be found
+at @uref{https://git.kernel.org/pub/scm/libs/librseq/librseq.git/tree/doc/man/rseq.2}.
Should be “creation.  The” (two spaces after a sentence-ending period).
quoted hunk
diff --git a/sysdeps/unix/sysv/linux/sys/rseq.h b/sysdeps/unix/sysv/linux/sys/rseq.h
new file mode 100644
index 0000000000..5e118c1781
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sys/rseq.h
+#ifdef __cplusplus
+# if  __cplusplus >= 201103L
+#  define __rseq_static_assert(expr, diagnostic) static_assert (expr, diagnostic)
+#  define __rseq_alignof(type)                   alignof (type)
+#  define __rseq_tls_storage_class               thread_local
+# endif
+#elif (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) >= 201112L
+# define __rseq_static_assert(expr, diagnostic)  _Static_assert (expr, diagnostic)
+# define __rseq_alignof(type)                    _Alignof (type)
+# define __rseq_tls_storage_class                _Thread_local
+#endif
+
+#ifndef __rseq_static_assert
+/* Try to use _Static_assert macro from sys/cdefs.h.  */
+# ifdef _Static_assert
+#  define __rseq_static_assert(expr, diagnostic) _Static_assert (expr, diagnostic)
+# else
+#  define __rseq_static_assert(expr, diagnostic) /* Nothing.  */
+# endif
+#endif
+
+/* Rely on GNU extensions for older standards and tls model.  */
+#ifdef __GNUC__
+# ifndef __rseq_alignof
+#  define __rseq_alignof(x) __alignof__ (x)
+# endif
+# define __rseq_tls_model_ie __attribute__ ((__tls_model__ ("initial-exec")))
+#else
+/* Specifying the TLS model on the declaration is optional.  */
+# define __rseq_tls_model_ie /* Nothing.  */
+#endif
I'm still worried that __rseq_static_assert and __rseq_alignof will show
up in the UAPI with textually different definitions.  (This does not
apply to __rseq_tls_model_ie.)

Is my worry unfounded?

Thanks,
Florian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help