From 5fce7f4a41d167be95b3f0dd6a6d3dd9412c8ac8 Mon Sep 17 00:00:00 2001 From: Renz Bagaporo Date: Tue, 26 Jan 2021 10:48:12 +0800 Subject: [PATCH] esp_common: move dbg_stubs --- components/esp_common/CMakeLists.txt | 4 - components/esp_common/Kconfig | 8 -- components/esp_common/src/dbg_stubs.c | 95 ------------------- components/esp_system/CMakeLists.txt | 24 +++-- components/esp_system/Kconfig | 9 ++ .../include/esp_private/dbg_stubs.h | 8 ++ components/esp_system/sdkconfig.rename | 1 + 7 files changed, 34 insertions(+), 115 deletions(-) delete mode 100644 components/esp_common/src/dbg_stubs.c rename components/{esp_common => esp_system}/include/esp_private/dbg_stubs.h (95%) diff --git a/components/esp_common/CMakeLists.txt b/components/esp_common/CMakeLists.txt index 7818a4b6a8..c93f3e5310 100644 --- a/components/esp_common/CMakeLists.txt +++ b/components/esp_common/CMakeLists.txt @@ -17,10 +17,6 @@ else() "src/task_wdt.c" "src/int_wdt.c") - if(NOT CONFIG_IDF_TARGET_ESP32C3) - list(APPEND srcs "src/dbg_stubs.c") - endif() - # Note: esp_ipc, esp_pm added as a public requirement to keep compatibility as to be located here. idf_component_register(SRCS "${srcs}" INCLUDE_DIRS include diff --git a/components/esp_common/Kconfig b/components/esp_common/Kconfig index d7aabd92d8..88d983ecfc 100644 --- a/components/esp_common/Kconfig +++ b/components/esp_common/Kconfig @@ -278,14 +278,6 @@ menu "Common ESP-related" complex issues with crashes while flash cache is disabled (for example, when writing to SPI flash.) - config ESP_DEBUG_STUBS_ENABLE - bool - default COMPILER_OPTIMIZATION_LEVEL_DEBUG - depends on !ESP32_TRAX && !ESP32S2_TRAX - help - Debug stubs are used by OpenOCD to execute pre-compiled onboard code - which does some useful debugging stuff, e.g. GCOV data dump. - config ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY # Invisible option that is set by SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY, but # exists even if SPIRAM is not supported diff --git a/components/esp_common/src/dbg_stubs.c b/components/esp_common/src/dbg_stubs.c deleted file mode 100644 index 1ee9124897..0000000000 --- a/components/esp_common/src/dbg_stubs.c +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2017 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// This module implements debug/trace stubs. The stub is a piece of special code which can invoked by OpenOCD -// Currently one stub is used for GCOV functionality -// - -#include "eri.h" -#include "xtensa-debug-module.h" -#include "esp_private/dbg_stubs.h" -#include "esp_attr.h" - -#if CONFIG_ESP_DEBUG_STUBS_ENABLE -/* - Debug stubs is actually a table of 4-byte entries. Every entry is equal to zero or must contain meaningfull data. - The first entry is a service one and has the followinf format: - - tramp_addr, 4 bytes; Address of buffer for trampoline/code. Max size is ESP_DBG_STUBS_CODE_BUF_SIZE. - - min_stack_addr, 4 bytes; Start of the buffer for minimal onboard stack or data. Max size is ESP_DBG_STUBS_STACK_MIN_SIZE. - - data_alloc, 4 bytes; Address of function to allocate memory on target. - - data_free, 4 bytes; Address of function to free target memory. - This entry is used by OpenOCD code to invoke other stub entries and allocate memory for them. - */ - -#define LOG_LOCAL_LEVEL CONFIG_LOG_DEFAULT_LEVEL -#include "esp_log.h" -const static char *TAG = "esp_dbg_stubs"; - -#define ESP_DBG_STUBS_TRAX_REG ERI_TRAX_TRIGGERPC -#define ESP_DBG_STUBS_CODE_BUF_SIZE 32 -#define ESP_DBG_STUBS_STACK_MIN_SIZE 2048 - -#define DBG_STUB_TRAMP_ATTR IRAM_ATTR - -static struct { - uint32_t tramp_addr; - uint32_t min_stack_addr; // minimal stack addr - uint32_t data_alloc; - uint32_t data_free; -} s_dbg_stubs_ctl_data; - -static uint32_t s_stub_entry[ESP_DBG_STUB_ENTRY_MAX]; -static uint8_t s_stub_min_stack[ESP_DBG_STUBS_STACK_MIN_SIZE]; -static DBG_STUB_TRAMP_ATTR uint8_t s_stub_code_buf[ESP_DBG_STUBS_CODE_BUF_SIZE]; - -// TODO: all called funcs should be in IRAM to work with disabled flash cache -static void * esp_dbg_stubs_data_alloc(uint32_t size) -{ - ESP_LOGV(TAG, "%s %d", __func__, size); - void *p = malloc(size); - ESP_LOGV(TAG, "%s EXIT %p", __func__, p); - return p; -} - -static void esp_dbg_stubs_data_free(void *addr) -{ - ESP_LOGV(TAG, "%s %p", __func__, addr); - free(addr); - ESP_LOGV(TAG, "%s EXIT %p", __func__, addr); -} - -void esp_dbg_stubs_init(void) -{ - s_dbg_stubs_ctl_data.tramp_addr = (uint32_t)s_stub_code_buf; - s_dbg_stubs_ctl_data.min_stack_addr = (uint32_t)s_stub_min_stack; - s_dbg_stubs_ctl_data.data_alloc = (uint32_t)esp_dbg_stubs_data_alloc; - s_dbg_stubs_ctl_data.data_free = (uint32_t)esp_dbg_stubs_data_free; - - s_stub_entry[ESP_DBG_STUB_CONTROL_DATA] = (uint32_t)&s_dbg_stubs_ctl_data; - eri_write(ESP_DBG_STUBS_TRAX_REG, (uint32_t)s_stub_entry); - ESP_LOGV(TAG, "%s stubs %x", __func__, eri_read(ESP_DBG_STUBS_TRAX_REG)); -} - -esp_err_t esp_dbg_stub_entry_set(esp_dbg_stub_id_t id, uint32_t entry) -{ - if (id < ESP_DBG_STUB_ENTRY_FIRST || id >= ESP_DBG_STUB_ENTRY_MAX) { - ESP_LOGE(TAG, "Invalid stub id %d!", id); - return ESP_ERR_INVALID_ARG; - } - s_stub_entry[id] = entry; - - return ESP_OK; -} - -#endif diff --git a/components/esp_system/CMakeLists.txt b/components/esp_system/CMakeLists.txt index f6e9d7b8a2..ba06c0df28 100644 --- a/components/esp_system/CMakeLists.txt +++ b/components/esp_system/CMakeLists.txt @@ -4,13 +4,21 @@ if(BOOTLOADER_BUILD) return() endif() -idf_component_register(SRCS "intr_alloc.c" - "esp_async_memcpy.c" - "panic.c" - "system_api.c" - "startup.c" - "system_time.c" - "sleep_modes.c" +idf_build_get_property(target IDF_TARGET) + +set(srcs "intr_alloc.c" + "esp_async_memcpy.c" + "panic.c" + "system_api.c" + "startup.c" + "system_time.c" + "sleep_modes.c") + +if(NOT (${target} STREQUAL "esp32c3") ) + list(APPEND srcs "dbg_stubs.c") +endif() + +idf_component_register(SRCS "${srcs}" INCLUDE_DIRS include PRIV_REQUIRES spi_flash # [refactor-todo] requirements due to init code, @@ -18,9 +26,9 @@ idf_component_register(SRCS "intr_alloc.c" # link-time registration is used. esp_pm app_update nvs_flash pthread app_trace esp_gdbstub LDFRAGMENTS "linker.lf") - add_subdirectory(port) + # After system initialization, `start_app` (and its other cores variant) is called. # This is provided by the user or from another component. Since we can't establish # dependency on what we don't know, force linker to not drop the symbol regardless diff --git a/components/esp_system/Kconfig b/components/esp_system/Kconfig index 16171815e8..00f7c84ec7 100644 --- a/components/esp_system/Kconfig +++ b/components/esp_system/Kconfig @@ -121,5 +121,14 @@ menu "ESP System Settings" The lock is reset only on the chip startup. endmenu # Memory protection + + config ESP_DEBUG_STUBS_ENABLE + bool + default COMPILER_OPTIMIZATION_LEVEL_DEBUG + depends on !ESP32_TRAX && !ESP32S2_TRAX + help + Debug stubs are used by OpenOCD to execute pre-compiled onboard code + which does some useful debugging stuff, e.g. GCOV data dump. + endmenu # ESP System Settings diff --git a/components/esp_common/include/esp_private/dbg_stubs.h b/components/esp_system/include/esp_private/dbg_stubs.h similarity index 95% rename from components/esp_common/include/esp_private/dbg_stubs.h rename to components/esp_system/include/esp_private/dbg_stubs.h index c784de9845..f3f5fba3b7 100644 --- a/components/esp_common/include/esp_private/dbg_stubs.h +++ b/components/esp_system/include/esp_private/dbg_stubs.h @@ -14,6 +14,10 @@ #ifndef ESP_DBG_STUBS_H_ #define ESP_DBG_STUBS_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "esp_err.h" /** @@ -47,4 +51,8 @@ void esp_dbg_stubs_init(void); */ esp_err_t esp_dbg_stub_entry_set(esp_dbg_stub_id_t id, uint32_t entry); +#ifdef __cplusplus +} +#endif + #endif //ESP_DBG_STUBS_H_ diff --git a/components/esp_system/sdkconfig.rename b/components/esp_system/sdkconfig.rename index 33bdd49f17..cd834310c2 100644 --- a/components/esp_system/sdkconfig.rename +++ b/components/esp_system/sdkconfig.rename @@ -16,3 +16,4 @@ CONFIG_ESP32C3_MEMPROT_FEATURE CONFIG_ESP_SYSTEM_MEMPRO CONFIG_ESP32C3_MEMPROT_FEATURE_LOCK CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK CONFIG_ESP32_RTC_XTAL_BOOTSTRAP_CYCLES CONFIG_ESP_SYSTEM_RTC_EXT_XTAL_BOOTSTRAP_CYCLES +CONFIG_ESP32_DEBUG_STUBS_ENABLE CONFIG_ESP_DEBUG_STUBS_ENABLE