mirror of
https://github.com/apache/nuttx.git
synced 2026-08-19 20:48:19 +00:00
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 <461911662@qq.com>
Reviewed-by: Tiago Medicci Serrano <tiago.medicci@espressif.com>
Reviewed-by: Almir Okato <almir.okato@espressif.com>
Reviewed-by: Eren Terzioglu <eren.terzioglu@espressif.com>
This commit is contained in:
parent
e2ddb55101
commit
877ddd06a8
2 changed files with 16 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue