Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Olivain via buildroot <buildroot@buildroot.org>
To: Luca Ceresoli <luca.ceresoli@bootlin.com>
Cc: buildroot@buildroot.org,
	"Alexis Lothoré" <alexis.lothore@bootlin.com>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
Subject: Re: [Buildroot] [PATCH v3] package/heaptrack: new package
Date: Sat, 15 Aug 2026 21:25:34 +0200	[thread overview]
Message-ID: <9de991fb9ed19fb13d2079c3dafde7d5@free.fr> (raw)
In-Reply-To: <20260811-heaptrack-v3-1-772180a6e654@bootlin.com>

Hi Luca,

Thanks for the patch. I have few comments, see below.

On 11/08/2026 12:15, Luca Ceresoli via buildroot wrote:
> Add heaptrack, a memory allocation tracer toolkit.
> 
> This implementation builds all the command line components, not the
> heaptrack_gui graphical visualization program.
> 
> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
> ---
[...]
> diff --git a/package/heaptrack/Config.in b/package/heaptrack/Config.in
> new file mode 100644
> index 000000000000..12e33ff2c219
> --- /dev/null
> +++ b/package/heaptrack/Config.in
> @@ -0,0 +1,37 @@
> +config BR2_PACKAGE_HEAPTRACK
> +	bool "heaptrack"
> +	depends on BR2_INSTALL_LIBSTDCPP
> +	depends on BR2_TOOLCHAIN_HAS_THREADS # boost, libunwind, elfutils
> +	depends on BR2_USE_WCHAR # boost, elfutils
> +	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # 
> boost-filesystem

This package is failing to build with uclibc toolchains. See:
https://gitlab.com/jolivain/buildroot/-/pipelines/2762905573

heaptrack uses LM_ID_BASE which is not supported by uclibc:
https://invent.kde.org/sdk/heaptrack/-/blob/master/src/track/heaptrack_env.cpp#L33
https://github.com/wbx-github/uclibc-ng/blob/v1.0.59/include/dlfcn.h#L46-L54

You could either try to fix that issue, or disable the package for
uclibc toolchains by adding:

     depends on !BR2_TOOLCHAIN_USES_UCLIBC # no dlmopen() support

with the corresponding comment.

> +	depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS # libunwind
> +	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libunwind
> +	depends on !BR2_STATIC_LIBS # libunwind, elfutils
> +	select BR2_PACKAGE_BOOST
> +	select BR2_PACKAGE_BOOST_IOSTREAMS
> +	select BR2_PACKAGE_BOOST_PROGRAM_OPTIONS
> +	# For heaptrack_print
> +	select BR2_PACKAGE_BOOST_FILESYSTEM
> +	select BR2_PACKAGE_ELFUTILS
> +	select BR2_PACKAGE_LIBUNWIND
> +	select BR2_PACKAGE_ZLIB
> +	help
> +	  Heaptrack traces all memory allocations and annotates these
> +	  events with stack traces. Dedicated analysis tools then allow
> +	  you to interpret the heap memory profile to find hotspots,
> +	  memory leaks, allocation hotspots and temporary allocations.
> +
> +	  Zstandard offers better (de)compression performance compared
> +	  with gzip/zlib, making heaptrack faster and datafiles smaller,
> +	  so enabling BR2_PACKAGE_ZSTD is recommended.
> +
> +	  https://apps.kde.org/heaptrack/
> +
> +comment "heaptrack needs a toolchain w/ C++, threads, wchar, gcc >= 
> 4.9, dynamic library"
> +	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
> +	depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
> +	depends on !BR2_INSTALL_LIBSTDCPP \
> +		|| !BR2_TOOLCHAIN_HAS_THREADS \
> +		|| !BR2_USE_WCHAR \
> +		|| !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \
> +		|| BR2_STATIC_LIBS
[...]
> diff --git a/package/heaptrack/heaptrack.mk 
> b/package/heaptrack/heaptrack.mk
> new file mode 100644
> index 000000000000..ef12f9d189fe
> --- /dev/null
> +++ b/package/heaptrack/heaptrack.mk
> @@ -0,0 +1,26 @@
> +################################################################################
> +#
> +# heaptrack
> +#
> +################################################################################
> +
> +HEAPTRACK_SITE_METHOD = git
> +HEAPTRACK_SITE = https://invent.kde.org/sdk/heaptrack.git
> +HEAPTRACK_VERSION = 3e6cce3d210a6672fe6f92de0bed567c49b7a9c5
> +HEAPTRACK_LICENSE = LGPL-2.1-or-later, GPL-2.0-or-later 
> (heaptrack_interpret)
> +HEAPTRACK_LICENSE_FILES = \
> +	LICENSES/LGPL-2.1-only.txt \
> +	LICENSES/GPL-2.0-or-later.txt \
> +	LICENSES/LGPL-2.1-or-later.txt \
> +	LICENSES/BSL-1.0.txt \
> +	LICENSES/MIT.txt \
> +	LICENSES/Apache-2.0.txt \
> +	LICENSES/BSD-3-Clause.txt
> +HEAPTRACK_DEPENDENCIES = host-pkgconf boost libunwind zlib elfutils

