rseq_cs
struct rseq_cs __user *ucs = (struct rseq_cs __user *)(unsigned long)csaddr;
unsafe_put_user(0ULL, &t->rseq.usrptr->rseq_cs, efault);
unsafe_put_user(0ULL, &t->rseq.usrptr->rseq_cs, efault);
struct rseq_cs __user *ucs = (struct rseq_cs __user *)(unsigned long)csaddr;
unsafe_put_user(0ULL, &t->rseq.usrptr->rseq_cs, efault);
unsafe_put_user(0ULL, &t->rseq.usrptr->rseq_cs, efault);
unsafe_get_user(*csaddr, &rseq->rseq_cs, efault);
unsafe_get_user(csaddr, &rseq->rseq_cs, efault);
__u64 rseq_cs;
unsafe_get_user(csaddr, &urseq->rseq_cs, efault);
if (get_user(csaddr, &t->rseq.usrptr->rseq_cs))
unsafe_put_user(0UL, &rseq->rseq_cs, efault);
} rseq_cs;
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
"str r0, %[" __rseq_str(rseq_cs) "]\n\t" \
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
" str " RSEQ_ASM_TMP_REG ", %[" __rseq_str(rseq_cs) "]\n" \
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
LONG_S " $4, %[" __rseq_str(rseq_cs) "]\n\t" \
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
"l.sw %[" __rseq_str(rseq_cs) "], " RSEQ_ASM_TMP_REG_1 "\n" \
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
RSEQ_STORE_INT(rseq_cs) "%%r17, %[" __rseq_str(rseq_cs) "]\n\t" \
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
"std %%r17, %[" __rseq_str(rseq_cs) "]\n\t" \
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
REG_S RSEQ_ASM_TMP_REG_1 ", %[" __rseq_str(rseq_cs) "]\n" \
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
[rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs)
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
LONG_S " %%r0, %[" __rseq_str(rseq_cs) "]\n\t" \
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
"movl $" __rseq_str(cs_label) ", " __rseq_str(rseq_cs) "\n\t" \
#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
"movq %%rax, " __rseq_str(rseq_cs) "\n\t" \
RSEQ_WRITE_ONCE(rseq_get_abi()->rseq_cs.arch.ptr, 0);