]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
x86: Simplify RSEQ area access expressions
authorUros Bizjak <ubizjak@gmail.com>
Thu, 25 Sep 2025 08:08:11 +0000 (10:08 +0200)
committerUros Bizjak <ubizjak@gmail.com>
Wed, 8 Oct 2025 07:35:15 +0000 (09:35 +0200)
Replace manual cast with a direct
`(struct rseq_area __seg_gs *)__rseq_offset` dereference to access
`member`.  This avoids redundant `offsetof(struct rseq_area, member)`
and improves readability while preserving semantics.

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
sysdeps/i386/nptl/rseq-access.h
sysdeps/x86_64/64/nptl/rseq-access.h

index ee78c6198d5acc18249807d21be6efda934c3508..753152cb585463ac855fc9faa99c3e1a32093e27 100644 (file)
@@ -23,8 +23,7 @@
                     || sizeof (RSEQ_SELF()->member) == 4                     \
                     || sizeof (RSEQ_SELF()->member) == 8,                    \
                     "size of rseq data");                                    \
-     (*(__typeof (RSEQ_SELF()->member) __seg_gs *)                           \
-      (__rseq_offset + offsetof (struct rseq_area, member)));                \
+     ((struct rseq_area __seg_gs *)__rseq_offset)->member;                   \
   })
 
 /* Read member of the RSEQ area directly, with single-copy atomicity semantics.
@@ -35,8 +34,7 @@
      _Static_assert (sizeof (RSEQ_SELF()->member) == 1                       \
                     || sizeof (RSEQ_SELF()->member) == 4,                    \
                     "size of rseq data");                                    \
-     (*(volatile __typeof (RSEQ_SELF()->member) __seg_gs *)                  \
-      (__rseq_offset + offsetof (struct rseq_area, member)));                \
+     ((volatile struct rseq_area __seg_gs *)__rseq_offset)->member;          \
   })
 
 /* Set member of the RSEQ area directly.  */
@@ -46,8 +44,7 @@
                     || sizeof (RSEQ_SELF()->member) == 4                     \
                     || sizeof (RSEQ_SELF()->member) == 8,                    \
                     "size of rseq data");                                    \
-     (*(__typeof (RSEQ_SELF()->member) __seg_gs *)                           \
-      (__rseq_offset + offsetof (struct rseq_area, member)) = (value));              \
+     ((struct rseq_area __seg_gs *)__rseq_offset)->member = (value);         \
   })
 
 /* Set member of the RSEQ area directly, with single-copy atomicity semantics.
@@ -58,6 +55,5 @@
      _Static_assert (sizeof (RSEQ_SELF()->member) == 1                       \
                     || sizeof (RSEQ_SELF()->member) == 4,                    \
                     "size of rseq data");                                    \
-     (*(volatile __typeof (RSEQ_SELF()->member) __seg_gs *)                  \
-      (__rseq_offset + offsetof (struct rseq_area, member)) = (value));              \
+     ((volatile struct rseq_area __seg_gs *)__rseq_offset)->member = (value); \
   })
index 214cb9679713fd293b91ef8134003e4c9e87c995..64e5b8d712f5e6782e51ca84962ef8df675eade6 100644 (file)
@@ -23,8 +23,7 @@
                     || sizeof (RSEQ_SELF()->member) == 4                     \
                     || sizeof (RSEQ_SELF()->member) == 8,                    \
                     "size of rseq data");                                    \
-     (*(__typeof (RSEQ_SELF()->member) __seg_fs *)                           \
-      (__rseq_offset + offsetof (struct rseq_area, member)));                \
+     ((struct rseq_area __seg_fs *)__rseq_offset)->member;                   \
   })
 
 /* Read member of the RSEQ area directly, with single-copy atomicity semantics.  */
@@ -34,8 +33,7 @@
                     || sizeof (RSEQ_SELF()->member) == 4                     \
                     || sizeof (RSEQ_SELF()->member) == 8,                    \
                     "size of rseq data");                                    \
-     (*(volatile __typeof (RSEQ_SELF()->member) __seg_fs *)                  \
-      (__rseq_offset + offsetof (struct rseq_area, member)));                \
+     ((volatile struct rseq_area __seg_fs *)__rseq_offset)->member;          \
   })
 
 /* Set member of the RSEQ area directly.  */
@@ -45,8 +43,7 @@
                     || sizeof (RSEQ_SELF()->member) == 4                     \
                     || sizeof (RSEQ_SELF()->member) == 8,                    \
                     "size of rseq data");                                    \
-     (*(__typeof (RSEQ_SELF()->member) __seg_fs *)                           \
-      (__rseq_offset + offsetof (struct rseq_area, member)) = (value));              \
+     ((struct rseq_area __seg_fs *)__rseq_offset)->member = (value);         \
   })
 
 /* Set member of the RSEQ area directly, with single-copy atomicity semantics.  */
@@ -56,6 +53,5 @@
                     || sizeof (RSEQ_SELF()->member) == 4                     \
                     || sizeof (RSEQ_SELF()->member) == 8,                    \
                     "size of rseq data");                                    \
-     (*(volatile __typeof (RSEQ_SELF()->member) __seg_fs *)                  \
-      (__rseq_offset + offsetof (struct rseq_area, member)) = (value));              \
+     ((volatile struct rseq_area __seg_fs *)__rseq_offset)->member = (value); \
   })