• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
18rustix_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
33rustix_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
48rustix_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
63rustix_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
78rustix_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
93rustix_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
108rustix_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
124rustix_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
136