mirror of git://sourceware.org/git/glibc.git
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:
parent
e47728a77c
commit
99518a3a35
|
|
@ -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); \
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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); \
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in New Issue