diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/arm/shared/include/start.h | 5 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/shared/start/start.S | 111 |
2 files changed, 61 insertions, 55 deletions
diff --git a/c/src/lib/libbsp/arm/shared/include/start.h b/c/src/lib/libbsp/arm/shared/include/start.h index 1ad8f0e797..5326365ff0 100644 --- a/c/src/lib/libbsp/arm/shared/include/start.h +++ b/c/src/lib/libbsp/arm/shared/include/start.h @@ -22,6 +22,11 @@ #ifndef ASM /** + * @brief System start entry. + */ + void start( void); + + /** * @brief Start entry hook 0. * * This hook will be called from the start entry code after all modes and diff --git a/c/src/lib/libbsp/arm/shared/start/start.S b/c/src/lib/libbsp/arm/shared/start/start.S index 2677222ffc..26e5c72747 100644 --- a/c/src/lib/libbsp/arm/shared/start/start.S +++ b/c/src/lib/libbsp/arm/shared/start/start.S @@ -27,14 +27,7 @@ /* Global symbols */ .globl start - -.globl Reset_Handler -.globl Undefined_Handler .globl SWI_Handler -.globl Prefetch_Handler -.globl Abort_Handler -.globl IRQ_Handler -.globl FIQ_Handler /* Program Status Register definitions */ @@ -49,9 +42,61 @@ .equ PSR_F, 0x40 .equ PSR_T, 0x20 +.section ".entry" + +/* + * This is the exception vector table and the pointers to the default + * exceptions handlers. + */ + +vector_block: + + ldr pc, handler_addr_reset + ldr pc, handler_addr_undef + ldr pc, handler_addr_swi + ldr pc, handler_addr_prefetch + ldr pc, handler_addr_abort + + /* Program signature checked by boot loader */ + .word 0xb8a06f58 + + ldr pc, handler_addr_irq + ldr pc, handler_addr_fiq + +handler_addr_reset: + + .word start + +handler_addr_undef: + + .word twiddle + +handler_addr_swi: + + .word twiddle + +handler_addr_prefetch: + + .word twiddle + +handler_addr_abort: + + .word twiddle + +handler_addr_reserved: + + .word twiddle + +handler_addr_irq: + + .word twiddle + +handler_addr_fiq: + + .word twiddle + /* Start entry */ -.section ".entry" start: /* @@ -112,7 +157,7 @@ start: * vectors and the pointers to the default exception handlers. */ - mov r0, #0 + ldr r0, =bsp_section_vector_start adr r1, vector_block ldmia r1!, {r2-r9} stmia r0!, {r2-r9} @@ -131,52 +176,8 @@ start: /* Spin forever */ -twiddle: - - b twiddle - -/* - * This is the exception vector table and the pointers to the default - * exceptions handlers. - */ - -vector_block: - - ldr pc, Reset_Handler - ldr pc, Undefined_Handler - ldr pc, SWI_Handler - ldr pc, Prefetch_Handler - ldr pc, Abort_Handler - nop - ldr pc, IRQ_Handler - ldr pc, FIQ_Handler - -Reset_Handler: - - b bsp_reset - -Undefined_Handler: - - b Undefined_Handler - SWI_Handler: - b SWI_Handler - -Prefetch_Handler: - - b Prefetch_Handler - -Abort_Handler: - - b Abort_Handler - - nop - -IRQ_Handler: - - b IRQ_Handler - -FIQ_Handler: +twiddle: - b FIQ_Handler + b twiddle |