diff --git a/arch/Kconfig b/arch/Kconfig index 944bb959fb7..62d50f62bd3 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -408,6 +408,16 @@ config GEN_IRQ_VECTOR_TABLE indexed by IRQ line. In the latter case, the vector table must be supplied by the application or architecture code. +config ARCH_IRQ_VECTOR_TABLE_ALIGN + int "Alignment size of the interrupt vector table" + default 0 + depends on GEN_IRQ_VECTOR_TABLE + help + This option controls alignment size of generated + _irq_vector_table. Some architecture needs an IRQ vector table + to be aligned to architecture specific size. The default + size is 0 for no alignment. + config GEN_SW_ISR_TABLE bool "Generate a software ISR table" default y diff --git a/arch/common/CMakeLists.txt b/arch/common/CMakeLists.txt index a83fe44a884..5c7dd0ea53e 100644 --- a/arch/common/CMakeLists.txt +++ b/arch/common/CMakeLists.txt @@ -24,6 +24,12 @@ zephyr_linker_sources_ifdef(CONFIG_GEN_ISR_TABLES ${ZEPHYR_BASE}/include/zephyr/linker/intlist.ld ) +zephyr_linker_sources_ifdef(CONFIG_GEN_IRQ_VECTOR_TABLE + ROM_START + SORT_KEY 0x0vectors + ${ZEPHYR_BASE}/include/zephyr/linker/irq-vector-table-section.ld +) + if(CONFIG_GEN_ISR_TABLES) zephyr_linker_section(NAME .intList VMA IDT_LIST LMA IDT_LIST NOINPUT PASS NOT LINKER_ZEPHYR_FINAL) zephyr_linker_section_configure(SECTION .intList KEEP INPUT ".irq_info" FIRST) diff --git a/include/zephyr/linker/irq-vector-table-section.ld b/include/zephyr/linker/irq-vector-table-section.ld new file mode 100644 index 00000000000..6a07abc34e2 --- /dev/null +++ b/include/zephyr/linker/irq-vector-table-section.ld @@ -0,0 +1,4 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +. = ALIGN(CONFIG_ARCH_IRQ_VECTOR_TABLE_ALIGN); +KEEP(*(_IRQ_VECTOR_TABLE_SECTION_SYMS))