75c56d8f153931d378a875640d6b4a5203bd0ec8
[tpg/acess2.git] / Usermode / Libraries / ld-acess.so_src / arch / armv7.S.h
1 //
2 // Acess2 ARMv7 - System Calls
3 //
4
5 #include "../../../../Kernel/include/syscalls.h"
6
7 .globl _start
8 .extern SoMain
9 _start:
10         push {r1,r2,r3}
11         bl SoMain
12         
13         mov r4, r0
14
15         pop {r0,r1,r2}
16         blx r4
17         
18         b _exit
19
20 @ Stupid GCC
21 .globl __ucmpdi2
22 __ucmpdi2:
23         cmp r0, r2
24         movmi r0, #0
25         movmi pc, lr
26         movhi r0, #2
27         movhi pc, lr
28         cmp r1, r2
29         movmi r0, #0
30         movmi pc, lr
31         movhi r0, #2
32         movhi pc, lr
33         mov r0, #1
34         mov pc, lr
35
36 @ DEST
37 @ SRC
38 @_memcpy:
39 @       push rbp
40 @       mov rbp, rsp
41 @       
42 @       ; RDI - First Param
43 @       ; RSI - Second Param
44 @       mov rcx, rdx    ; RDX - Third
45 @       rep movsb
46 @       
47 @       pop rbp
48 @       ret
49 @
50 .globl _errno
51 _errno: .long   0       @ Placed in .text, to allow use of relative addressing
52
53 .macro syscall0 _name, _num     
54 .globl \_name
55 \_name:
56         svc #\_num
57         str r2, _errno
58         mov pc, lr
59 .endm
60
61 #define SYSCALL0(_name,_num)    syscall0 _name, _num
62 #define SYSCALL1(_name,_num)    SYSCALL0(_name, _num)
63 #define SYSCALL2(_name,_num)    SYSCALL0(_name, _num)
64 #define SYSCALL3(_name,_num)    SYSCALL0(_name, _num)
65 #define SYSCALL4(_name,_num)    SYSCALL0(_name, _num)
66 // TODO: 5/6 need special handling, because the args are on the stack
67 #define SYSCALL5(_name,_num)    SYSCALL0(_name, _num)
68 #define SYSCALL6(_name,_num)    SYSCALL0(_name, _num)
69
70 // Override the clone syscall
71 #define _exit   _exit_raw
72 #include "syscalls.s.h"
73 #undef _exit
74
75 .globl _exit
76 _exit:
77         svc #0
78         b .
79

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