mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
7492c862af
In order to enable CONFIG_HEAP_TASK_TRACKING, some kind of poisoning had to be enabled (!HEAP_POISONING_DISABLED). However since those functionalities don't seem to be related in any way, this commit decouple them by removing MULTI_HEAP_BLOCK_OWNER from poison_head_t in multi_heap_poisoning.c and handling the block ownership in heap_caps.c instead. Note that handling task tracking in multi_heap.c would necessitate updating the ROM implementation of multi_heap.c as well. For this reason, the task tracking feature has to be handled in heap_caps.c.
132 lines
5.0 KiB
Plaintext
132 lines
5.0 KiB
Plaintext
menu "Heap memory debugging"
|
|
|
|
choice HEAP_CORRUPTION_DETECTION
|
|
prompt "Heap corruption detection"
|
|
default HEAP_POISONING_DISABLED
|
|
help
|
|
Enable heap poisoning features to detect heap corruption caused by out-of-bounds access to heap memory.
|
|
|
|
See the "Heap Memory Debugging" page of the IDF documentation
|
|
for a description of each level of heap corruption detection.
|
|
|
|
config HEAP_POISONING_DISABLED
|
|
bool "Basic (no poisoning)"
|
|
config HEAP_POISONING_LIGHT
|
|
bool "Light impact"
|
|
config HEAP_POISONING_COMPREHENSIVE
|
|
bool "Comprehensive"
|
|
endchoice
|
|
|
|
choice HEAP_TRACING_DEST
|
|
bool "Heap tracing"
|
|
default HEAP_TRACING_OFF
|
|
help
|
|
Enables the heap tracing API defined in esp_heap_trace.h.
|
|
|
|
This function causes a moderate increase in IRAM code side and a minor increase in heap function
|
|
(malloc/free/realloc) CPU overhead, even when the tracing feature is not used.
|
|
So it's best to keep it disabled unless tracing is being used.
|
|
|
|
config HEAP_TRACING_OFF
|
|
bool "Disabled"
|
|
config HEAP_TRACING_STANDALONE
|
|
bool "Standalone"
|
|
select HEAP_TRACING
|
|
config HEAP_TRACING_TOHOST
|
|
bool "Host-based"
|
|
select HEAP_TRACING
|
|
endchoice
|
|
|
|
config HEAP_TRACING
|
|
bool
|
|
default F
|
|
help
|
|
Enables/disables heap tracing API.
|
|
|
|
config HEAP_TRACING_STACK_DEPTH
|
|
int "Heap tracing stack depth"
|
|
range 0 0 if IDF_TARGET_ARCH_RISCV # Disabled for RISC-V due to `__builtin_return_address` limitation
|
|
default 0 if IDF_TARGET_ARCH_RISCV
|
|
range 0 32
|
|
default 2
|
|
depends on HEAP_TRACING
|
|
help
|
|
Number of stack frames to save when tracing heap operation callers.
|
|
|
|
More stack frames uses more memory in the heap trace buffer (and slows down allocation), but
|
|
can provide useful information.
|
|
|
|
config HEAP_USE_HOOKS
|
|
bool "Use allocation and free hooks"
|
|
help
|
|
Enable the user to implement function hooks triggered for each successful allocation and free.
|
|
|
|
config HEAP_TASK_TRACKING
|
|
bool "Enable heap task tracking"
|
|
help
|
|
Enables tracking the task responsible for each heap allocation.
|
|
|
|
This function depends on heap poisoning being enabled and adds four more bytes of overhead for each block
|
|
allocated.
|
|
|
|
config HEAP_TRACE_HASH_MAP
|
|
bool "Use hash map mechanism to access heap trace records"
|
|
depends on HEAP_TRACING_STANDALONE
|
|
default n
|
|
help
|
|
Enable this flag to use a hash map to increase performance in handling
|
|
heap trace records.
|
|
|
|
Heap trace standalone supports storing records as a list, or a list + hash map.
|
|
|
|
Using only a list takes less memory, but calls to 'free' will get slower as the
|
|
list grows. This is particularly affected when using HEAP_TRACE_ALL mode.
|
|
|
|
By using a list + hash map, calls to 'free' remain fast, at the cost of
|
|
additional memory to store the hash map.
|
|
|
|
config HEAP_TRACE_HASH_MAP_IN_EXT_RAM
|
|
bool "Place hash map in external RAM"
|
|
depends on HEAP_TRACE_HASH_MAP
|
|
default n
|
|
help
|
|
When enabled this configuration forces the hash map to be placed in external RAM.
|
|
|
|
config HEAP_TRACE_HASH_MAP_SIZE
|
|
int "The number of entries in the hash map"
|
|
depends on HEAP_TRACE_HASH_MAP
|
|
default 512
|
|
help
|
|
Defines the number of entries in the heap trace hashmap. Each entry takes 8 bytes.
|
|
The bigger this number is, the better the performance. Recommended range: 200 - 2000.
|
|
|
|
config HEAP_ABORT_WHEN_ALLOCATION_FAILS
|
|
bool "Abort if memory allocation fails"
|
|
default n
|
|
help
|
|
When enabled, if a memory allocation operation fails it will cause a system abort.
|
|
|
|
config HEAP_TLSF_USE_ROM_IMPL
|
|
bool "Use ROM implementation of heap tlsf library"
|
|
depends on ESP_ROM_HAS_HEAP_TLSF
|
|
default y
|
|
help
|
|
Enable this flag to use heap functions from ROM instead of ESP-IDF.
|
|
|
|
If keeping this as "n" in your project, you will have less free IRAM.
|
|
If making this as "y" in your project, you will increase free IRAM,
|
|
but you will lose the possibility to debug this module, and some new
|
|
features will be added and bugs will be fixed in the IDF source
|
|
but cannot be synced to ROM.
|
|
|
|
config HEAP_PLACE_FUNCTION_INTO_FLASH
|
|
bool "Force the entire heap component to be placed in flash memory"
|
|
depends on !HEAP_TLSF_USE_ROM_IMPL
|
|
default n
|
|
help
|
|
Enable this flag to save up RAM space by placing the heap component in the flash memory
|
|
|
|
Note that it is only safe to enable this configuration if no functions from esp_heap_caps.h
|
|
or esp_heap_trace.h are called from ISR.
|
|
endmenu
|