rt 0.19.1

A real-time operating system capable of full preemption
Documentation
@ vim:ft=arm

#include <rt/arch/pseudo.S>

#include <vic.S>

    .syntax unified
    .section .text.vector, "ax", %progbits
    .global vector
vector:

    /* On reset all exceptions are taken in arm mode, so the reset entry must
     * always be arm. */
    .arm
    .global reset_vector
    .type reset_vector, %function
reset_vector:
    ldr pc, =start

#ifdef __thumb__
    /* If compiling for thumb, we turn on the TE bit, so all exceptions will be
     * handled in thumb mode.
     * Each vector entry must always be 4 bytes, so explicitly align each entry
     * in case only one 16-bit instruction is used in the previous entry. */
    .thumb
#endif

    .global udf_vector
    .type udf_vector, %function
    .balign 4
udf_vector:
    ldr pc, =udf_handler

    .global svc_vector
    .type svc_vector, %function
    .balign 4
svc_vector:
    ldr pc, =rt_svc_handler

    .global prefetch_abt_vector
    .type prefetch_abt_vector, %function
    .balign 4
prefetch_abt_vector:
    ldr pc, =prefetch_abt_handler

    .global data_abt_vector
    .type data_abt_vector, %function
    .balign 4
data_abt_vector:
    ldr pc, =data_abt_handler

    .global reserved_vector
    .type reserved_vector, %function
    .balign 4
reserved_vector:
    bkpt

    .global irq_vector
    .type irq_vector, %function
    .balign 4
irq_vector:
    irq_handler

    /* NOTE: We don't enable FIQs, so we place the irq_handler sequence
     * directly in the vector, overlapping the FIQ entry. */