Merge branch 'fix/coredump-gcc-analyzer-warnings_v5.4' into 'release/v5.4'

fix(system): fix GCC-14 analyzer warnings for coredump (v5.4)

See merge request espressif/esp-idf!35521
This commit is contained in:
Marius Vikhammer 2025-01-06 14:38:23 +08:00
commit 012de83f3c
6 changed files with 16 additions and 13 deletions

View File

@ -301,7 +301,7 @@ void esp_panic_handler(panic_info_t *info)
char *panic_reason_str = NULL;
if (info->pseudo_excause) {
panic_reason_str = (char *)info->reason;
} else if (g_panic_abort && strlen(g_panic_abort_details)) {
} else if (g_panic_abort) {
panic_reason_str = g_panic_abort_details;
}
if (panic_reason_str) {

View File

@ -8,6 +8,7 @@
#include "sdkconfig.h"
#include "esp_system.h"
#include "esp_private/system_internal.h"
#include "esp_macros.h"
#include "esp_attr.h"
#include "esp_log.h"
#include "esp_rom_sys.h"
@ -114,7 +115,5 @@ void IRAM_ATTR esp_restart_noos(void)
// Reset PRO CPU
esp_rom_software_reset_cpu(0);
while (true) {
;
}
ESP_INFINITE_LOOP();
}

View File

@ -209,7 +209,7 @@ static int elf_write_note_header(core_dump_elf_t *self,
elf_note note_hdr = { 0 };
memcpy(name_buffer, name, name_len);
note_hdr.n_namesz = ALIGN_UP(name_len, 4);
note_hdr.n_namesz = ALIGN_UP(name_len + 1, 4);
note_hdr.n_descsz = data_sz;
note_hdr.n_type = type;
// write note header
@ -242,7 +242,7 @@ static int elf_write_note(core_dump_elf_t *self,
// write segment data during second pass
if (self->elf_stage == ELF_STAGE_PLACE_DATA) {
ELF_CHECK_ERR(data, ELF_PROC_ERR_OTHER, "Invalid data pointer %x.", (uint32_t)data);
err = elf_write_note_header(self, name, name_len, data_sz, type);
err = elf_write_note_header(self, name, strlen(name), data_sz, type);
if (err != ESP_OK) {
return err;
}
@ -688,7 +688,7 @@ static void elf_write_core_dump_note_cb(void *opaque, const char *data)
static int elf_add_wdt_panic_details(core_dump_elf_t *self)
{
uint32_t name_len = sizeof(ELF_ESP_CORE_DUMP_PANIC_DETAILS_NOTE_NAME);
uint32_t name_len = sizeof(ELF_ESP_CORE_DUMP_PANIC_DETAILS_NOTE_NAME) - 1;
core_dump_elf_opaque_t param = {
.self = self,
.total_size = 0,

View File

@ -185,7 +185,7 @@ static esp_err_t esp_core_dump_flash_write_data(core_dump_write_data_t* wr_data,
wr_data->off += COREDUMP_CACHE_SIZE;
/* Update checksum with the newly written data on the flash. */
esp_core_dump_checksum_update(&wr_data->checksum_ctx, &wr_data->cached_data, COREDUMP_CACHE_SIZE);
esp_core_dump_checksum_update(&wr_data->checksum_ctx, wr_data->cached_data, COREDUMP_CACHE_SIZE);
/* Reset cache from the next use. */
wr_data->cached_bytes = 0;

View File

@ -1076,11 +1076,11 @@ def test_tcb_corrupted(dut: PanicTestDut, target: str, config: str, test_func_na
dut.run_test_func(test_func_name)
if dut.is_xtensa:
dut.expect_gme('LoadProhibited')
dut.expect_reg_dump(0)
dut.expect_reg_dump()
dut.expect_backtrace()
else:
dut.expect_gme('Load access fault')
dut.expect_reg_dump(0)
dut.expect_reg_dump()
dut.expect_stack_dump()
dut.expect_elf_sha256()

View File

@ -96,9 +96,13 @@ class PanicTestDut(IdfDut):
"""Expect method for Guru Meditation Errors"""
self.expect_exact(f"Guru Meditation Error: Core 0 panic'ed ({reason})")
def expect_reg_dump(self, core: int = 0) -> None:
"""Expect method for the register dump"""
self.expect(r'Core\s+%d register dump:' % core)
def expect_reg_dump(self, core: Optional[int] = None) -> None:
if core is None:
# Match any core num
self.expect(r'Core\s+\d+\s+register dump:')
else:
# Match the exact core num provided
self.expect(r'Core\s+%d\s+register dump:' % core)
def expect_cpu_reset(self) -> None:
# no digital system reset for panic handling restarts (see IDF-7255)