diff mbox series

[v2,3/8] nptl: Introduce THREAD_GETMEM_VOLATILE

Message ID 42d7ef3c93f5c7959529c52c620e1e273cd69e83.1638880889.git.fweimer@redhat.com
State New
Headers show
Series Extensible rseq integration | expand

Commit Message

Florian Weimer Dec. 7, 2021, 1 p.m. UTC
This will be needed for rseq TCB access.
---
v2: New patch.

 sysdeps/i386/nptl/tcb-access.h   | 2 ++
 sysdeps/nptl/tcb-access.h        | 2 ++
 sysdeps/x86_64/nptl/tcb-access.h | 2 ++
 3 files changed, 6 insertions(+)

Comments

Szabolcs Nagy Dec. 8, 2021, 11:23 a.m. UTC | #1
The 12/07/2021 14:00, Florian Weimer via Libc-alpha wrote:
> This will be needed for rseq TCB access.

I think volatile access is the right thing to do.
(we could change the type of cpu_id to be volatile but
then accesses outside of rseq registration would be
unnecessarily volatile)

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
diff mbox series

Patch

diff --git a/sysdeps/i386/nptl/tcb-access.h b/sysdeps/i386/nptl/tcb-access.h
index 6c6d561e39..5ddd83224b 100644
--- a/sysdeps/i386/nptl/tcb-access.h
+++ b/sysdeps/i386/nptl/tcb-access.h
@@ -41,6 +41,8 @@ 
        }								      \
      __value; })
 
+/* THREAD_GETMEM already forces a read.  */
+#define THREAD_GETMEM_VOLATILE(descr, member) THREAD_GETMEM (descr, member)
 
 /* Same as THREAD_GETMEM, but the member offset can be non-constant.  */
 #define THREAD_GETMEM_NC(descr, member, idx) \
diff --git a/sysdeps/nptl/tcb-access.h b/sysdeps/nptl/tcb-access.h
index b4137b8ab8..bbe20b7225 100644
--- a/sysdeps/nptl/tcb-access.h
+++ b/sysdeps/nptl/tcb-access.h
@@ -22,6 +22,8 @@ 
 
 #define THREAD_GETMEM(descr, member) \
   descr->member
+#define THREAD_GETMEM_VOLATILE(descr, member) \
+  (*(volatile __typeof (descr->member) *)&descr->member)
 #define THREAD_GETMEM_NC(descr, member, idx) \
   descr->member[idx]
 #define THREAD_SETMEM(descr, member, value) \
diff --git a/sysdeps/x86_64/nptl/tcb-access.h b/sysdeps/x86_64/nptl/tcb-access.h
index 18848a729d..e4d2d07a9b 100644
--- a/sysdeps/x86_64/nptl/tcb-access.h
+++ b/sysdeps/x86_64/nptl/tcb-access.h
@@ -39,6 +39,8 @@ 
        }								      \
      __value; })
 
+/* THREAD_GETMEM already forces a read.  */
+#define THREAD_GETMEM_VOLATILE(descr, member) THREAD_GETMEM (descr, member)
 
 /* Same as THREAD_GETMEM, but the member offset can be non-constant.  */
 # define THREAD_GETMEM_NC(descr, member, idx) \