git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git://localhost/acess2
[tpg/acess2.git]
/
Usermode
/
Libraries
/
ld-acess.so_src
/
arch
/
armv7.S.h
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
85a3ac6
..
351c841
100644
(file)
--- a/
Usermode/Libraries/ld-acess.so_src/arch/armv7.S.h
+++ b/
Usermode/Libraries/ld-acess.so_src/arch/armv7.S.h
@@
-2,12
+2,11
@@
// Acess2 ARMv7 - System Calls
//
// Acess2 ARMv7 - System Calls
//
-#include "../../../../Kernel/include/syscalls.h"
-
.globl _start
.extern SoMain
_start:
pop {r0}
.globl _start
.extern SoMain
_start:
pop {r0}
+ ldm sp, {r1,r2,r3}
bl SoMain
mov r4, r0
bl SoMain
mov r4, r0
@@
-33,52
+32,60
@@
__ucmpdi2:
mov r0, #1
mov pc, lr
mov r0, #1
mov pc, lr
-@ DEST
-@ SRC
-@_memcpy:
-@ push rbp
-@ mov rbp, rsp
-@
-@ ; RDI - First Param
-@ ; RSI - Second Param
-@ mov rcx, rdx ; RDX - Third
-@ rep movsb
-@
-@ pop rbp
-@ ret
-@
+@ Well, can't blame it
+@ - Clear the instruction cache
+.globl __clear_cache
+__clear_cache:
+ svc #0x1001
+ mov pc, lr
+
+
+@ >r0: PC
+@ >r1: Pointer to item count
+@ <r0: Address
+@ STUBBED
+__gnu_Unwind_Find_exidx:
+ mov r0, #0
+ str r0, [r1]
+ mov pc, lr
+
+.section .data
.globl _errno
_errno: .long 0 @ Placed in .text, to allow use of relative addressing
.globl _errno
_errno: .long 0 @ Placed in .text, to allow use of relative addressing
+.section .text
.macro syscall0 _name, _num
.globl \_name
\_name:
.macro syscall0 _name, _num
.globl \_name
\_name:
+ push {lr}
svc #\_num
svc #\_num
- str r2, _errno
- mov pc, lr
+ @mrc p15, 0, r3, c13, c0, 2
+ ldr r3, =_errno
+ str r2, [r3]
+ pop {pc}
.endm
.macro syscall5 _name, _num
.globl \_name
\_name:
.endm
.macro syscall5 _name, _num
.globl \_name
\_name:
- push {r4}
- ldr r4, [sp,#
4
]
+ push {r4
, lr
}
+ ldr r4, [sp,#
8
]
svc #\_num
svc #\_num
-
str r2,
_errno
- pop {r4}
- mov pc, lr
+
ldr r3, =
_errno
+ str r2, [r3]
+ pop {r4, pc}
.endm
.macro syscall6 _name, _num
.globl \_name
\_name:
.endm
.macro syscall6 _name, _num
.globl \_name
\_name:
- push {r4,r5}
- ldr r4, [sp,#
8
]
- ldr r5, [sp,#1
2
]
+ push {r4,r5
,lr
}
+ ldr r4, [sp,#
12
]
+ ldr r5, [sp,#1
6
]
svc #\_num
svc #\_num
-
str r2,
_errno
- pop {r4,r5}
- mov pc, lr
+
ldr r3, =
_errno
+ str r2, [r3]
+ pop {r4,r5,pc}
.endm
#define SYSCALL0(_name,_num) syscall0 _name, _num
.endm
#define SYSCALL0(_name,_num) syscall0 _name, _num
@@
-93,16
+100,31
@@
_errno: .long 0 @ Placed in .text, to allow use of relative addressing
// Override the clone syscall
#define _exit _exit_raw
#define _clone _clone_raw
// Override the clone syscall
#define _exit _exit_raw
#define _clone _clone_raw
+#define _SysSeek _SysSeek_borken
#include "syscalls.s.h"
#undef _exit
#undef _clone
#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:
push {r4}
mov r4, r1
svc #SYS_CLONE
.globl _clone
_clone:
push {r4}
mov r4, r1
svc #SYS_CLONE
- str r2, _errno
+ ldr r3, =_errno
+ str r2, [r3]
tst r4, r4
beq _clone_ret
@ If in child, set SP
tst r4, r4
beq _clone_ret
@ If in child, set SP
@@
-112,6
+134,7
@@
_clone_ret:
pop {r4}
mov pc, lr
pop {r4}
mov pc, lr
+
.globl _exit
_exit:
svc #0
.globl _exit
_exit:
svc #0
UCC
git Repository :: git.ucc.asn.au