try to handle exec-gp2xmenu exit
[ginge.git] / loader / syscalls.S
CommitLineData
d0b9b0df 1@ vim:filetype=armasm
2#include <sys/syscall.h>
3
4
5.global sys_cacheflush @ const void *start_addr, const void *end_addr
6sys_cacheflush:
7 mov r2, #0
8#ifdef __ARM_EABI__
9 /* EABI version */
10 str r7, [sp, #-4]!
11 mov r7, #(__ARM_NR_cacheflush & 0xff)
12#if (__ARM_NR_cacheflush & 0x00ff00)
13 orr r7, r7, #(__ARM_NR_cacheflush & 0x00ff00)
14#endif
15#if (__ARM_NR_cacheflush & 0xff0000)
16 orr r7, r7, #(__ARM_NR_cacheflush & 0xff0000)
17#endif
18 swi 0
19 ldr r7, [sp], #4
20#else
21 /* OABI */
22 swi __ARM_NR_cacheflush
23#endif
24 bx lr
25
26
27#ifdef __ARM_EABI__
28#error hm?
29#endif
30
31.global g_syscall
32g_syscall:
33 mov r12, sp
34 stmfd sp!, {r4, r5, r6}
35 ldmia r12, {r4, r5, r6}
36 swi __NR_syscall
37 ldmfd sp!, {r4, r5, r6}
38
39.global g_syscall_error
40g_syscall_error:
41 cmn r0, #4096
42 bxcc lr
43 stmfd sp!, {r4, lr}
44 rsb r4, r0, #0
45 bl __errno_location
46 str r4, [r0]
47 mov r0, #-1
48 ldmfd sp!, {r4, pc}
49
50.global g_clone
51g_clone:
52 ldr r12,[sp, #4] @ arg6 - convenience func ptr
53 str r4, [sp, #-4]!
54 ldr r4, [sp, #4] @ arg5
55 swi __NR_clone
56 tst r0, r0
57 bxeq r12 @ child
58 cmn r0, #4096
59 ldr r4, [sp], #4
60 bcs g_syscall_error
61 bx lr
62
63@ raw - no errno
64.macro raw_syscall_easy name nr
65.global \name
66\name:
67 swi \nr
68 bx lr
69.endm
70
71.macro raw_syscall name nr
72.global \name
73\name:
74 mov r12, sp
75 stmfd sp!, {r4, r5, r6, lr}
76 ldmia r12, {r4, r5, r6}
77 swi \nr
b4f4cb40 78 ldmfd sp!, {r4, r5, r6, pc}
d0b9b0df 79.endm
80
81raw_syscall_easy g_open_raw, __NR_open
82raw_syscall_easy g_read_raw, __NR_read
83raw_syscall_easy g_write_raw, __NR_write
b4f4cb40 84raw_syscall g_mmap2_raw, __NR_mmap2
85raw_syscall_easy g_munmap_raw, __NR_munmap
86raw_syscall_easy g_ioctl_raw, __NR_ioctl
87raw_syscall_easy g_close_raw, __NR_close
88raw_syscall_easy g_chdir_raw, __NR_chdir
d0b9b0df 89raw_syscall_easy g_futex_raw, __NR_futex
90raw_syscall_easy g_nanosleep_raw, __NR_nanosleep
c3831532 91raw_syscall_easy g_readlink_raw, __NR_readlink
78684356 92raw_syscall_easy g_execve_raw, __NR_execve
d0b9b0df 93raw_syscall_easy g_clock_gettime_raw, __NR_clock_gettime
94raw_syscall_easy g_rt_sigprocmask_raw, __NR_rt_sigprocmask
b4f4cb40 95raw_syscall_easy g_exit_group_raw, __NR_exit_group