[compiler-rt] [compiler-rt][memprof] adding free_sized/free_aligned_sized intercept… (PR #154011)

David CARLIER via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 18 22:03:10 PDT 2025


https://github.com/devnexen updated https://github.com/llvm/llvm-project/pull/154011

>From dcd0cd5ef74bb42d026da473608e35b797ee9b35 Mon Sep 17 00:00:00 2001
From: David Carlier <devnexen at gmail.com>
Date: Sun, 17 Aug 2025 12:18:27 +0100
Subject: [PATCH 1/2] [compiler-rt][memprof] adding
 free_sized/free_aligned_sized interceptions.

---
 .../lib/memprof/memprof_malloc_linux.cpp       | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/compiler-rt/lib/memprof/memprof_malloc_linux.cpp b/compiler-rt/lib/memprof/memprof_malloc_linux.cpp
index 2a028c7d0b489..68fe65475889a 100644
--- a/compiler-rt/lib/memprof/memprof_malloc_linux.cpp
+++ b/compiler-rt/lib/memprof/memprof_malloc_linux.cpp
@@ -50,6 +50,24 @@ INTERCEPTOR(void, cfree, void *ptr) {
 }
 #endif // SANITIZER_INTERCEPT_CFREE
 
+#if SANITIZER_INTERCEPT_FREE_SIZED
+INTERCEPTOR(void, free_sized, void *ptr, uptr size) {
+  if (DlsymAlloc::PointerIsMine(ptr))
+    return DlsymAlloc::Free(ptr);
+  GET_STACK_TRACE_FREE;
+  memprof_delete(ptr, size, 0, &stack, FROM_MALLOC);
+}
+#endif // SANITIZER_INTERCEPT_FREE_SIZED
+
+#if SANITIZER_INTERCEPT_FREE_ALIGNED_SIZED
+INTERCEPTOR(void, free_aligned_sized, void *ptr, uptr alignment, uptr size) {
+  if (DlsymAlloc::PointerIsMine(ptr))
+    return DlsymAlloc::Free(ptr);
+  GET_STACK_TRACE_FREE;
+  memprof_delete(ptr, size, alignment, &stack, FROM_MALLOC);
+}
+#endif // SANITIZER_INTERCEPT_FREE_ALIGNED_SIZED
+
 INTERCEPTOR(void *, malloc, uptr size) {
   if (DlsymAlloc::Use())
     return DlsymAlloc::Allocate(size);

>From 5aba7583845510480b02495fd2d95a76065e8263 Mon Sep 17 00:00:00 2001
From: David Carlier <devnexen at gmail.com>
Date: Tue, 19 Aug 2025 05:55:49 +0100
Subject: [PATCH 2/2] add test

---
 .../test/memprof/TestCases/free_sized.cpp     | 22 +++++++++++++++++++
 1 file changed, 22 insertions(+)
 create mode 100644 compiler-rt/test/memprof/TestCases/free_sized.cpp

diff --git a/compiler-rt/test/memprof/TestCases/free_sized.cpp b/compiler-rt/test/memprof/TestCases/free_sized.cpp
new file mode 100644
index 0000000000000..101f1e75cfdaf
--- /dev/null
+++ b/compiler-rt/test/memprof/TestCases/free_sized.cpp
@@ -0,0 +1,22 @@
+// RUN: %clangxx_memprof -O2 %s -o %t && %run %t 2>&1 | FileCheck %s
+
+#include <stdlib.h>
+#include <unistd.h>
+
+extern "C" {
+void free_sized(void *ptr, [[maybe_unused]] size_t) { free(ptr); }
+void free_aligned_sized(void *ptr, [[maybe_unused]] size_t alignment,
+                        [[maybe_unused]] size_t size) {
+  free(ptr);
+}
+}
+
+int main() {
+  void *p = aligned_alloc(16, 10);
+  free_aligned_sized(p, 16, 10);
+  // CHECK: Recorded MIBs
+  p = malloc(10);
+  free_sized(p, 10);
+  // CHECK: Recorded MIBs
+  return 0;
+}



More information about the llvm-commits mailing list