diff --git a/src/setjmp/arm/longjmp.s b/src/setjmp/arm/longjmp.s index e28d8f3..e9b9b32 100644 --- a/src/setjmp/arm/longjmp.s +++ b/src/setjmp/arm/longjmp.s @@ -8,7 +8,9 @@ longjmp: mov ip,r0 movs r0,r1 moveq r0,#1 - ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp,sp,lr} + ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp} + ldr sp, [ip]! + ldr lr, [ip]! adr r1,1f ldr r2,1f diff --git a/src/setjmp/arm/setjmp.s b/src/setjmp/arm/setjmp.s index 8779163..fd380b0 100644 --- a/src/setjmp/arm/setjmp.s +++ b/src/setjmp/arm/setjmp.s @@ -9,7 +9,9 @@ __setjmp: _setjmp: setjmp: mov ip,r0 - stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp,sp,lr} + stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp} + str sp, [ip]! + str lr, [ip]! mov r0,#0 adr r1,1f diff --git a/src/string/arm/memcpy_le.S b/src/string/arm/memcpy_le.S index 4db4844..2517d15 100644 --- a/src/string/arm/memcpy_le.S +++ b/src/string/arm/memcpy_le.S @@ -241,7 +241,8 @@ non_congruent: beq 2f ldr r5, [r1], #4 sub r2, r2, #4 - orr r4, r3, r5, lsl lr + lsl r4, r5, lr + orr r4, r3, r4 mov r3, r5, lsr r12 str r4, [r0], #4 cmp r2, #4 @@ -348,7 +349,8 @@ less_than_thirtytwo: 1: ldr r5, [r1], #4 sub r2, r2, #4 - orr r4, r3, r5, lsl lr + lsl r4, r5, lr + orr r4, r3, r4 mov r3, r5, lsr r12 str r4, [r0], #4 cmp r2, #4 diff --git a/src/thread/arm/atomics.s b/src/thread/arm/atomics.s index 673fc03..a4bd03a 100644 --- a/src/thread/arm/atomics.s +++ b/src/thread/arm/atomics.s @@ -6,7 +6,8 @@ .type __a_barrier,%function __a_barrier: ldr ip,1f - ldr ip,[pc,ip] + add ip,pc,ip + ldr ip,[ip] add pc,pc,ip 1: .word __a_barrier_ptr-1b .global __a_barrier_dummy @@ -40,7 +41,8 @@ __a_barrier_v7: .type __a_cas,%function __a_cas: ldr ip,1f - ldr ip,[pc,ip] + add ip,pc,ip + ldr ip,[ip] add pc,pc,ip 1: .word __a_cas_ptr-1b .global __a_cas_dummy @@ -85,7 +87,8 @@ __aeabi_read_tp: .type __a_gettp,%function __a_gettp: ldr r0,1f - ldr r0,[pc,r0] + add r0,pc,r0 + ldr r0,[r0] add pc,pc,r0 1: .word __a_gettp_ptr-1b .global __a_gettp_dummy