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); diff --git a/compiler-rt/test/memprof/TestCases/memprof_histogram_uint8.cpp b/compiler-rt/test/memprof/TestCases/memprof_histogram_uint8.cpp index ef6fb33ffeeaa..5d6be314df32d 100644 --- a/compiler-rt/test/memprof/TestCases/memprof_histogram_uint8.cpp +++ b/compiler-rt/test/memprof/TestCases/memprof_histogram_uint8.cpp @@ -8,6 +8,8 @@ #include #include +extern "C" void free_sized(void *p, size_t size); + int main() { // Allocate memory that will create a histogram char *buffer = (char *)malloc(1024); @@ -28,7 +30,7 @@ int main() { } // Free the memory to trigger MIB creation with histogram - free(buffer); + free_sized(buffer, 1024); printf("Test completed successfully\n"); return 0;