Could you sort dependencies, please?

HEAPTRACK_DEPENDENCIES = host-pkgconf boost elfutils libunwind zlib

> +HEAPTRACK_CONF_OPTS += -DHEAPTRACK_BUILD_GUI=OFF 
> -DHEAPTRACK_BUILD_PRINT=ON

Since it's the first _CONF_OPTS assignement, could you
remove the '+', please?

HEAPTRACK_CONF_OPTS = -DHEAPTRACK_BUILD_GUI=OFF ...

> +
> +ifeq ($(BR2_PACKAGE_ZSTD),y)
> +HEAPTRACK_DEPENDENCIES += zstd
> +endif
> +
> +$(eval $(cmake-package))
> diff --git a/support/testing/tests/package/test_heaptrack.py 
> b/support/testing/tests/package/test_heaptrack.py
> new file mode 100644
> index 000000000000..de3d5441efa4
> --- /dev/null
> +++ b/support/testing/tests/package/test_heaptrack.py
> @@ -0,0 +1,40 @@
> +import os
> +
> +import infra.basetest
> +
> +
> +class TestHeaptrack(infra.basetest.BRTest):
> +    # infra.basetest.BASIC_TOOLCHAIN_CONFIG cannot be used as it does
> +    # not include BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
> +    # needed by heaptrack.
> +    config = \
> +        """
> +        BR2_aarch64=y
> +        BR2_TOOLCHAIN_EXTERNAL=y
> +        BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
> +        BR2_LINUX_KERNEL=y
> +        BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> +        BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.42"
> +        BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
> +        
> BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
> +        BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
> +        BR2_PACKAGE_HEAPTRACK=y
> +        # BR2_TARGET_ROOTFS_TAR is not set
> +        BR2_TARGET_ROOTFS_CPIO=y
> +        """
> +
> +    def test_run(self):
> +        cpio_file = os.path.join(self.builddir, "images", 
> "rootfs.cpio")
> +        kern = os.path.join(self.builddir, "images", "Image")
> +        self.emulator.boot(arch="aarch64",
> +                           kernel=kern,
> +                           kernel_cmdline=["console=ttyAMA0"],
> +                           options=["-M", "virt",
> +                                    "-cpu", "cortex-a57",
> +                                    "-m", "256M",
> +                                    "-initrd", cpio_file])
> +
> +        self.emulator.login()
> +
> +        self.assertRunOk("/usr/bin/heaptrack --version")
> +        self.assertRunOk("/usr/bin/heaptrack /bin/busybox")

Maybe we could make this test slightly more complex,
to have a bit more allocations, and also printing the
recorded data.

For example:

self.assertRunOk("heaptrack -o /tmp/ls.heaptrack ls -al /")
self.assertRunOk("heaptrack_print --file /tmp/ls.heaptrack.gz")

> ---
> base-commit: d4f3bea066947fdee49a12ebd84cba54a872d43f
> change-id: 20260731-heaptrack-cd4f6f8fcec8
> 
> Best regards,
> --
> Luca Ceresoli, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

Could you send an updated patch addressing those issues, please?

Best regards,

Julien.
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  reply	other threads:[~2026-08-15 19:25 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-11 10:15 [Buildroot] [PATCH v3] package/heaptrack: new package Luca Ceresoli via buildroot
2026-08-15 19:25 ` Julien Olivain via buildroot [this message]
2026-08-21 19:46   ` Luca Ceresoli via buildroot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9de991fb9ed19fb13d2079c3dafde7d5@free.fr \
    --to=buildroot@buildroot.org \
    --cc=alexis.lothore@bootlin.com \
    --cc=ju.o@free.fr \
    --cc=luca.ceresoli@bootlin.com \
    --cc=thomas.petazzoni@bootlin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox