This is an automated email from the ASF dual-hosted git repository. jerpelea pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 877ddd06a8b106ee5b2d601a28c7e77287482ec4 Author: 461911662 <[email protected]> AuthorDate: Thu Mar 19 18:18:11 2026 +0800 arch/xtensa/esp32s3: Fix ROM strdup heap issue in USER_HEAP mode In ESP32-S3 flat build with USER_HEAP mode, ROM strdup internally calls malloc which may be mapped to a different heap than lib_free, causing cross-heap allocation issues and system crashes. This commit adds a new Kconfig option ESP32S3_DONT_USE_ROM_LIBC to allow using NuttX libc instead of ROM newlib functions. When USER_HEAP mode is selected, this option is automatically enabled. Fixes: 60ca804b56 ("esp32s3: Fix bug related to the PSRAM-allocated task stack") Signed-off-by: 461911662 <[email protected]> Reviewed-by: Tiago Medicci Serrano <[email protected]> Reviewed-by: Almir Okato <[email protected]> Reviewed-by: Eren Terzioglu <[email protected]> --- arch/xtensa/src/esp32s3/Kconfig | 11 +++++++++++ arch/xtensa/src/esp32s3/hal.mk | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/arch/xtensa/src/esp32s3/Kconfig b/arch/xtensa/src/esp32s3/Kconfig index e0488a18f39..e5947d0f02f 100644 --- a/arch/xtensa/src/esp32s3/Kconfig +++ b/arch/xtensa/src/esp32s3/Kconfig @@ -1122,6 +1122,7 @@ config ESP32S3_SPIRAM_USER_HEAP depends on SCHED_LPWORK select ESP32S3_SPI_FLASH_SUPPORT_PSRAM_STACK if ESP32S3_SPIFLASH select MM_KERNEL_HEAP + select ESP32S3_DONT_USE_ROM_LIBC endchoice # ESP32S3_SPIRAM_HEAP @@ -1130,6 +1131,16 @@ config ESP32S3_RTC_HEAP select ARCH_HAVE_EXTRA_HEAPS default n +config ESP32S3_DONT_USE_ROM_LIBC + bool "Don't use ROM libc functions" + default n + ---help--- + If enabled, NuttX libc will be used instead of ROM newlib + functions (strdup, strndup, atoi, etc.). + + This is required when using flat build with USER_HEAP mode + to avoid heap allocation issues with ROM strdup. + config ESP32S3_SPIRAM_MAP bool "Remap the size and offset of SPIRAM virtual address" depends on ESP32S3_SPIRAM diff --git a/arch/xtensa/src/esp32s3/hal.mk b/arch/xtensa/src/esp32s3/hal.mk index 3770a50ea6f..3f9948bcb0f 100644 --- a/arch/xtensa/src/esp32s3/hal.mk +++ b/arch/xtensa/src/esp32s3/hal.mk @@ -166,7 +166,11 @@ ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM) ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_rom$(DELIM)$(CHIP_SERIES)$(DELIM)ld$(DELIM)$(CHIP_SERIES).rom.ld ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_rom$(DELIM)$(CHIP_SERIES)$(DELIM)ld$(DELIM)$(CHIP_SERIES).rom.libc.ld ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_rom$(DELIM)$(CHIP_SERIES)$(DELIM)ld$(DELIM)$(CHIP_SERIES).rom.libgcc.ld -ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_rom$(DELIM)$(CHIP_SERIES)$(DELIM)ld$(DELIM)$(CHIP_SERIES).rom.newlib.ld +ifeq ($(CONFIG_ESP32S3_DONT_USE_ROM_LIBC),y) + # Use NuttX libc instead of ROM newlib functions +else + ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_rom$(DELIM)$(CHIP_SERIES)$(DELIM)ld$(DELIM)$(CHIP_SERIES).rom.newlib.ld +endif ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_rom$(DELIM)$(CHIP_SERIES)$(DELIM)ld$(DELIM)$(CHIP_SERIES).rom.version.ld ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_hal_wdt$(DELIM)$(CHIP_SERIES)$(DELIM)rom.wdt.ld ARCHSCRIPT += $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)ld$(DELIM)$(CHIP_SERIES).peripherals.ld
