/*
 * 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 {
	uintptr_t reset;
	uintptr_t memory_error;
	uintptr_t instruction_error;
	uintptr_t ev_machine_check;
	uintptr_t ev_tlb_miss_i;
	uintptr_t ev_tlb_miss_d;
	uintptr_t ev_prot_v;
	uintptr_t ev_privilege_v;
	uintptr_t ev_swi;
	uintptr_t ev_trap;
	uintptr_t ev_extension;
	uintptr_t ev_div_zero;
	/* ev_dc_error is unused in ARCv3 and de-facto unused in ARCv2 as well */
	uintptr_t ev_dc_error;
	uintptr_t ev_maligned;
	uintptr_t unused_1;
	uintptr_t unused_2;
};

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