From patchwork Mon Dec 1 17:04:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 794 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1764608941; bh=Xax6axDTz8aryleweoviPvO/7+WJUF3BsacfymTQOn8=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=WxcI7KhgenF4C9PVkSfXMLHgqLkVB/RJhmy/yPUlkdxSqAjK6ZX/TqnzgsGQe2ltU qqgP/JoAOcDER5+mGTNI3VezRQCljeDC3yQ3G1z+8HwoGP2KmHGyeAi4XMxog8tCSh fEmDDouKcuXMxcUPmQXMPjIJzCOpPqjdc3oCaH8bZFfV48ssve5mwDw613wkw6D3uk PxVALM5yKc74r0W/PQHe/KzRxot+yu0Br/SXG6o1QLaXzKujhsn6hMiBzT82s6vxsH BJQTtaYQgccoXxbnX5Y2CvpyhPOu9wQ1/8jmRv+FR+gHsgyaSrinrp2qmAfmOWMbVf gatPOX+qnqD5g== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 339B5688C0 for ; Mon, 1 Dec 2025 10:09:01 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id ofK5pto3sib1 for ; Mon, 1 Dec 2025 10:09:01 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1764608941; bh=Xax6axDTz8aryleweoviPvO/7+WJUF3BsacfymTQOn8=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=WxcI7KhgenF4C9PVkSfXMLHgqLkVB/RJhmy/yPUlkdxSqAjK6ZX/TqnzgsGQe2ltU qqgP/JoAOcDER5+mGTNI3VezRQCljeDC3yQ3G1z+8HwoGP2KmHGyeAi4XMxog8tCSh fEmDDouKcuXMxcUPmQXMPjIJzCOpPqjdc3oCaH8bZFfV48ssve5mwDw613wkw6D3uk PxVALM5yKc74r0W/PQHe/KzRxot+yu0Br/SXG6o1QLaXzKujhsn6hMiBzT82s6vxsH BJQTtaYQgccoXxbnX5Y2CvpyhPOu9wQ1/8jmRv+FR+gHsgyaSrinrp2qmAfmOWMbVf gatPOX+qnqD5g== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 217F2688AE for ; Mon, 1 Dec 2025 10:09:01 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1764608938; bh=qwA7RuxfaRb+68FdBibSeYCqCLpCmA/G96vIzQykApI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tF0s1tKrLU+RzFRjaagAnf4x3GTmegdnOzzs7fb7I+ryUGRDdI2quY3kSXY9gow+t t0I4xRqwut3BpIDkupfjn5lAFFaEYb3pdIzOiR+SmNqqo1Q3HPhSJz9UoFZMT2nmQr D2EnwX7lPjjd9nzxnNltRsY0Zhlbxy3hhwhnJHote2dTIiSwTxMb7ZhCVt5jhJpBNP HjQ3Qjfh3jUmpHndL1VjrlFPvRGnAm6tKaoJoesqPSs8RCJsqJVQK9a+aWsm+AlV5Y HF8ASLj6VMl3Tniz3zqMDXC9wpmTw7Ptlzx5pYVZtZS3lo97BTMWu/747Y3Bu0vqbL 3RzS5jVt61KPw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id CD2DB688A4; Mon, 1 Dec 2025 10:08:58 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id qMK8_LkzCkH4; Mon, 1 Dec 2025 10:08:58 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1764608933; bh=vc12dkkAbN4OpLw4Ily1hRI86FhJX/AlnDkKcpxFjSs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A2erG7iXHEnS6QFhbc9dM+CREOuq2cxtdFr9DXy3sQvL6QeiUmTEnWLmiKI2184EB fQgT5C6rEss28RbzrPfu5WFRiKnnr5brh70wUSWGVISujTDyDLcJ9PPlHjkX5gZknL /2AU2/sS6e2/t3/Pp7rWrycRjTgUYqVZIHf7xGK/dWEkRrFKTDusv/cRAT07gWsucL j6cSh+q6P4OCvJvoInhQs07j8M9j9oaktXi6mFhLnVTQzdSL7oPpoVJ/yxYjeoV6rP YPm4pmkXUXPuTLm70Fm/r5zJlCXIpYqyrv9GQVUPlySUsoAZ1GT2vuizNrjM7pKxhT f+2+CsIirRNyg== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id A653768821; Mon, 1 Dec 2025 10:08:52 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Mon, 1 Dec 2025 10:04:58 -0700 Message-ID: <20251201170529.3237986-20-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251201170529.3237986-1-sjg@u-boot.org> References: <20251201170529.3237986-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: ULX5Y563LKTO666U2XQALNEJ5FNNWDYT X-Message-ID-Hash: ULX5Y563LKTO666U2XQALNEJ5FNNWDYT X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Heinrich Schuchardt , Simon Glass , Sean Anderson , Simon Glass , Claude X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 19/37] malloc: Annotate allocator for valgrind List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass Add valgrind annotations to track memory allocations: - VALGRIND_MALLOCLIKE_BLOCK in dlmalloc() at the postaction label - VALGRIND_FREELIKE_BLOCK in dlfree() for both pre-reloc and post-reloc paths - VALGRIND_RESIZEINPLACE_BLOCK/VALGRIND_MAKE_MEM_DEFINED in dlrealloc() and dlrealloc_in_place() when resizing in place - VALGRIND_MALLOCLIKE_BLOCK/VALGRIND_FREELIKE_BLOCK in dlrealloc() when allocating new memory Changes from original commit: - The new dlmalloc 2.8.6 uses a centralized "postaction" label pattern instead of multiple return points, allowing simpler annotation - Annotations placed at strategic points covering all allocation paths - dlrealloc_in_place() is a new function that needs annotations Signed-off-by: Sean Anderson Reviewed-by: Simon Glass Co-developed-by: Claude Signed-off-by: Simon Glass (cherry picked from commit bdaeea1b6863b0ec80f2d4bc15d50b8d16efa708) --- common/dlmalloc.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/common/dlmalloc.c b/common/dlmalloc.c index a07166206dc..9298fc445e4 100644 --- a/common/dlmalloc.c +++ b/common/dlmalloc.c @@ -588,6 +588,7 @@ MAX_RELEASE_CHECK_RATE default: 4095 unless not HAVE_MMAP #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -4743,6 +4744,10 @@ void* dlmalloc(size_t bytes) { postaction: POSTACTION(gm); +#ifdef __UBOOT__ + if (mem) + VALGRIND_MALLOCLIKE_BLOCK(mem, bytes, SIZE_SZ, false); +#endif return mem; } @@ -4755,8 +4760,10 @@ void dlfree(void* mem) { #ifdef __UBOOT__ #if CONFIG_IS_ENABLED(SYS_MALLOC_F) /* free() is a no-op - all the memory will be freed on relocation */ - if (!(gd->flags & GD_FLG_FULL_MALLOC_INIT)) + if (!(gd->flags & GD_FLG_FULL_MALLOC_INIT)) { + VALGRIND_FREELIKE_BLOCK(mem, SIZE_SZ); return; + } #endif #endif /* @@ -4778,6 +4785,9 @@ void dlfree(void* mem) { #endif /* FOOTERS */ if (!PREACTION(fm)) { check_inuse_chunk(fm, p); +#ifdef __UBOOT__ + VALGRIND_FREELIKE_BLOCK(mem, SIZE_SZ); +#endif if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) { size_t psize = chunksize(p); mchunkptr next = chunk_plus_offset(p, psize); @@ -5349,12 +5359,25 @@ void* dlrealloc(void* oldmem, size_t bytes) { if (newp != 0) { check_inuse_chunk(m, newp); mem = chunk2mem(newp); +#ifdef __UBOOT__ + if (mem == oldmem) { + VALGRIND_RESIZEINPLACE_BLOCK(oldmem, 0, bytes, SIZE_SZ); + VALGRIND_MAKE_MEM_DEFINED(oldmem, bytes); + } else { + VALGRIND_MALLOCLIKE_BLOCK(mem, bytes, SIZE_SZ, false); + VALGRIND_FREELIKE_BLOCK(oldmem, SIZE_SZ); + } +#endif } else { mem = internal_malloc(m, bytes); if (mem != 0) { size_t oc = chunksize(oldp) - overhead_for(oldp); memcpy(mem, oldmem, (oc < bytes)? oc : bytes); +#ifdef __UBOOT__ + VALGRIND_MALLOCLIKE_BLOCK(mem, bytes, SIZE_SZ, false); + VALGRIND_FREELIKE_BLOCK(oldmem, SIZE_SZ); +#endif internal_free(m, oldmem); } } @@ -5387,6 +5410,10 @@ void* dlrealloc_in_place(void* oldmem, size_t bytes) { if (newp == oldp) { check_inuse_chunk(m, newp); mem = oldmem; +#ifdef __UBOOT__ + VALGRIND_RESIZEINPLACE_BLOCK(oldmem, 0, bytes, SIZE_SZ); + VALGRIND_MAKE_MEM_DEFINED(oldmem, bytes); +#endif } } }