Tested some exceptions; Added a simple panic function
Working exception handlers at the moment: - und - swi - data_abt Others not tested (yet)
This commit is contained in:
parent
b18437ba51
commit
c4bfb74eef
@ -32,3 +32,4 @@ extern "C" const char* itoa(uint32_t n) {
|
|||||||
return &string[0];
|
return &string[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
15
src/dbg.s
15
src/dbg.s
@ -1,3 +1,7 @@
|
|||||||
|
.data
|
||||||
|
panic_msg:
|
||||||
|
.string "=== PANIC : I'm afraid I have lost my towel"
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
.extern c_printk
|
.extern c_printk
|
||||||
@ -16,3 +20,14 @@ printk:
|
|||||||
|
|
||||||
pop {pc}
|
pop {pc}
|
||||||
|
|
||||||
|
/* TODO: to be implemented in a more useful way */
|
||||||
|
.global panic
|
||||||
|
panic:
|
||||||
|
cpsid if
|
||||||
|
|
||||||
|
ldr r0, =panic_msg
|
||||||
|
bl printkl
|
||||||
|
|
||||||
|
1:
|
||||||
|
wfi
|
||||||
|
b 1b
|
||||||
|
13
src/vectab.s
13
src/vectab.s
@ -1,3 +1,6 @@
|
|||||||
|
/*
|
||||||
|
ARM System Developer's Guide, Chapter 9 Section 1 (y. 2004-2008) (page 323)
|
||||||
|
*/
|
||||||
.data
|
.data
|
||||||
und_msg:
|
und_msg:
|
||||||
.string "Undefined Instruction"
|
.string "Undefined Instruction"
|
||||||
@ -16,7 +19,7 @@ fiq_msg:
|
|||||||
.align 4
|
.align 4
|
||||||
.global vectab
|
.global vectab
|
||||||
vectab:
|
vectab:
|
||||||
b _start
|
ldr pc, =panic
|
||||||
ldr pc, =und_handler
|
ldr pc, =und_handler
|
||||||
ldr pc, =swi_handler
|
ldr pc, =swi_handler
|
||||||
ldr pc, =prefetch_abt_handler
|
ldr pc, =prefetch_abt_handler
|
||||||
@ -25,12 +28,11 @@ vectab:
|
|||||||
ldr pc, =irq_handler
|
ldr pc, =irq_handler
|
||||||
ldr pc, =fiq_handler
|
ldr pc, =fiq_handler
|
||||||
|
|
||||||
// TODO: untested
|
|
||||||
und_handler:
|
und_handler:
|
||||||
stmfd sp!, {lr}
|
stmfd sp!, {lr}
|
||||||
|
|
||||||
ldr r0, =und_msg
|
ldr r0, =und_msg
|
||||||
bl printk
|
bl printkl
|
||||||
|
|
||||||
ldmfd sp!, {pc}^
|
ldmfd sp!, {pc}^
|
||||||
|
|
||||||
@ -44,6 +46,7 @@ swi_handler:
|
|||||||
|
|
||||||
// TODO: untested
|
// TODO: untested
|
||||||
prefetch_abt_handler:
|
prefetch_abt_handler:
|
||||||
|
sub lr, #4
|
||||||
stmfd sp!, {lr}
|
stmfd sp!, {lr}
|
||||||
|
|
||||||
ldr r0, =prefetch_abt_msg
|
ldr r0, =prefetch_abt_msg
|
||||||
@ -51,13 +54,15 @@ prefetch_abt_handler:
|
|||||||
|
|
||||||
ldmfd sp!, {pc}^
|
ldmfd sp!, {pc}^
|
||||||
|
|
||||||
// TODO: untested
|
|
||||||
data_abt_handler:
|
data_abt_handler:
|
||||||
|
sub lr, #8
|
||||||
stmfd sp!, {lr}
|
stmfd sp!, {lr}
|
||||||
|
|
||||||
ldr r0, =data_abt_msg
|
ldr r0, =data_abt_msg
|
||||||
bl printkl
|
bl printkl
|
||||||
|
|
||||||
|
b panic
|
||||||
|
|
||||||
ldmfd sp!, {pc}^
|
ldmfd sp!, {pc}^
|
||||||
|
|
||||||
// TODO: untested
|
// TODO: untested
|
||||||
|
Loading…
Reference in New Issue
Block a user