From 9a36ced2944deacc729aa9d627716a1a71fdb1ba Mon Sep 17 00:00:00 2001 From: Omar Chebib Date: Thu, 30 Dec 2021 13:11:11 +0800 Subject: [PATCH] espcoredump: add a test for coredump dumped sections --- components/espcoredump/test/test_sections.c | 60 +++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 components/espcoredump/test/test_sections.c diff --git a/components/espcoredump/test/test_sections.c b/components/espcoredump/test/test_sections.c new file mode 100644 index 0000000000..9b27669413 --- /dev/null +++ b/components/espcoredump/test/test_sections.c @@ -0,0 +1,60 @@ +/* + * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include "unity.h" +#include "esp_attr.h" + +/* Global variables that should be part of the coredump */ +COREDUMP_IRAM_DATA_ATTR uint32_t var_iram = 0x42; +COREDUMP_DRAM_ATTR uint32_t var_dram = 0x43; +COREDUMP_RTC_DATA_ATTR uint32_t var_rtc = 0x44; +COREDUMP_RTC_FAST_ATTR uint32_t var_rtcfast = 0x45; + +/* Memory regions to dump, defined at compile time. */ +extern int _coredump_dram_start; +extern int _coredump_dram_end; +extern int _coredump_iram_start; +extern int _coredump_iram_end; +extern int _coredump_rtc_start; +extern int _coredump_rtc_end; +extern int _coredump_rtc_fast_start; +extern int _coredump_rtc_fast_end; + +static inline bool is_addr_in_region(void* addr, uint8_t* region, int region_size) +{ + const void* start = (void*) region; + const void* end = (void*) (region + region_size); + return addr >= start && addr < end; +} + +TEST_CASE("test variables presence in core dump sections", "[espcoredump]") +{ + uint32_t section_start = 0; + uint32_t section_size = 0; + + /* Check DRAM coredump section */ + section_start = (uint32_t)&_coredump_dram_start; + section_size = (uint8_t *)&_coredump_dram_end - (uint8_t *)&_coredump_dram_start; + TEST_ASSERT(section_size > 0); + TEST_ASSERT(is_addr_in_region(&var_dram, (uint8_t*) section_start, section_size)); +#if IRAM_8BIT_ACCESSIBLE + /* Check IRAM coredump section */ + section_start = (uint32_t)&_coredump_iram_start; + section_size = (uint8_t *)&_coredump_iram_end - (uint8_t *)&_coredump_iram_start; + TEST_ASSERT(section_size > 0); + TEST_ASSERT(is_addr_in_region(&var_iram, (uint8_t*) section_start, section_size)); +#endif + /* Check RTC coredump section */ + section_start = (uint32_t)&_coredump_rtc_start; + section_size = (uint8_t *)&_coredump_rtc_end - (uint8_t *)&_coredump_rtc_start; + TEST_ASSERT(section_size > 0); + TEST_ASSERT(is_addr_in_region(&var_rtc, (uint8_t*) section_start, section_size)); + /* Check RTC Fast coredump section */ + section_start = (uint32_t)&_coredump_rtc_fast_start; + section_size = (uint8_t *)&_coredump_rtc_fast_end - (uint8_t *)&_coredump_rtc_fast_start; + TEST_ASSERT(section_size > 0); + TEST_ASSERT(is_addr_in_region(&var_rtcfast, (uint8_t*) section_start, section_size)); +}