summaryrefslogtreecommitdiff
path: root/src/thread/riscv32/syscall_cp.s
diff options
context:
space:
mode:
authorStefan O'Rear <sorear@fastmail.com>2020-09-03 05:56:46 -0400
committerRich Felker <dalias@aerifal.cx>2024-02-29 16:36:55 -0500
commitb28c44de8c3131b45588f61569b1711c987ba1c3 (patch)
tree7d96859d2728bdf84695978b22c53e6563c896c8 /src/thread/riscv32/syscall_cp.s
parentc34a8eedff904b7f3d8479bbec0be534e7a01fbb (diff)
downloadmusl-b28c44de8c3131b45588f61569b1711c987ba1c3.tar.gz
riscv32: add thread support
Identical to riscv64 except for stack offsets in clone.
Diffstat (limited to 'src/thread/riscv32/syscall_cp.s')
-rw-r--r--src/thread/riscv32/syscall_cp.s29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/thread/riscv32/syscall_cp.s b/src/thread/riscv32/syscall_cp.s
new file mode 100644
index 00000000..079d1ba0
--- /dev/null
+++ b/src/thread/riscv32/syscall_cp.s
@@ -0,0 +1,29 @@
+.global __cp_begin
+.hidden __cp_begin
+.global __cp_end
+.hidden __cp_end
+.global __cp_cancel
+.hidden __cp_cancel
+.hidden __cancel
+.global __syscall_cp_asm
+.hidden __syscall_cp_asm
+.type __syscall_cp_asm, %function
+__syscall_cp_asm:
+__cp_begin:
+ lw t0, 0(a0)
+ bnez t0, __cp_cancel
+
+ mv t0, a1
+ mv a0, a2
+ mv a1, a3
+ mv a2, a4
+ mv a3, a5
+ mv a4, a6
+ mv a5, a7
+ lw a6, 0(sp)
+ mv a7, t0
+ ecall
+__cp_end:
+ ret
+__cp_cancel:
+ tail __cancel