mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
359af26736
It seems gcc is not producing debug information for sections which are not properly marked as "ax", resulting in missing debug info for _vector_table, _interrupt_handler and _panic_handler. This can be verified e.g. with readelf --debug=info ./build/esp-idf/riscv/CMakeFiles/__idf_riscv.dir/vectors.S.obj readelf -SW ./build/esp-idf/riscv/CMakeFiles/__idf_riscv.dir/vectors.S.obj for hello_world example on esp32c3 target. Mark the .exception_vectors.text and .exception_vectors_table.text sections as writable and allocatable so the debug info sections are generated. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
91 lines
3.9 KiB
ArmAsm
91 lines
3.9 KiB
ArmAsm
/*
|
|
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
#include "sdkconfig.h"
|
|
#include "soc/soc.h"
|
|
|
|
#if ETS_INT_WDT_INUM != 24
|
|
#error "ETS_INT_WDT_INUM expected to be 24"
|
|
#endif
|
|
|
|
/* If memory protection interrupts are meant to trigger a panic, attach them to panic handler,
|
|
* else, attach them to the interrupt handler. */
|
|
#if CONFIG_ESP_SYSTEM_MEMPROT_FEATURE
|
|
#define MEMPROT_ISR _panic_handler
|
|
#else
|
|
#define MEMPROT_ISR _interrupt_handler
|
|
#endif // CONFIG_ESP_SYSTEM_MEMPROT_FEATURE
|
|
|
|
/* Same goes for the assist debug interrupt */
|
|
#if CONFIG_ESP_SYSTEM_HW_STACK_GUARD
|
|
#define ASTDBG_ISR _panic_handler
|
|
#else
|
|
#define ASTDBG_ISR _interrupt_handler
|
|
#endif // CONFIG_ESP_SYSTEM_HW_STACK_GUARD
|
|
|
|
|
|
/* Handlers defined in the `vector.S` file, common to all RISC-V targets */
|
|
.global _interrupt_handler
|
|
.global _panic_handler
|
|
|
|
.section .exception_vectors_table.text, "ax"
|
|
|
|
/* This is the vector table. MTVEC points here.
|
|
*
|
|
* Use 4-byte instructions here. 1 instruction = 1 entry of the table.
|
|
* The CPU jumps to MTVEC (i.e. the first entry) in case of an exception,
|
|
* and (MTVEC & 0xfffffffc) + (mcause & 0x7fffffff) * 4, in case of an interrupt.
|
|
*
|
|
* Note: for our CPU, we need to place this on a 256-byte boundary, as CPU
|
|
* only uses the 24 MSBs of the MTVEC, i.e. (MTVEC & 0xffffff00).
|
|
*/
|
|
.balign 0x100
|
|
|
|
/* Since each entry must take 4-byte, let's temporarily disable the compressed
|
|
* instruction set that could potentially generate 2-byte instructions. */
|
|
.option push
|
|
.option norvc
|
|
|
|
.global _vector_table
|
|
.type _vector_table, @function
|
|
_vector_table:
|
|
j _panic_handler /* 0: Exception entry */
|
|
j _interrupt_handler /* 1: Free interrupt number */
|
|
j _interrupt_handler /* 2: Free interrupt number */
|
|
j _interrupt_handler /* 3: Free interrupt number */
|
|
j _interrupt_handler /* 4: Free interrupt number */
|
|
j _interrupt_handler /* 5: Free interrupt number */
|
|
j _interrupt_handler /* 6: Free interrupt number */
|
|
j _interrupt_handler /* 7: Free interrupt number */
|
|
j _interrupt_handler /* 8: Free interrupt number */
|
|
j _interrupt_handler /* 9: Free interrupt number */
|
|
j _interrupt_handler /* 10: Free interrupt number */
|
|
j _interrupt_handler /* 11: Free interrupt number */
|
|
j _interrupt_handler /* 12: Free interrupt number */
|
|
j _interrupt_handler /* 13: Free interrupt number */
|
|
j _interrupt_handler /* 14: Free interrupt number */
|
|
j _interrupt_handler /* 15: Free interrupt number */
|
|
j _interrupt_handler /* 16: Free interrupt number */
|
|
j _interrupt_handler /* 17: Free interrupt number */
|
|
j _interrupt_handler /* 18: Free interrupt number */
|
|
j _interrupt_handler /* 19: Free interrupt number */
|
|
j _interrupt_handler /* 20: Free interrupt number */
|
|
j _interrupt_handler /* 21: Free interrupt number */
|
|
j _interrupt_handler /* 22: Free interrupt number */
|
|
j _interrupt_handler /* 23: Free interrupt number */
|
|
j _panic_handler /* 24: ETS_INT_WDT_INUM panic-interrupt (soc-level panic) */
|
|
j _panic_handler /* 25: ETS_CACHEERR_INUM panic-interrupt (soc-level panic) */
|
|
j MEMPROT_ISR /* 26: ETS_MEMPROT_ERR_INUM handler (soc-level panic) */
|
|
j ASTDBG_ISR /* 27: ETS_ASSIST_DEBUG_INUM handler (soc-level panic) */
|
|
j _interrupt_handler /* 28: Free interrupt number */
|
|
j _interrupt_handler /* 29: Free interrupt number */
|
|
j _interrupt_handler /* 30: Free interrupt number */
|
|
j _interrupt_handler /* 31: Free interrupt number */
|
|
|
|
.size _vector_table, .-_vector_table
|
|
|
|
/* Re-enable the compressed instruction set it is was enabled before */
|
|
.option pop
|