]>
Commit | Line | Data |
---|---|---|
064997fb FG |
1 | // Assembly code for making arm syscalls. |
2 | // | |
3 | // arm syscall argument register ordering is the similar to the arm | |
4 | // userspace argument register ordering except that the syscall number | |
5 | // (nr) is passed in r7. | |
6 | // | |
7 | // nr_last.rs takes care of reordering the nr argument to the end for us, | |
8 | // so we only need to move nr into r7 and take care of r4 and r5 if needed. | |
9 | ||
10 | .file "arm.s" | |
11 | .arch armv5t | |
12 | ||
13 | .section .text.rustix_syscall0_nr_last,"ax",%progbits | |
14 | .p2align 4 | |
15 | .weak rustix_syscall0_nr_last | |
16 | .hidden rustix_syscall0_nr_last | |
17 | .type rustix_syscall0_nr_last, %function | |
18 | rustix_syscall0_nr_last: | |
19 | .fnstart | |
20 | .cantunwind | |
21 | push {r7, lr} | |
22 | mov r7, r0 | |
23 | svc #0 | |
24 | pop {r7, pc} | |
25 | .fnend | |
26 | .size rustix_syscall0_nr_last, .-rustix_syscall0_nr_last | |
27 | ||
28 | .section .text.rustix_syscall1_nr_last,"ax",%progbits | |
29 | .p2align 4 | |
30 | .weak rustix_syscall1_nr_last | |
31 | .hidden rustix_syscall1_nr_last | |
32 | .type rustix_syscall1_nr_last, %function | |
33 | rustix_syscall1_nr_last: | |
34 | .fnstart | |
35 | .cantunwind | |
36 | push {r7, lr} | |
37 | mov r7, r1 | |
38 | svc #0 | |
39 | pop {r7, pc} | |
40 | .fnend | |
41 | .size rustix_syscall1_nr_last, .-rustix_syscall1_nr_last | |
42 | ||
43 | .section .text.rustix_syscall1_noreturn_nr_last,"ax",%progbits | |
44 | .p2align 4 | |
45 | .weak rustix_syscall1_noreturn_nr_last | |
46 | .hidden rustix_syscall1_noreturn_nr_last | |
47 | .type rustix_syscall1_noreturn_nr_last, %function | |
48 | rustix_syscall1_noreturn_nr_last: | |
49 | .fnstart | |
50 | .cantunwind | |
51 | // Don't save r7 and lr; this is noreturn, so we'll never restore them. | |
52 | mov r7, r1 | |
53 | svc #0 | |
54 | udf #16 // Trap instruction | |
55 | .fnend | |
56 | .size rustix_syscall1_noreturn_nr_last, .-rustix_syscall1_noreturn_nr_last | |
57 | ||
58 | .section .text.rustix_syscall2_nr_last,"ax",%progbits | |
59 | .p2align 4 | |
60 | .weak rustix_syscall2_nr_last | |
61 | .hidden rustix_syscall2_nr_last | |
62 | .type rustix_syscall2_nr_last, %function | |
63 | rustix_syscall2_nr_last: | |
64 | .fnstart | |
65 | .cantunwind | |
66 | push {r7, lr} | |
67 | mov r7, r2 | |
68 | svc #0 | |
69 | pop {r7, pc} | |
70 | .fnend | |
71 | .size rustix_syscall2_nr_last, .-rustix_syscall2_nr_last | |
72 | ||
73 | .section .text.rustix_syscall3_nr_last,"ax",%progbits | |
74 | .p2align 4 | |
75 | .weak rustix_syscall3_nr_last | |
76 | .hidden rustix_syscall3_nr_last | |
77 | .type rustix_syscall3_nr_last, %function | |
78 | rustix_syscall3_nr_last: | |
79 | .fnstart | |
80 | .cantunwind | |
81 | push {r7, lr} | |
82 | mov r7, r3 | |
83 | svc #0 | |
84 | pop {r7, pc} | |
85 | .fnend | |
86 | .size rustix_syscall3_nr_last, .-rustix_syscall3_nr_last | |
87 | ||
88 | .section .text.rustix_syscall4_nr_last,"ax",%progbits | |
89 | .p2align 4 | |
90 | .weak rustix_syscall4_nr_last | |
91 | .hidden rustix_syscall4_nr_last | |
92 | .type rustix_syscall4_nr_last, %function | |
93 | rustix_syscall4_nr_last: | |
94 | .fnstart | |
95 | .cantunwind | |
96 | push {r7, lr} | |
97 | ldr r7, [sp, #8] | |
98 | svc #0 | |
99 | pop {r7, pc} | |
100 | .fnend | |
101 | .size rustix_syscall4_nr_last, .-rustix_syscall4_nr_last | |
102 | ||
103 | .section .text.rustix_syscall5_nr_last,"ax",%progbits | |
104 | .p2align 4 | |
105 | .weak rustix_syscall5_nr_last | |
106 | .hidden rustix_syscall5_nr_last | |
107 | .type rustix_syscall5_nr_last, %function | |
108 | rustix_syscall5_nr_last: | |
109 | .fnstart | |
110 | .cantunwind | |
111 | push {r4, r7, r11, lr} | |
112 | ldr r7, [sp, #20] | |
113 | ldr r4, [sp, #16] | |
114 | svc #0 | |
115 | pop {r4, r7, r11, pc} | |
116 | .fnend | |
117 | .size rustix_syscall5_nr_last, .-rustix_syscall5_nr_last | |
118 | ||
119 | .section .text.rustix_syscall6_nr_last,"ax",%progbits | |
120 | .p2align 4 | |
121 | .weak rustix_syscall6_nr_last | |
122 | .hidden rustix_syscall6_nr_last | |
123 | .type rustix_syscall6_nr_last, %function | |
124 | rustix_syscall6_nr_last: | |
125 | .fnstart | |
126 | .cantunwind | |
127 | push {r4, r5, r7, lr} | |
128 | add r7, sp, #16 | |
129 | ldm r7, {r4, r5, r7} | |
130 | svc #0 | |
131 | pop {r4, r5, r7, pc} | |
132 | .fnend | |
133 | .size rustix_syscall6_nr_last, .-rustix_syscall6_nr_last | |
134 | ||
135 | .section .note.GNU-stack,"",%progbits |