From 37a8ff9040cff7bc450ec0a66e7e4c929f0b49e8 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 25 Nov 2019 23:14:41 +0100 Subject: [PATCH] core dump: only get EPC/EPS registers up to XCHAL_NUM_INTLEVELS --- components/espcoredump/src/core_dump_port.c | 32 ++++++++++++--------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/components/espcoredump/src/core_dump_port.c b/components/espcoredump/src/core_dump_port.c index 1424a3fe6f..e4fa5ca63a 100644 --- a/components/espcoredump/src/core_dump_port.c +++ b/components/espcoredump/src/core_dump_port.c @@ -31,6 +31,12 @@ const static DRAM_ATTR char TAG[] __attribute__((unused)) = "esp_core_dump_port" RSR(reg_idx, *(uint32_t*)(reg_ptr++)); \ } +#define COREDUMP_GET_EPC(reg, ptr) \ + if (reg - EPC_1 + 1 <= XCHAL_NUM_INTLEVELS) COREDUMP_GET_REG_PAIR(reg, ptr) + +#define COREDUMP_GET_EPS(reg, ptr) \ + if (reg - EPS_2 + 2 <= XCHAL_NUM_INTLEVELS) COREDUMP_GET_REG_PAIR(reg, ptr) + // Enumeration of registers of exception stack frame // and solicited stack frame typedef enum @@ -313,13 +319,13 @@ static core_dump_reg_pair_t *esp_core_dump_get_epc_regs(core_dump_reg_pair_t* sr { uint32_t* reg_ptr = (uint32_t*)src; // get InterruptException program counter registers - COREDUMP_GET_REG_PAIR(EPC_1, reg_ptr); - COREDUMP_GET_REG_PAIR(EPC_2, reg_ptr); - COREDUMP_GET_REG_PAIR(EPC_3, reg_ptr); - COREDUMP_GET_REG_PAIR(EPC_4, reg_ptr); - COREDUMP_GET_REG_PAIR(EPC_5, reg_ptr); - COREDUMP_GET_REG_PAIR(EPC_6, reg_ptr); - COREDUMP_GET_REG_PAIR(EPC_7, reg_ptr); + COREDUMP_GET_EPC(EPC_1, reg_ptr); + COREDUMP_GET_EPC(EPC_2, reg_ptr); + COREDUMP_GET_EPC(EPC_3, reg_ptr); + COREDUMP_GET_EPC(EPC_4, reg_ptr); + COREDUMP_GET_EPC(EPC_5, reg_ptr); + COREDUMP_GET_EPC(EPC_6, reg_ptr); + COREDUMP_GET_EPC(EPC_7, reg_ptr); return (core_dump_reg_pair_t*)reg_ptr; } @@ -327,12 +333,12 @@ static core_dump_reg_pair_t *esp_core_dump_get_eps_regs(core_dump_reg_pair_t* sr { uint32_t* reg_ptr = (uint32_t*)src; // get InterruptException processor state registers - COREDUMP_GET_REG_PAIR(EPS_2, reg_ptr); - COREDUMP_GET_REG_PAIR(EPS_3, reg_ptr); - COREDUMP_GET_REG_PAIR(EPS_4, reg_ptr); - COREDUMP_GET_REG_PAIR(EPS_5, reg_ptr); - COREDUMP_GET_REG_PAIR(EPS_6, reg_ptr); - COREDUMP_GET_REG_PAIR(EPS_7, reg_ptr); + COREDUMP_GET_EPS(EPS_2, reg_ptr); + COREDUMP_GET_EPS(EPS_3, reg_ptr); + COREDUMP_GET_EPS(EPS_4, reg_ptr); + COREDUMP_GET_EPS(EPS_5, reg_ptr); + COREDUMP_GET_EPS(EPS_6, reg_ptr); + COREDUMP_GET_EPS(EPS_7, reg_ptr); return (core_dump_reg_pair_t*)reg_ptr; }