zephyr/arch/arc/core/vector_table.c
Evgeniy Paltsev 3f12ca57b8 ARC: make vector table bit agnostic
ARCv2 32 bit and ARCv3 64 bit share the same vector table
structure but with different vector entry size (32 and 64 bit),
so we can easily make vector table bit agnostic.

Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Evgeniy Paltsev <PaltsevEvgeniy@gmail.com>
2021-05-07 14:55:49 -05:00

68 lines
1.7 KiB
C

/*
* 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
};