Ver código fonte

esp_common: move dbg_stubs

Renz Bagaporo 5 anos atrás
pai
commit
5fce7f4a41

+ 0 - 4
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

+ 0 - 8
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

+ 0 - 95
components/esp_common/src/dbg_stubs.c

@@ -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

+ 16 - 8
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

+ 9 - 0
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

+ 8 - 0
components/esp_common/include/esp_private/dbg_stubs.h → 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_

+ 1 - 0
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