X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Fld-acess.so_src%2Farch%2Farmv7.S.h;h=560b809f0c1df0c929465293938271c71c5f73a2;hb=80126f769c11f0c6ad4f4b4554748f4d59a4850d;hp=85a3ac69bc6704ceb594a3d78a7f81c7f222c9f4;hpb=c53533a539638c1c0ad4f4c99c091ae7972cfd8b;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/ld-acess.so_src/arch/armv7.S.h b/Usermode/Libraries/ld-acess.so_src/arch/armv7.S.h index 85a3ac69..560b809f 100644 --- a/Usermode/Libraries/ld-acess.so_src/arch/armv7.S.h +++ b/Usermode/Libraries/ld-acess.so_src/arch/armv7.S.h @@ -8,6 +8,7 @@ .extern SoMain _start: pop {r0} + ldm sp, {r1,r2,r3} bl SoMain mov r4, r0 @@ -33,6 +34,13 @@ __ucmpdi2: mov r0, #1 mov pc, lr +@ Well, can't blame it +@ - Clear the instruction cache +.globl __clear_cache +__clear_cache: + svc #0x1001 + mov pc, lr + @ DEST @ SRC @_memcpy: @@ -53,32 +61,31 @@ _errno: .long 0 @ Placed in .text, to allow use of relative addressing .macro syscall0 _name, _num .globl \_name \_name: + push {lr} svc #\_num str r2, _errno - mov pc, lr + pop {pc} .endm .macro syscall5 _name, _num .globl \_name \_name: - push {r4} - ldr r4, [sp,#4] + push {r4, lr} + ldr r4, [sp,#8] svc #\_num str r2, _errno - pop {r4} - mov pc, lr + pop {r4, pc} .endm .macro syscall6 _name, _num .globl \_name \_name: - push {r4,r5} - ldr r4, [sp,#8] - ldr r5, [sp,#12] + push {r4,r5,lr} + ldr r4, [sp,#12] + ldr r5, [sp,#16] svc #\_num str r2, _errno - pop {r4,r5} - mov pc, lr + pop {r4,r5,pc} .endm #define SYSCALL0(_name,_num) syscall0 _name, _num