/*
 * Copyright (c) 2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file
 * @brief Populated exception vector table
 *
 * Vector table with exceptions filled in. The reset vector is the system entry
 * point, ie. the first instruction executed.
 *
 * The table is populated with all the system exception handlers. No exception
 * should not be triggered until the kernel is ready to handle them.
 *
 * We are using a C file instead of an assembly file (like the ARM vector table)
 * to work around an issue with the assembler where:
 *
 *   .word <function>
 *
 * statements would end up with the two half-words of the functions' addresses
 * swapped.
 */

#include <zephyr/types.h>
#include <toolchain.h>
#include "vector_table.h"

struct vector_table {
	u32_t reset;
	u32_t memory_error;
	u32_t instruction_error;
	u32_t ev_machine_check;
	u32_t ev_tlb_miss_i;
	u32_t ev_tlb_miss_d;
	u32_t ev_prot_v;
	u32_t ev_privilege_v;
	u32_t ev_swi;
	u32_t ev_trap;
	u32_t ev_extension;
	u32_t ev_div_zero;
	u32_t ev_dc_error;
	u32_t ev_maligned;
	u32_t unused_1;
	u32_t unused_2;
};

struct vector_table _VectorTable Z_GENERIC_SECTION(.exc_vector_table) = {
	(u32_t)__reset,
	(u32_t)__memory_error,
	(u32_t)__instruction_error,
	(u32_t)__ev_machine_check,
	(u32_t)__ev_tlb_miss_i,
	(u32_t)__ev_tlb_miss_d,
	(u32_t)__ev_prot_v,
	(u32_t)__ev_privilege_v,
	(u32_t)__ev_swi,
	(u32_t)__ev_trap,
	(u32_t)__ev_extension,
	(u32_t)__ev_div_zero,
	(u32_t)__ev_dc_error,
	(u32_t)__ev_maligned,
	0,
	0
};

