88/* From include/linux/filter.h */
99#define MAX_BPF_STACK 512
1010
11- #if defined(__TARGET_ARCH_x86 )
11+ #if defined(__TARGET_ARCH_x86 ) || defined( __TARGET_ARCH_arm64 )
1212
1313struct elem {
1414 struct bpf_timer t ;
@@ -30,6 +30,18 @@ __jited(" movabsq $0x{{.*}}, %r9")
3030__jited (" addq %gs:{{.*}}, %r9" )
3131__jited (" movl $0x2a, %edi" )
3232__jited (" movq %rdi, -0x100(%r9)" )
33+ __arch_arm64
34+ __jited (" stp x25, x27, [sp, {{.*}}]!" )
35+ __jited (" mov x27, {{.*}}" )
36+ __jited (" movk x27, {{.*}}, lsl #16" )
37+ __jited (" movk x27, {{.*}}" )
38+ __jited (" mrs x10, TPIDR_EL{{[0-1]}}" )
39+ __jited (" add x27, x27, x10" )
40+ __jited (" add x25, x27, {{.*}}" )
41+ __jited (" mov x0, #0x2a" )
42+ __jited (" str x0, [x27]" )
43+ __jited ("..." )
44+ __jited (" ldp x25, x27, [sp], {{.*}}" )
3345__naked void private_stack_single_prog (void )
3446{
3547 asm volatile (" \
@@ -45,6 +57,9 @@ __description("No private stack")
4557__success
4658__arch_x86_64
4759__jited (" subq $0x8, %rsp" )
60+ __arch_arm64
61+ __jited (" mov x25, sp" )
62+ __jited (" sub sp, sp, #0x10" )
4863__naked void no_private_stack_nested (void )
4964{
5065 asm volatile (" \
@@ -81,6 +96,19 @@ __jited(" pushq %r9")
8196__jited (" callq 0x{{.*}}" )
8297__jited (" popq %r9" )
8398__jited (" xorl %eax, %eax" )
99+ __arch_arm64
100+ __jited (" stp x25, x27, [sp, {{.*}}]!" )
101+ __jited (" mov x27, {{.*}}" )
102+ __jited (" movk x27, {{.*}}, lsl #16" )
103+ __jited (" movk x27, {{.*}}" )
104+ __jited (" mrs x10, TPIDR_EL{{[0-1]}}" )
105+ __jited (" add x27, x27, x10" )
106+ __jited (" add x25, x27, {{.*}}" )
107+ __jited (" mov x0, #0x2a" )
108+ __jited (" str x0, [x27]" )
109+ __jited (" bl {{.*}}" )
110+ __jited ("..." )
111+ __jited (" ldp x25, x27, [sp], {{.*}}" )
84112__naked void private_stack_nested_1 (void )
85113{
86114 asm volatile (" \
@@ -131,6 +159,24 @@ __jited(" movq %rdi, -0x200(%r9)")
131159__jited (" pushq %r9" )
132160__jited (" callq" )
133161__jited (" popq %r9" )
162+ __arch_arm64
163+ __jited ("func #1" )
164+ __jited ("..." )
165+ __jited (" stp x25, x27, [sp, {{.*}}]!" )
166+ __jited (" mov x27, {{.*}}" )
167+ __jited (" movk x27, {{.*}}, lsl #16" )
168+ __jited (" movk x27, {{.*}}" )
169+ __jited (" mrs x10, TPIDR_EL{{[0-1]}}" )
170+ __jited (" add x27, x27, x10" )
171+ __jited (" add x25, x27, {{.*}}" )
172+ __jited (" bl 0x{{.*}}" )
173+ __jited (" add x7, x0, #0x0" )
174+ __jited (" mov x0, #0x2a" )
175+ __jited (" str x0, [x27]" )
176+ __jited (" bl 0x{{.*}}" )
177+ __jited (" add x7, x0, #0x0" )
178+ __jited (" mov x7, #0x0" )
179+ __jited (" ldp x25, x27, [sp], {{.*}}" )
134180__naked void private_stack_callback (void )
135181{
136182 asm volatile (" \
@@ -154,6 +200,28 @@ __arch_x86_64
154200__jited (" pushq %r9" )
155201__jited (" callq" )
156202__jited (" popq %r9" )
203+ __arch_arm64
204+ __jited (" stp x29, x30, [sp, #-0x10]!" )
205+ __jited (" mov x29, sp" )
206+ __jited (" stp xzr, x26, [sp, #-0x10]!" )
207+ __jited (" mov x26, sp" )
208+ __jited (" stp x19, x20, [sp, #-0x10]!" )
209+ __jited (" stp x21, x22, [sp, #-0x10]!" )
210+ __jited (" stp x23, x24, [sp, #-0x10]!" )
211+ __jited (" stp x25, x26, [sp, #-0x10]!" )
212+ __jited (" stp x27, x28, [sp, #-0x10]!" )
213+ __jited (" mov x27, {{.*}}" )
214+ __jited (" movk x27, {{.*}}, lsl #16" )
215+ __jited (" movk x27, {{.*}}" )
216+ __jited (" mrs x10, TPIDR_EL{{[0-1]}}" )
217+ __jited (" add x27, x27, x10" )
218+ __jited (" add x25, x27, {{.*}}" )
219+ __jited (" mov x0, #0x2a" )
220+ __jited (" str x0, [x27]" )
221+ __jited (" mov x0, #0x0" )
222+ __jited (" bl 0x{{.*}}" )
223+ __jited (" add x7, x0, #0x0" )
224+ __jited (" ldp x27, x28, [sp], #0x10" )
157225int private_stack_exception_main_prog (void )
158226{
159227 asm volatile (" \
@@ -179,6 +247,19 @@ __jited(" movq %rdi, -0x200(%r9)")
179247__jited (" pushq %r9" )
180248__jited (" callq" )
181249__jited (" popq %r9" )
250+ __arch_arm64
251+ __jited (" stp x27, x28, [sp, #-0x10]!" )
252+ __jited (" mov x27, {{.*}}" )
253+ __jited (" movk x27, {{.*}}, lsl #16" )
254+ __jited (" movk x27, {{.*}}" )
255+ __jited (" mrs x10, TPIDR_EL{{[0-1]}}" )
256+ __jited (" add x27, x27, x10" )
257+ __jited (" add x25, x27, {{.*}}" )
258+ __jited (" mov x0, #0x2a" )
259+ __jited (" str x0, [x27]" )
260+ __jited (" bl 0x{{.*}}" )
261+ __jited (" add x7, x0, #0x0" )
262+ __jited (" ldp x27, x28, [sp], #0x10" )
182263int private_stack_exception_sub_prog (void )
183264{
184265 asm volatile (" \
@@ -220,6 +301,10 @@ __description("Private stack, async callback, not nested")
220301__success __retval (0 )
221302__arch_x86_64
222303__jited (" movabsq $0x{{.*}}, %r9" )
304+ __arch_arm64
305+ __jited (" mrs x10, TPIDR_EL{{[0-1]}}" )
306+ __jited (" add x27, x27, x10" )
307+ __jited (" add x25, x27, {{.*}}" )
223308int private_stack_async_callback_1 (void )
224309{
225310 struct bpf_timer * arr_timer ;
@@ -241,6 +326,8 @@ __description("Private stack, async callback, potential nesting")
241326__success __retval (0 )
242327__arch_x86_64
243328__jited (" subq $0x100, %rsp" )
329+ __arch_arm64
330+ __jited (" sub sp, sp, #0x100" )
244331int private_stack_async_callback_2 (void )
245332{
246333 struct bpf_timer * arr_timer ;
0 commit comments