Re: [PATCH bpf-next v2 8/9] selftests/bpf: Add selftests for load-acquire and store-release instructions
From: Peilin Ye
Date: Fri Feb 07 2025 - 18:48:08 EST
On Fri, Feb 07, 2025 at 02:06:29AM +0000, Peilin Ye wrote:
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/progs/verifier_load_acquire.c
> @@ -0,0 +1,190 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +#include <linux/bpf.h>
> +#include <bpf/bpf_helpers.h>
> +#include "../../../include/linux/filter.h"
> +#include "bpf_misc.h"
> +
> +#if defined(ENABLE_ATOMICS_TESTS) && defined(__TARGET_ARCH_arm64)
> +
> +SEC("socket")
> +__description("load-acquire, 8-bit")
> +__success __success_unpriv __retval(0x12)
> +__naked void load_acquire_8(void)
> +{
> + asm volatile (
> + "*(u8 *)(r10 - 1) = 0x12;"
~~~~
I realized that I am using STORE_imm<> instructions in load-acquire
tests, and llvm-17 -mcpu=v3 cannot build them.
Can be fixed by simply doing e.g. the following instead:
"r1 = 0x12;"
"*(u8 *)(r10 - 1) = r1;"
> + ".8byte %[load_acquire_insn];" // w0 = load_acquire((u8 *)(r10 - 1));
> + "exit;"
> + :
> + : __imm_insn(load_acquire_insn,
> + BPF_ATOMIC_OP(BPF_B, BPF_LOAD_ACQ, BPF_REG_0, BPF_REG_10, -1))
> + : __clobber_all);
> +}
Thanks,
Peilin Ye