Add a new 'malloc dump' command that walks the dlmalloc heap from start
to end, printing each chunk's address, size (in hex), and status
(used/free/top). This is useful for debugging memory allocation issues.
When CONFIG_MCHECK_HEAP_PROTECTION is enabled, the caller string is
also shown if available.
Example output:
Heap dump: 18a1d000 - 1ea1f000
Address Size Status
----------------------------------
18a1d000 10 (chunk header)
18a1d010 90 used
18adfc30 60 <free>
18adff90 5f3f030 top
1ea1f000 end
----------------------------------
Used: c2ef0 bytes in 931 chunks
Free: 5f3f0c0 bytes in 2 chunks + top
Expand the console-record size to handle this command.
Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
48 lines
1.2 KiB
C
48 lines
1.2 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* malloc command - show malloc information
|
|
*
|
|
* Copyright 2025 Canonical Ltd
|
|
* Written by Simon Glass <simon.glass@canonical.com>
|
|
*/
|
|
|
|
#include <command.h>
|
|
#include <display_options.h>
|
|
#include <malloc.h>
|
|
|
|
static int do_malloc_info(struct cmd_tbl *cmdtp, int flag, int argc,
|
|
char *const argv[])
|
|
{
|
|
struct malloc_info info;
|
|
char buf[12];
|
|
int ret;
|
|
|
|
ret = malloc_get_info(&info);
|
|
if (ret)
|
|
return CMD_RET_FAILURE;
|
|
|
|
printf("total bytes = %s\n", format_size(buf, info.total_bytes));
|
|
printf("in use bytes = %s\n", format_size(buf, info.in_use_bytes));
|
|
printf("malloc count = %lu\n", info.malloc_count);
|
|
printf("free count = %lu\n", info.free_count);
|
|
printf("realloc count = %lu\n", info.realloc_count);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int do_malloc_dump(struct cmd_tbl *cmdtp, int flag, int argc,
|
|
char *const argv[])
|
|
{
|
|
malloc_dump();
|
|
|
|
return 0;
|
|
}
|
|
|
|
U_BOOT_LONGHELP(malloc,
|
|
"info - display malloc statistics\n"
|
|
"malloc dump - dump heap chunks (address, size, status)\n");
|
|
|
|
U_BOOT_CMD_WITH_SUBCMDS(malloc, "malloc information", malloc_help_text,
|
|
U_BOOT_SUBCMD_MKENT(info, 1, 1, do_malloc_info),
|
|
U_BOOT_SUBCMD_MKENT(dump, 1, 1, do_malloc_dump));
|