From 526a73e286b1ccf603e070c0478dcdf692e925b8 Mon Sep 17 00:00:00 2001 From: Chip Weinberger Date: Mon, 30 Jan 2023 02:47:18 -0800 Subject: [PATCH] [Logs] print size and caps when malloc fails --- components/heap/heap_caps.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/components/heap/heap_caps.c b/components/heap/heap_caps.c index e28653f69c8b..564da2cdd4ef 100644 --- a/components/heap/heap_caps.c +++ b/components/heap/heap_caps.c @@ -54,6 +54,19 @@ IRAM_ATTR static void *dram_alloc_to_iram_addr(void *addr, size_t len) return iptr + 1; } +#ifdef CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS +static void fmt_abort_str(char* dest, size_t requested_size, uint32_t caps) +{ + char sSize[11]; + char sCaps[9]; + itoa(requested_size, sSize, 10); + itoa(caps, sCaps, 16); + strcat(dest, "Mem alloc fail. size "); + strcat(dest, sSize); + strcat(dest, " caps 0x"); + strcat(dest, sCaps); +} +#endif IRAM_ATTR NOINLINE_ATTR static void heap_caps_alloc_failed(size_t requested_size, uint32_t caps, const char *function_name) { @@ -62,7 +75,10 @@ IRAM_ATTR NOINLINE_ATTR static void heap_caps_alloc_failed(size_t requested_size } #ifdef CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS - esp_system_abort("Memory allocation failed"); + static char buf[48]; + memset(buf, 0, sizeof(buf)); + fmt_abort_str(buf, requested_size, caps); + esp_system_abort(buf); #endif }