Index: fusl/src/thread/arm/syscall_cp.s |
diff --git a/fusl/src/thread/arm/syscall_cp.s b/fusl/src/thread/arm/syscall_cp.s |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a5730c08b826334f550055f31703e1c69227af27 |
--- /dev/null |
+++ b/fusl/src/thread/arm/syscall_cp.s |
@@ -0,0 +1,29 @@ |
+.syntax unified |
+.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: |
+ mov ip,sp |
+ stmfd sp!,{r4,r5,r6,r7,lr} |
+__cp_begin: |
+ ldr r0,[r0] |
+ cmp r0,#0 |
+ blne __cp_cancel |
+ mov r7,r1 |
+ mov r0,r2 |
+ mov r1,r3 |
+ ldmfd ip,{r2,r3,r4,r5,r6} |
+ svc 0 |
+__cp_end: |
+ ldmfd sp!,{r4,r5,r6,r7,lr} |
+ bx lr |
+__cp_cancel: |
+ ldmfd sp!,{r4,r5,r6,r7,lr} |
+ b __cancel |