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
Kernel/armv7 - Fixed error messages having invalid addresses
[tpg/acess2.git]
/
Kernel
/
arch
/
armv7
/
start.S
diff --git
a/Kernel/arch/armv7/start.S
b/Kernel/arch/armv7/start.S
index
ef6ac76
..
2d3f81a
100644
(file)
--- a/
Kernel/arch/armv7/start.S
+++ b/
Kernel/arch/armv7/start.S
@@
-68,14
+68,17
@@
_ptr_kmain:
.extern SyscallHandler
SVC_Handler:
@ sub lr, #4
.extern SyscallHandler
SVC_Handler:
@ sub lr, #4
- srsdb sp!, #19 @ S
witch to supervisor mode (DDI0406B D1.6.5) (actually SRSFD)
- cpsi
d ifa, #19
+ srsdb sp!, #19 @ S
ave state to stack
+ cpsi
e ifa, #19 @ Ensure we're in supervisor with interrupts enabled (should already be there)
push {r0-r12}
ldr r4, [lr,#-4]
mvn r5, #0xFF000000
and r4, r5
push {r0-r12}
ldr r4, [lr,#-4]
mvn r5, #0xFF000000
and r4, r5
+ tst r4, #0x1000
+ bne .arm_specifics
+
push {r4}
mov r0, sp
push {r4}
mov r0, sp
@@
-88,6
+91,18
@@
SVC_Handler:
pop {r4-r12}
rfeia sp! @ Pop state (actually RFEFD)
pop {r4-r12}
rfeia sp! @ Pop state (actually RFEFD)
+.arm_specifics:
+ and r4, #0xFF
+ mov r0, r4 @ Number
+ mov r1, sp @ Arguments
+
+ ldr r4, =ARMv7_int_HandleSyscalls
+ blx r4
+
+ add sp, #4*4
+ pop {r4-r12}
+ rfeia sp!
+
.globl gpIRQHandler
gpIRQHandler: .long 0
.globl gpIRQHandler
gpIRQHandler: .long 0
@@
-135,7
+150,6
@@
DataAbort:
@ POP_GPRS
@ rfeia sp! @ Pop state (actually RFEFD)
@ POP_GPRS
@ rfeia sp! @ Pop state (actually RFEFD)
- bx lr
.globl PrefetchAbort
PrefetchAbort:
.globl PrefetchAbort
PrefetchAbort:
@@
-152,6
+166,7
@@
PrefetchAbort:
blx r4
b .
blx r4
b .
+.section .rodata
csIRQ_Tag:
csAbort_Tag:
.asciz "ARMv7"
csIRQ_Tag:
csAbort_Tag:
.asciz "ARMv7"
UCC
git Repository :: git.ucc.asn.au