mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Vineet Gupta <vineet.gupta@linux.dev>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
	eddyz87@gmail.com, memxor@gmail.com, martin.lau@linux.dev,
	song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org,
	emil@etsalapatis.com, ihor.solodrai@linux.dev,
	john.fastabend@gmail.com, shuah@kernel.org,
	linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
	jose.marchesi@oracle.com, david.faust@oss.qualcomm.com,
	Vineet Gupta <vineet.gupta@linux.dev>
Subject: [PATCH bpf-next v4 4/8] selftests/bpf: spell the addr_space_cast address spaces in decimal
Date: Tue,  3 Nov 2026 10:18:12 -0800	[thread overview]
Message-ID: <20261103181816.254686-5-vineet.gupta@linux.dev> (raw)
In-Reply-To: <20261103181816.254686-1-vineet.gupta@linux.dev>

The inline asm in the arena tests writes the two address spaces of
addr_space_cast() in hex which trips up a GNU assembler bug:

  progs/jit_insns_arena.c:49: Error: unrecognized instruction `r7 =addr_space_cast(r7,0x0,0x1)'
  progs/jit_insns_arena.c:49: Error: expected ',', got 'x'

This has been fixed and landed binutils commit 835aee81fa93 ("bpf: accept
any spelling of the addr_space_cast address spaces"), but will only land
in the 2.47 release, so add the workarounds for now.
A GCC that defines __BPF_FEATURE_ADDR_SPACE_CAST would be paired with
a capable binutils.

No functional change.

Signed-off-by: Vineet Gupta <vineet.gupta@linux.dev>
---
v3 -> v4: new patch.

 .../selftests/bpf/progs/arena_atomics.c       | 32 +++++++++----------
 .../selftests/bpf/progs/jit_insns_arena.c     |  8 ++---
 .../selftests/bpf/progs/verifier_arena.c      | 16 +++++-----
 .../selftests/bpf/progs/verifier_hmul_arena.c |  4 +--
 .../selftests/bpf/progs/verifier_ldsx.c       | 10 +++---
 5 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/tools/testing/selftests/bpf/progs/arena_atomics.c b/tools/testing/selftests/bpf/progs/arena_atomics.c
index ce76a73d197b..2a9664f54399 100644
--- a/tools/testing/selftests/bpf/progs/arena_atomics.c
+++ b/tools/testing/selftests/bpf/progs/arena_atomics.c
@@ -227,11 +227,11 @@ int fetch_r0(const void *ctx)
 #if defined(ENABLE_ATOMICS_TESTS) && defined(__BPF_FEATURE_ADDR_SPACE_CAST)
 	asm volatile (
 	"r1 = %[fetch_src_r0_value] ll;"
-	"r1 = addr_space_cast(r1, 0x0, 0x1);"
+	"r1 = addr_space_cast(r1, 0, 1);"
 	"r0 = 0x1100000011 ll;"
 	".8byte %[fetch_src_r0_insn];"
 	"r2 = %[fetch_src_r0_result] ll;"
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"
+	"r2 = addr_space_cast(r2, 0, 1);"
 	"*(u64 *)(r2 + 0) = r0;"
 	:
 	: __imm_addr(fetch_src_r0_value),
@@ -242,16 +242,16 @@ int fetch_r0(const void *ctx)
 
 	asm volatile (
 	"r0 = %[fetch_dst_r0_value] ll;"
-	"r0 = addr_space_cast(r0, 0x0, 0x1);"
+	"r0 = addr_space_cast(r0, 0, 1);"
 	"r1 = 0x1100000011 ll;"
 	".8byte %[fetch_dst_r0_insn];"
 	"r2 = %[fetch_dst_r0_result] ll;"
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"
+	"r2 = addr_space_cast(r2, 0, 1);"
 	"*(u64 *)(r2 + 0) = r1;"
 	/* r0 is only read by the atomic, so it must still be the pointer. */
 	"r3 = *(u64 *)(r0 + 0);"
 	"r2 = %[fetch_dst_r0_readback] ll;"
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"
+	"r2 = addr_space_cast(r2, 0, 1);"
 	"*(u64 *)(r2 + 0) = r3;"
 	:
 	: __imm_addr(fetch_dst_r0_value),
@@ -363,17 +363,17 @@ int uaf(const void *ctx)
 	asm volatile (
 	"r0 = %[page];"
 	"r0 += 4096;"
-	"r0 = addr_space_cast(r0, 0x0, 0x1);"
+	"r0 = addr_space_cast(r0, 0, 1);"
 	"r1 = 1;"
 	"r2 = %[uaf_r0_before_dst_r0] ll;"
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"
+	"r2 = addr_space_cast(r2, 0, 1);"
 	"*(u64 *)(r2 + 0) = r0;"
 	".8byte %[fetch_dst_r0];"
 	"r2 = %[uaf_r0_after_dst_r0] ll;"
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"
+	"r2 = addr_space_cast(r2, 0, 1);"
 	"*(u64 *)(r2 + 0) = r0;"
 	"r2 = %[uaf_r1_after_dst_r0] ll;"
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"
+	"r2 = addr_space_cast(r2, 0, 1);"
 	"*(u64 *)(r2 + 0) = r1;"
 	: : [page]"r"(page64),
 	    __imm_insn(fetch_dst_r0,
@@ -387,11 +387,11 @@ int uaf(const void *ctx)
 	asm volatile (
 	"r1 = %[page];"
 	"r1 += 4096;"
-	"r1 = addr_space_cast(r1, 0x0, 0x1);"
+	"r1 = addr_space_cast(r1, 0, 1);"
 	"r0 = 1;"
 	".8byte %[fetch_src_r0];"
 	"r2 = %[uaf_r0_after_src_r0] ll;"
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"
+	"r2 = addr_space_cast(r2, 0, 1);"
 	"*(u64 *)(r2 + 0) = r0;"
 	: : [page]"r"(page64),
 	    __imm_insn(fetch_src_r0,
@@ -409,10 +409,10 @@ int uaf(const void *ctx)
 	asm volatile (
 	"r1 = %[page];"
 	"r1 += 4096;"
-	"r1 = addr_space_cast(r1, 0x0, 0x1);"
+	"r1 = addr_space_cast(r1, 0, 1);"
 	"r3 = *(u64 *)(r1 + 0);"
 	"r2 = %[uaf_reread] ll;"
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"
+	"r2 = addr_space_cast(r2, 0, 1);"
 	"*(u64 *)(r2 + 0) = r3;"
 	: : [page]"r"(page64),
 	    __imm_addr(uaf_reread)
@@ -460,10 +460,10 @@ int load_acquire(const void *ctx)
 #define LOAD_ACQUIRE_ARENA(SIZEOP, SIZE, SRC, DST)	\
 	{ asm volatile (				\
 	"r1 = %[" #SRC "] ll;"				\
-	"r1 = addr_space_cast(r1, 0x0, 0x1);"		\
+	"r1 = addr_space_cast(r1, 0, 1);"		\
 	".8byte %[load_acquire_insn];"			\
 	"r3 = %[" #DST "] ll;"				\
-	"r3 = addr_space_cast(r3, 0x0, 0x1);"		\
+	"r3 = addr_space_cast(r3, 0, 1);"		\
 	"*(" #SIZE " *)(r3 + 0) = r2;"			\
 	:						\
 	: __imm_addr(SRC),				\
@@ -515,7 +515,7 @@ int store_release(const void *ctx)
 	{ asm volatile (			\
 	"r1 = " VAL ";"				\
 	"r2 = %[" #DST "] ll;"			\
-	"r2 = addr_space_cast(r2, 0x0, 0x1);"	\
+	"r2 = addr_space_cast(r2, 0, 1);"	\
 	".8byte %[store_release_insn];"		\
 	:					\
 	: __imm_addr(DST),			\
diff --git a/tools/testing/selftests/bpf/progs/jit_insns_arena.c b/tools/testing/selftests/bpf/progs/jit_insns_arena.c
index 95736eae2a58..997a897d66eb 100644
--- a/tools/testing/selftests/bpf/progs/jit_insns_arena.c
+++ b/tools/testing/selftests/bpf/progs/jit_insns_arena.c
@@ -47,7 +47,7 @@ int arena_zero_off(void *ctx)
 	/* Accesses through two base registers */
 	asm volatile ("					\
 	r7 = %[res];					\
-	r7 = addr_space_cast(r7, 0x0, 0x1);		\
+	r7 = addr_space_cast(r7, 0, 1);		\
 	r1 = r7;					\
 	r8 = 0x1122334455667788 ll;			\
 	*(u64 *)(r7 + 0) = r8;				\
@@ -93,12 +93,12 @@ int cast_to_user(void *ctx)
 	/* The user address comes back from the kernel one, NULL stays NULL */
 	asm volatile ("					\
 	r7 = %[page];					\
-	r1 = addr_space_cast(r7, 0x0, 0x1);		\
-	r1 = addr_space_cast(r1, 0x1, 0x0);		\
+	r1 = addr_space_cast(r7, 0, 1);		\
+	r1 = addr_space_cast(r1, 1, 0);		\
 	r9 = r1;					\
 	r9 ^= r7;					\
 	r2 = 0;						\
-	r2 = addr_space_cast(r2, 0x1, 0x0);		\
+	r2 = addr_space_cast(r2, 1, 0);		\
 	r9 |= r2;					\
 	%[res] = r9;					\
 "	: [res]"=r"(res)
diff --git a/tools/testing/selftests/bpf/progs/verifier_arena.c b/tools/testing/selftests/bpf/progs/verifier_arena.c
index b17a6dfc100d..9b149c724160 100644
--- a/tools/testing/selftests/bpf/progs/verifier_arena.c
+++ b/tools/testing/selftests/bpf/progs/verifier_arena.c
@@ -524,7 +524,7 @@ int scalar_add_arena_ptr(void *ctx)
 
 	asm volatile (
 		"%[arena_ptr] = 8192;"
-		"%[arena_ptr] = addr_space_cast(%[arena_ptr], 0x0, 0x1);"
+		"%[arena_ptr] = addr_space_cast(%[arena_ptr], 0, 1);"
 		"%[scalar] = 12;"
 		"%[scalar] += %[arena_ptr];"
 		: [scalar] "=r"(scalar),
@@ -549,9 +549,9 @@ int arena_ptr_add_arena_ptr(void *ctx)
 
 	asm volatile (
 		"%[arena_ptr1] = 8192;"
-		"%[arena_ptr1] = addr_space_cast(%[arena_ptr1], 0x0, 0x1);"
+		"%[arena_ptr1] = addr_space_cast(%[arena_ptr1], 0, 1);"
 		"%[arena_ptr2] = 4096;"
-		"%[arena_ptr2] = addr_space_cast(%[arena_ptr2], 0x0, 0x1);"
+		"%[arena_ptr2] = addr_space_cast(%[arena_ptr2], 0, 1);"
 		"%[arena_ptr2] += %[arena_ptr1];"
 		: [arena_ptr2] "=r"(arena_ptr2),
 		  [arena_ptr1] "=&r"(arena_ptr1)
@@ -574,7 +574,7 @@ int mixed_arena_scalar_alu64_scalar_first(void *ctx)
 		asm volatile (
 			"r9 = %[arena] ll;"
 			"%[reg] = 0;"
-			"%[reg] = addr_space_cast(%[reg], 0x0, 0x1);"
+			"%[reg] = addr_space_cast(%[reg], 0, 1);"
 			: [reg] "=r"(reg)
 			: __imm_addr(arena)
 			: "r9"
@@ -596,7 +596,7 @@ int mixed_arena_scalar_alu64_arena_first(void *ctx)
 	asm volatile (
 		"r9 = %[arena] ll;"
 		"%[reg] = 0;"
-		"%[reg] = addr_space_cast(%[reg], 0x0, 0x1);"
+		"%[reg] = addr_space_cast(%[reg], 0, 1);"
 		: [reg] "=r"(reg)
 		: __imm_addr(arena)
 		: "r9"
@@ -635,7 +635,7 @@ int scalar_xor_arena_ptr(void *ctx)
 
 	asm volatile (
 		"%[arena_ptr] = 8192;"
-		"%[arena_ptr] = addr_space_cast(%[arena_ptr], 0x0, 0x1);"
+		"%[arena_ptr] = addr_space_cast(%[arena_ptr], 0, 1);"
 		"%[scalar] = 12;"
 		"%[scalar] ^= %[arena_ptr];"
 		: [scalar] "=r"(scalar),
@@ -660,7 +660,7 @@ int arena_ptr_add_to_non_arena_ptr(void *ctx)
 
 	asm volatile (
 		"%[arena_ptr] = 8192;"
-		"%[arena_ptr] = addr_space_cast(%[arena_ptr], 0x0, 0x1);"
+		"%[arena_ptr] = addr_space_cast(%[arena_ptr], 0, 1);"
 		"%[dst] = %[ctx];"
 		"%[dst] += %[arena_ptr];"
 		: [arena_ptr] "=&r"(arena_ptr),
@@ -685,7 +685,7 @@ int non_arena_ptr_add_to_arena_ptr(void *ctx)
 
 	asm volatile (
 		"%[arena_ptr] = 8192;"
-		"%[arena_ptr] = addr_space_cast(%[arena_ptr], 0x0, 0x1);"
+		"%[arena_ptr] = addr_space_cast(%[arena_ptr], 0, 1);"
 		"%[src] = %[ctx];"
 		"%[arena_ptr] += %[src];"
 		: [arena_ptr] "=&r"(arena_ptr),
diff --git a/tools/testing/selftests/bpf/progs/verifier_hmul_arena.c b/tools/testing/selftests/bpf/progs/verifier_hmul_arena.c
index a8709ec447aa..b94892fff2f8 100644
--- a/tools/testing/selftests/bpf/progs/verifier_hmul_arena.c
+++ b/tools/testing/selftests/bpf/progs/verifier_hmul_arena.c
@@ -29,7 +29,7 @@ __naked void uhmul64_arena_ptr(void)
 	asm volatile (
 	"r1 = %[arena] ll;"
 	"r0 = 1;"
-	"r0 = addr_space_cast(r0, 0x0, 0x1);"
+	"r0 = addr_space_cast(r0, 0, 1);"
 	".8byte %[hmul];"
 	"exit;"
 	:
@@ -48,7 +48,7 @@ __naked void shmul64_arena_ptr(void)
 	asm volatile (
 	"r1 = %[arena] ll;"
 	"r1 = 1;"
-	"r1 = addr_space_cast(r1, 0x0, 0x1);"
+	"r1 = addr_space_cast(r1, 0, 1);"
 	"r0 = 2;"
 	".8byte %[hmul];"
 	"exit;"
diff --git a/tools/testing/selftests/bpf/progs/verifier_ldsx.c b/tools/testing/selftests/bpf/progs/verifier_ldsx.c
index 49e8cd4bb4f9..45b2e52fd715 100644
--- a/tools/testing/selftests/bpf/progs/verifier_ldsx.c
+++ b/tools/testing/selftests/bpf/progs/verifier_ldsx.c
@@ -310,7 +310,7 @@ __naked void arena_ldsx_disasm(void *ctx)
 	"r4 = %[numa_no_node];"
 	"r5 = 0;"
 	"call %[bpf_arena_alloc_pages];"
-	"r0 = addr_space_cast(r0, 0x0, 0x1);"
+	"r0 = addr_space_cast(r0, 0, 1);"
 	"r1 = r0;"
 	"r8 = *(s32 *)(r0 + 16);"
 	"r8 = *(s16 *)(r0 + 24);"
@@ -338,7 +338,7 @@ __naked void arena_ldsx_exception(void *ctx)
 	asm volatile (
 	"r1 = %[arena] ll;"
 	"r0 = 0xdeadbeef;"
-	"r0 = addr_space_cast(r0, 0x0, 0x1);"
+	"r0 = addr_space_cast(r0, 0, 1);"
 	"r1 = 0x3fe;"
 	"*(u64 *)(r0 + 0) = r1;"
 	"r0 = *(s8 *)(r0 + 0);"
@@ -364,7 +364,7 @@ __naked void arena_ldsx_s8(void *ctx)
 	"r4 = %[numa_no_node];"
 	"r5 = 0;"
 	"call %[bpf_arena_alloc_pages];"
-	"r0 = addr_space_cast(r0, 0x0, 0x1);"
+	"r0 = addr_space_cast(r0, 0, 1);"
 	"r1 = 0x3fe;"
 	"*(u64 *)(r0 + 0) = r1;"
 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
@@ -396,7 +396,7 @@ __naked void arena_ldsx_s16(void *ctx)
 	"r4 = %[numa_no_node];"
 	"r5 = 0;"
 	"call %[bpf_arena_alloc_pages];"
-	"r0 = addr_space_cast(r0, 0x0, 0x1);"
+	"r0 = addr_space_cast(r0, 0, 1);"
 	"r1 = 0x3fffe;"
 	"*(u64 *)(r0 + 0) = r1;"
 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
@@ -428,7 +428,7 @@ __naked void arena_ldsx_s32(void *ctx)
 	"r4 = %[numa_no_node];"
 	"r5 = 0;"
 	"call %[bpf_arena_alloc_pages];"
-	"r0 = addr_space_cast(r0, 0x0, 0x1);"
+	"r0 = addr_space_cast(r0, 0, 1);"
 	"r1 = 0xfffffffe;"
 	"*(u64 *)(r0 + 0) = r1;"
 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-- 
2.53.0-Meta


  parent reply	other threads:[~2026-11-03 18:18 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-03 18:18 [PATCH bpf-next v4 0/8] selftests/bpf: let the arena tests build with GCC Vineet Gupta
2026-11-03 18:18 ` [PATCH bpf-next v4 1/8] selftests/bpf: Build callx tests with GCC that defines __BPF_FEATURE_CALLX Vineet Gupta
2026-11-03 18:18 ` [PATCH bpf-next v4 2/8] selftests/bpf: don't pass clang-only warning flags to GCC Vineet Gupta
2026-11-03 18:18 ` [PATCH bpf-next v4 3/8] selftests/bpf: make arena_base() opaque to GCC's -Warray-bounds Vineet Gupta
2026-11-03 18:18 ` Vineet Gupta [this message]
2026-11-03 18:57   ` [PATCH bpf-next v4 4/8] selftests/bpf: spell the addr_space_cast address spaces in decimal bot+bpf-ci
2026-11-03 18:18 ` [PATCH bpf-next v4 5/8] selftests/bpf: write the mixed arena/scalar ALU tests in asm Vineet Gupta
2026-11-03 18:57   ` bot+bpf-ci
2026-11-03 18:18 ` [PATCH bpf-next v4 6/8] selftests/bpf: drop the arena guards and tag the tests that need arena Vineet Gupta
2026-11-03 18:57   ` bot+bpf-ci
2026-11-03 18:18 ` [PATCH bpf-next v4 7/8] selftests/bpf: cast explicitly in the struct_ops arena triggers Vineet Gupta
2026-11-03 18:18 ` [PATCH bpf-next v4 8/8] selftests/bpf: cast explicitly in the arena subprog and callback faults Vineet Gupta
2026-11-03 21:20 ` [PATCH bpf-next v4 0/8] selftests/bpf: let the arena tests build with GCC patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261103181816.254686-5-vineet.gupta@linux.dev \
    --to=vineet.gupta@linux.dev \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=david.faust@oss.qualcomm.com \
    --cc=eddyz87@gmail.com \
    --cc=emil@etsalapatis.com \
    --cc=ihor.solodrai@linux.dev \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=jose.marchesi@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=memxor@gmail.com \
    --cc=shuah@kernel.org \
    --cc=song@kernel.org \
    --cc=yonghong.song@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®