Usermode/ld-acess - Fixed ARMv7 edge case with 64-bit syscall args
authorJohn Hodge (sonata) <[email protected]>
Sat, 19 Jan 2013 11:36:02 +0000 (19:36 +0800)
committerJohn Hodge (sonata) <[email protected]>
Sat, 19 Jan 2013 11:36:02 +0000 (19:36 +0800)
- They get aligned to even registers

Usermode/Libraries/ld-acess.so_src/arch/armv7.S.h

index 2c85b14..351c841 100644 (file)
@@ -100,9 +100,23 @@ _errno:    .long   0       @ Placed in .text, to allow use of relative addressing
 // Override the clone syscall
 #define _exit  _exit_raw
 #define _clone _clone_raw
+#define _SysSeek       _SysSeek_borken
 #include "syscalls.s.h"
 #undef _exit
 #undef _clone
+#undef _SysSeek 
+
+// NOTE: _SysSeek needs special handling for alignment
+.globl _SysSeek
+_SysSeek:
+       push {lr}
+       mov r1,r2
+       mov r2,r3
+       ldr r3, [sp,#4]
+       svc #SYS_SEEK
+       ldr r3, =_errno
+       str r2, [r3]
+       pop {pc}
 
 .globl _clone
 _clone:
@@ -120,6 +134,7 @@ _clone_ret:
        pop {r4}
        mov pc, lr
 
+
 .globl _exit
 _exit:
        svc #0

UCC git Repository :: git.ucc.asn.au