ARM7TDMI: add sections for exception handlers.
[bertos.git] / bertos / cpu / arm / hw / crt_arm7tdmi.S
index ca2e968cee388ead8f196dc522bfe28a4a432aea..bf80e7e3f43cfc0c11888e7d751564bd874ee205 100644 (file)
@@ -67,8 +67,8 @@ __init0:
         ldr     r0, =__stack_und_end
         msr     CPSR_c, #ARM_MODE_UNDEF | IRQ_BIT | FIQ_BIT
         mov     r13, r0
-        ldr     r0, =__stack_sys_end
-        msr     CPSR_c, #ARM_MODE_SYS | IRQ_BIT | FIQ_BIT
+        ldr     r0, =__stack_svc_end
+        msr     CPSR_c, #ARM_MODE_SVC | IRQ_BIT | FIQ_BIT
         mov     r13, r0
 
        /*
@@ -121,32 +121,72 @@ end:
 __dummy_init:
        mov     pc, lr
 
-__xcpt_dummy_undef:
-        b       __xcpt_dummy_undef
-
-__xcpt_dummy_swi:
-        b       __xcpt_dummy_swi
-
-__xcpt_dummy_pref:
-        b       __xcpt_dummy_pref
-
-__xcpt_dummy_dab:
-        b       __xcpt_dummy_dab
+       /*
+        * Redefine your own __init() in order to supply
+        * a completely custom initialization routine.
+        */
+        .weak   __init
+        .set    __init, __init0
 
+       /*
+        * Redefine your own __init1() in order to supply
+        * an hardware initialization routine.
+        * Remember that __init1() is called *before*
+        * clearing .bss and loading .data sections.
+        */
         .weak   __init1
         .set    __init1, __dummy_init
+
+       /*
+        * Redefine your own __init2() in order to supply
+        * an hardware initialization routine.
+        * Remember that __init2() is called *after*
+        * clearing .bss and loading .data sections, just
+        * before calling main().
+        */
         .weak   __init2
         .set    __init2, __dummy_init
 
-        .weak   __init
-        .set    __init, __init0
+       /*
+        * Redefine your own __undef() in order to supply
+        * a custom handler for undefined instruction exception.
+        */
         .weak   __undef
         .set    __undef, __xcpt_dummy_undef
+
+       /*
+        * Redefine your own __swi() in order to supply
+        * a custom handler for software interrupt exception.
+        */
         .weak   __swi
         .set    __swi, __xcpt_dummy_swi
+
+       /*
+        * Redefine your own __prefetch_abort() in order to supply
+        * a custom handler for prefetch abort exception.
+        */
         .weak   __prefetch_abort
         .set    __prefetch_abort, __xcpt_dummy_pref
+
+       /*
+        * Redefine your own __data_abort() in order to supply
+        * a custom handler for data abort exception.
+        */
         .weak   __data_abort
         .set    __data_abort, __xcpt_dummy_dab
 
         .ltorg
+
+       .section .exceptions, "ax", %progbits
+
+__xcpt_dummy_undef:
+        b       __xcpt_dummy_undef
+
+__xcpt_dummy_swi:
+        b       __xcpt_dummy_swi
+
+__xcpt_dummy_pref:
+        b       __xcpt_dummy_pref
+
+__xcpt_dummy_dab:
+        b       __xcpt_dummy_dab