/* Setup vector table. Note that undf, pabt, dabt, fiq just execute
a null loop. */
+#include <bbconf_info.h>
+
+.global __bbconf_magic_addr
+.global __bbconf_ptptr_addr
+.global __bbconf_pt_addr
+
.section .ivt,"ax"
.code 32
.align 0
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP /* Reserved Vector */
+#if !defined(__thumb__)
LDR PC, IRQ_Addr
+#else
+ B IRQ_Trampoline
+#endif
LDR PC, FIQ_Addr
Reset_Addr: .word reset_handler
IRQ_Addr: .word irq_handler_resolver
FIQ_Addr: .word FIQ_Handler
+__bbconf_magic_addr:
+ .word BBCONF_MAGIC_VAL
+__bbconf_ptptr_addr:
+ .word __bbconf_pt_addr
+
Undef_Handler: B Undef_Handler
SWI_Handler: B SWI_Handler
PAbt_Handler: B PAbt_Handler
DAbt_Handler: B DAbt_Handler
FIQ_Handler: B FIQ_Handler
+#if defined(__thumb__)
+IRQ_Trampoline:
+ sub lr, lr, #4
+ push {r0, r1, r2, r3, r4, ip, lr}
+ ldr r1, IRQ_Addr
+ adr lr, IRQ_Trampoline_ret
+ tst r1,#1
+ adrne lr, IRQ_Trampoline_ret_thumb+1
+ bx r1
+IRQ_Trampoline_ret_thumb:
+ .code 16
+ bx pc
+ nop
+ .code 32
+IRQ_Trampoline_ret:
+ ldm sp!, {r0, r1, r2, r3, r4, ip, pc}^
+#endif
+
.end