fix(esp_riscv_trace): Stop the encoder writing past the trace buffer

This commit is contained in:
Erhan Kurubas
2026-09-03 08:20:11 +02:00
parent e0ffa602f7
commit 9c8136355a
@@ -31,6 +31,9 @@
#define ESP_RISCV_TRACE_BUFFER_ALIGNMENT 4
/* One word is reserved so mem_end_addr can point at the last writable word. */
#define ESP_RISCV_TRACE_BUFFER_MIN_SIZE 8
static const char *TAG = "esp_riscv_trace";
/* Handles created at startup by esp_riscv_trace_early_init(), one slot per core. */
@@ -165,7 +168,8 @@ static esp_err_t validate_trace_config(esp_riscv_trace_core_t core_id, const esp
ESP_RETURN_ON_FALSE(ret_handle != NULL, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
ESP_RETURN_ON_FALSE((int)core_id >= 0 && (int)core_id < SOC_CPU_CORES_NUM,
ESP_ERR_INVALID_ARG, TAG, "invalid core id");
ESP_RETURN_ON_FALSE(config->buffer_size != 0, ESP_ERR_INVALID_SIZE, TAG, "trace buffer size is 0");
ESP_RETURN_ON_FALSE(config->buffer_size >= ESP_RISCV_TRACE_BUFFER_MIN_SIZE, ESP_ERR_INVALID_SIZE, TAG,
"trace buffer must be at least %d bytes", ESP_RISCV_TRACE_BUFFER_MIN_SIZE);
ESP_RETURN_ON_FALSE(is_valid_address_mode(config->address_mode), ESP_ERR_INVALID_ARG, TAG, "invalid address mode");
ESP_RETURN_ON_FALSE(is_valid_mem_mode(config->mem_mode), ESP_ERR_INVALID_ARG, TAG, "invalid memory mode");
ESP_RETURN_ON_FALSE(is_valid_resync_mode(config->resync_mode), ESP_ERR_INVALID_ARG, TAG, "invalid resync mode");
@@ -197,7 +201,7 @@ static esp_err_t esp_riscv_trace_new(esp_riscv_trace_core_t core_id, const esp_r
riscv_trace_hal_context_t hal_ctx;
riscv_trace_hal_config_t hal_config = {
.mem_start_addr = (uint32_t)trace_mem,
.mem_end_addr = (uint32_t)trace_mem + trace_mem_size,
.mem_end_addr = (uint32_t)trace_mem + trace_mem_size - sizeof(uint32_t),
.full_address = (config->address_mode == ESP_RISCV_TRACE_ADDR_FULL),
.mem_loop = (config->mem_mode == ESP_RISCV_TRACE_MEM_LOOP),
.auto_restart = config->auto_restart,