From d9534b3d6a8a481520befaa5d936b5d51ac8ba31 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Fri, 15 Nov 2019 14:59:14 +0100 Subject: [PATCH] soc: fix backtraces containing ROM functions esp_ptr_executable would return false for pointers to ROM, which would interrupt the backtrace. This makes ROM ranges recognized as executable. --- components/soc/esp32/include/soc/soc.h | 2 +- components/soc/esp32s2beta/include/soc/soc.h | 2 ++ components/soc/include/soc/soc_memory_layout.h | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/components/soc/esp32/include/soc/soc.h b/components/soc/esp32/include/soc/soc.h index 72527687f2..998baa2a86 100644 --- a/components/soc/esp32/include/soc/soc.h +++ b/components/soc/esp32/include/soc/soc.h @@ -240,7 +240,7 @@ #define SOC_IROM_LOW 0x400D0000 #define SOC_IROM_HIGH 0x40400000 #define SOC_IROM_MASK_LOW 0x40000000 -#define SOC_IROM_MASK_HIGH 0x40070000 +#define SOC_IROM_MASK_HIGH 0x40064F00 #define SOC_CACHE_PRO_LOW 0x40070000 #define SOC_CACHE_PRO_HIGH 0x40078000 #define SOC_CACHE_APP_LOW 0x40078000 diff --git a/components/soc/esp32s2beta/include/soc/soc.h b/components/soc/esp32s2beta/include/soc/soc.h index 52f0a42a85..515f8d643f 100644 --- a/components/soc/esp32s2beta/include/soc/soc.h +++ b/components/soc/esp32s2beta/include/soc/soc.h @@ -184,6 +184,8 @@ #define SOC_DROM_HIGH 0x3F400000 #define SOC_IROM_LOW 0x40080000 #define SOC_IROM_HIGH 0x40c00000 +#define SOC_IROM_MASK_LOW 0x40000000 +#define SOC_IROM_MASK_HIGH 0x4001A100 #define SOC_IRAM_LOW 0x40020000 #define SOC_IRAM_HIGH 0x40070000 #define SOC_DRAM_LOW 0x3FFB0000 diff --git a/components/soc/include/soc/soc_memory_layout.h b/components/soc/include/soc/soc_memory_layout.h index 75c8c7daa6..0146630ea3 100644 --- a/components/soc/include/soc/soc_memory_layout.h +++ b/components/soc/include/soc/soc_memory_layout.h @@ -155,6 +155,7 @@ inline static bool IRAM_ATTR esp_ptr_executable(const void *p) intptr_t ip = (intptr_t) p; return (ip >= SOC_IROM_LOW && ip < SOC_IROM_HIGH) || (ip >= SOC_IRAM_LOW && ip < SOC_IRAM_HIGH) + || (ip >= SOC_IROM_MASK_LOW && ip < SOC_IROM_MASK_HIGH) || (ip >= SOC_RTC_IRAM_LOW && ip < SOC_RTC_IRAM_HIGH); }