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

Reply via email to