diff options
Diffstat (limited to 'src/thread/arm')
-rw-r--r-- | src/thread/arm/atomics.s | 4 | ||||
-rw-r--r-- | src/thread/arm/clone.s | 13 | ||||
-rw-r--r-- | src/thread/arm/syscall_cp.s | 8 |
3 files changed, 11 insertions, 14 deletions
diff --git a/src/thread/arm/atomics.s b/src/thread/arm/atomics.s index 101ad391..da50508d 100644 --- a/src/thread/arm/atomics.s +++ b/src/thread/arm/atomics.s @@ -15,10 +15,10 @@ __a_barrier_oldkuser: mov r1,r0 mov r2,sp ldr ip,=0xffff0fc0 - mov lr,pc - mov pc,ip + bl 1f pop {r0,r1,r2,r3,ip,lr} bx lr +1: bx ip .global __a_barrier_v6 .hidden __a_barrier_v6 diff --git a/src/thread/arm/clone.s b/src/thread/arm/clone.s index e16b1326..4ff0c0e8 100644 --- a/src/thread/arm/clone.s +++ b/src/thread/arm/clone.s @@ -19,14 +19,11 @@ __clone: ldmfd sp!,{r4,r5,r6,r7} bx lr -1: mov r0,r6 - tst r5,#1 - bne 1f - mov lr,pc - mov pc,r5 +1: mov fp,#0 + mov r0,r6 + bl 3f 2: mov r7,#1 svc 0 - -1: mov lr,pc - bx r5 b 2b + +3: bx r5 diff --git a/src/thread/arm/syscall_cp.s b/src/thread/arm/syscall_cp.s index a5730c08..e607dd42 100644 --- a/src/thread/arm/syscall_cp.s +++ b/src/thread/arm/syscall_cp.s @@ -11,19 +11,19 @@ .type __syscall_cp_asm,%function __syscall_cp_asm: mov ip,sp - stmfd sp!,{r4,r5,r6,r7,lr} + stmfd sp!,{r4,r5,r6,r7} __cp_begin: ldr r0,[r0] cmp r0,#0 - blne __cp_cancel + bne __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} + ldmfd sp!,{r4,r5,r6,r7} bx lr __cp_cancel: - ldmfd sp!,{r4,r5,r6,r7,lr} + ldmfd sp!,{r4,r5,r6,r7} b __cancel |