_interrupt_vectors: b reset_handler_caller b undef_handler_caller b svc_handler_caller b abort_handler_caller b abort_handler_caller b generic_handler_caller b irq_handler_caller b fiq_handler_caller // from what I've heard, reset is never used on the Pi; // in our case it should run once - when stage1 of the kernel // jumps to stage2 reset_handler_caller: ldr sp, =_supervisor_stack_top ldr r5, =setup bx r5 undef_handler_caller: ldr sp, =_supervisor_stack_top ldr r5, =undefined_instruction_vector bx r5 svc_handler_caller: ldr sp, =_supervisor_stack_top push {r0-r12, lr} mov r0, sp ldr r5, =supervisor_call_handler blx r5 ldm sp!, {r0-r12, pc} ^ abort_handler_caller: ldr sp, =_supervisor_stack_top ldr r5, =abort_handler bx r5 generic_handler_caller: ldr sp, =_supervisor_stack_top ldr r5, =generic_handler bx r5 irq_handler_caller: ldr sp, =_irq_stack_top sub lr, #4 push {r0-r12, lr} mov r0, sp ldr r3, =irq_handler blx r3 ldm sp!, {r0-r12, pc} ^ fiq_handler_caller: ldr sp, =_fiq_stack_top ldr r5, =fiq_handler bx r5 irq: mov sp, #0x8000 ldr r5, =abort_handler subs pc,lr,#4