]> git.proxmox.com Git - rustc.git/blame - vendor/rustix/src/imp/linux_raw/arch/outline/arm.s
New upstream version 1.66.0+dfsg1
[rustc.git] / vendor / rustix / src / imp / linux_raw / arch / outline / arm.s
CommitLineData
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
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