diff options
4 files changed, 91 insertions, 4 deletions
| diff --git a/tools/testing/selftests/bpf/progs/struct_ops_private_stack.c b/tools/testing/selftests/bpf/progs/struct_ops_private_stack.c index 0e4d2ff63ab8..dbe646013811 100644 --- a/tools/testing/selftests/bpf/progs/struct_ops_private_stack.c +++ b/tools/testing/selftests/bpf/progs/struct_ops_private_stack.c @@ -7,7 +7,7 @@  char _license[] SEC("license") = "GPL"; -#if defined(__TARGET_ARCH_x86) +#if defined(__TARGET_ARCH_x86) || defined(__TARGET_ARCH_arm64)  bool skip __attribute((__section__(".data"))) = false;  #else  bool skip = true; diff --git a/tools/testing/selftests/bpf/progs/struct_ops_private_stack_fail.c b/tools/testing/selftests/bpf/progs/struct_ops_private_stack_fail.c index 58d5d8dc2235..3d89ad7cbe2a 100644 --- a/tools/testing/selftests/bpf/progs/struct_ops_private_stack_fail.c +++ b/tools/testing/selftests/bpf/progs/struct_ops_private_stack_fail.c @@ -7,7 +7,7 @@  char _license[] SEC("license") = "GPL"; -#if defined(__TARGET_ARCH_x86) +#if defined(__TARGET_ARCH_x86) || defined(__TARGET_ARCH_arm64)  bool skip __attribute((__section__(".data"))) = false;  #else  bool skip = true; diff --git a/tools/testing/selftests/bpf/progs/struct_ops_private_stack_recur.c b/tools/testing/selftests/bpf/progs/struct_ops_private_stack_recur.c index 31e58389bb8b..b1f6d7e5a8e5 100644 --- a/tools/testing/selftests/bpf/progs/struct_ops_private_stack_recur.c +++ b/tools/testing/selftests/bpf/progs/struct_ops_private_stack_recur.c @@ -7,7 +7,7 @@  char _license[] SEC("license") = "GPL"; -#if defined(__TARGET_ARCH_x86) +#if defined(__TARGET_ARCH_x86) || defined(__TARGET_ARCH_arm64)  bool skip __attribute((__section__(".data"))) = false;  #else  bool skip = true; diff --git a/tools/testing/selftests/bpf/progs/verifier_private_stack.c b/tools/testing/selftests/bpf/progs/verifier_private_stack.c index fc91b414364e..1ecd34ebde19 100644 --- a/tools/testing/selftests/bpf/progs/verifier_private_stack.c +++ b/tools/testing/selftests/bpf/progs/verifier_private_stack.c @@ -8,7 +8,7 @@  /* From include/linux/filter.h */  #define MAX_BPF_STACK    512 -#if defined(__TARGET_ARCH_x86) +#if defined(__TARGET_ARCH_x86) || defined(__TARGET_ARCH_arm64)  struct elem {  	struct bpf_timer t; @@ -30,6 +30,18 @@ __jited("	movabsq	$0x{{.*}}, %r9")  __jited("	addq	%gs:{{.*}}, %r9")  __jited("	movl	$0x2a, %edi")  __jited("	movq	%rdi, -0x100(%r9)") +__arch_arm64 +__jited("	stp	x25, x27, [sp, {{.*}}]!") +__jited("	mov	x27, {{.*}}") +__jited("	movk	x27, {{.*}}, lsl #16") +__jited("	movk	x27, {{.*}}") +__jited("	mrs	x10, TPIDR_EL{{[0-1]}}") +__jited("	add	x27, x27, x10") +__jited("	add	x25, x27, {{.*}}") +__jited("	mov	x0, #0x2a") +__jited("	str	x0, [x27]") +__jited("...") +__jited("	ldp	x25, x27, [sp], {{.*}}")  __naked void private_stack_single_prog(void)  {  	asm volatile ("			\ @@ -45,6 +57,9 @@ __description("No private stack")  __success  __arch_x86_64  __jited("	subq	$0x8, %rsp") +__arch_arm64 +__jited("	mov	x25, sp") +__jited("	sub	sp, sp, #0x10")  __naked void no_private_stack_nested(void)  {  	asm volatile ("			\ @@ -81,6 +96,19 @@ __jited("	pushq	%r9")  __jited("	callq	0x{{.*}}")  __jited("	popq	%r9")  __jited("	xorl	%eax, %eax") +__arch_arm64 +__jited("	stp	x25, x27, [sp, {{.*}}]!") +__jited("	mov	x27, {{.*}}") +__jited("	movk	x27, {{.*}}, lsl #16") +__jited("	movk	x27, {{.*}}") +__jited("	mrs	x10, TPIDR_EL{{[0-1]}}") +__jited("	add	x27, x27, x10") +__jited("	add	x25, x27, {{.*}}") +__jited("	mov	x0, #0x2a") +__jited("	str	x0, [x27]") +__jited("	bl	{{.*}}") +__jited("...") +__jited("	ldp	x25, x27, [sp], {{.*}}")  __naked void private_stack_nested_1(void)  {  	asm volatile ("				\ @@ -131,6 +159,24 @@ __jited("	movq	%rdi, -0x200(%r9)")  __jited("	pushq	%r9")  __jited("	callq")  __jited("	popq	%r9") +__arch_arm64 +__jited("func #1") +__jited("...") +__jited("	stp	x25, x27, [sp, {{.*}}]!") +__jited("	mov	x27, {{.*}}") +__jited("	movk	x27, {{.*}}, lsl #16") +__jited("	movk	x27, {{.*}}") +__jited("	mrs	x10, TPIDR_EL{{[0-1]}}") +__jited("	add	x27, x27, x10") +__jited("	add	x25, x27, {{.*}}") +__jited("	bl	0x{{.*}}") +__jited("	add	x7, x0, #0x0") +__jited("	mov	x0, #0x2a") +__jited("	str	x0, [x27]") +__jited("	bl	0x{{.*}}") +__jited("	add	x7, x0, #0x0") +__jited("	mov	x7, #0x0") +__jited("	ldp	x25, x27, [sp], {{.*}}")  __naked void private_stack_callback(void)  {  	asm volatile ("			\ @@ -154,6 +200,28 @@ __arch_x86_64  __jited("	pushq	%r9")  __jited("	callq")  __jited("	popq	%r9") +__arch_arm64 +__jited("	stp	x29, x30, [sp, #-0x10]!") +__jited("	mov	x29, sp") +__jited("	stp	xzr, x26, [sp, #-0x10]!") +__jited("	mov	x26, sp") +__jited("	stp	x19, x20, [sp, #-0x10]!") +__jited("	stp	x21, x22, [sp, #-0x10]!") +__jited("	stp	x23, x24, [sp, #-0x10]!") +__jited("	stp	x25, x26, [sp, #-0x10]!") +__jited("	stp	x27, x28, [sp, #-0x10]!") +__jited("	mov	x27, {{.*}}") +__jited("	movk	x27, {{.*}}, lsl #16") +__jited("	movk	x27, {{.*}}") +__jited("	mrs	x10, TPIDR_EL{{[0-1]}}") +__jited("	add	x27, x27, x10") +__jited("	add	x25, x27, {{.*}}") +__jited("	mov	x0, #0x2a") +__jited("	str	x0, [x27]") +__jited("	mov	x0, #0x0") +__jited("	bl	0x{{.*}}") +__jited("	add	x7, x0, #0x0") +__jited("	ldp	x27, x28, [sp], #0x10")  int private_stack_exception_main_prog(void)  {  	asm volatile ("			\ @@ -179,6 +247,19 @@ __jited("	movq	%rdi, -0x200(%r9)")  __jited("	pushq	%r9")  __jited("	callq")  __jited("	popq	%r9") +__arch_arm64 +__jited("	stp	x27, x28, [sp, #-0x10]!") +__jited("	mov	x27, {{.*}}") +__jited("	movk	x27, {{.*}}, lsl #16") +__jited("	movk	x27, {{.*}}") +__jited("	mrs	x10, TPIDR_EL{{[0-1]}}") +__jited("	add	x27, x27, x10") +__jited("	add	x25, x27, {{.*}}") +__jited("	mov	x0, #0x2a") +__jited("	str	x0, [x27]") +__jited("	bl	0x{{.*}}") +__jited("	add	x7, x0, #0x0") +__jited("	ldp	x27, x28, [sp], #0x10")  int private_stack_exception_sub_prog(void)  {  	asm volatile ("			\ @@ -220,6 +301,10 @@ __description("Private stack, async callback, not nested")  __success __retval(0)  __arch_x86_64  __jited("	movabsq	$0x{{.*}}, %r9") +__arch_arm64 +__jited("	mrs	x10, TPIDR_EL{{[0-1]}}") +__jited("	add	x27, x27, x10") +__jited("	add	x25, x27, {{.*}}")  int private_stack_async_callback_1(void)  {  	struct bpf_timer *arr_timer; @@ -241,6 +326,8 @@ __description("Private stack, async callback, potential nesting")  __success __retval(0)  __arch_x86_64  __jited("	subq	$0x100, %rsp") +__arch_arm64 +__jited("	sub	sp, sp, #0x100")  int private_stack_async_callback_2(void)  {  	struct bpf_timer *arr_timer; | 
