x86: Simplify RSEQ area access expressions

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>
This commit is contained in:
Uros Bizjak 2025-09-25 10:08:11 +02:00
parent e47728a77c
commit 99518a3a35
2 changed files with 8 additions and 16 deletions

View 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); \
})

View 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); \
})