From nobody Sat Oct 10 22:44:55 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4j2JhS3lqsz6vyZj for ; Sat, 10 Oct 2026 22:44:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4j2JhR6PtZz4gpY for ; Sat, 10 Oct 2026 22:44:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791672295; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=boiguUpLem/VOuvmI1SM8x5L2JV2NdoguXgoGTCCMR0=; b=kNywvTBbBUlnRxRHjC23PxLRXvM2ZLMwfzoHj9umwXV5GiIBYwO5Yu1b+3kiwyCAaT+fWc 4+/GwHDnUMZafS2V9gCdy0GqYKDcjmtTR+gv000aNf9/Z5kFSKcP1ClUCEu0l+xspEtnFg kbvGMm8k7yLC4wmTC3Epi4fNyWAxFQJ5jCkNIEm57v6yODV8deybter4NBm36aWgaHcY3M af1JQGxBdUicr85aZ853L4GrxRfKwHJ6UosYBAOSmfXAC8iMb9QuueHt92JIFFeUP90Gcl vnc+Ik62/uB4XMrbE899Q4WS4HOLF/l3RWH9a5Oiy6H2oidwyHqk3q7NQxhGQA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791672295; b=OPGPTnuvqr+tu7Z10VJEd33d0nBtFI8x5JdYdR5viRaArbxpWE6HzEHBuKAfCIaZ6sm+Or Lq6it3W9YXMPpgSfqL26vIbzrzHCgsJuQztUSedn4rUD2ZMhjOXUSpJHgpuJtcgF+Px0kl YLvT0v6lsEHCLdCkYSmrrplqCOYw/fBsL1Pg3QOUtfVvq4O3MPVNpqbpOcG5NbcK2uGpaR eHVB0DYEltQm1hA0N6gltwqvO3+AKaVwCBMjO9/7jlsqCi0RZ6FeZGr2kCri9ueK4e30H/ 6ZxFSm0iXJ4+3G2tlg19R5gJWqt5fbMvS/JgHlCqT/R9Fy9pksgetS4eTBc13Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791672295; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=boiguUpLem/VOuvmI1SM8x5L2JV2NdoguXgoGTCCMR0=; b=jJnmtYtHHrn2gkQCfDy8QjK7j8IdrbQKDluf8nWjKdPwE7aUEkoQdfdoY/htqMJQj4mr6Q zgtGrkDpOtdzwIKRF5E13BQOUMUmfAgNauVoaTs2zap6VqSXb/H76cMZygAug76oFITq59 X/2tWA+05PQ/GSjsvagrjK47gwLm3CaXvPy7M+kMJzDOcaBZ7M3hVIKLMhEj8uTG9D/lXK LdTwI9AHALLjnioGthYflv1YBXO8TNuWCwREp1JOGtqeR0568FUM/HgnEYmnjmPE2uZuMI v81HNKN6EiTcAzbUz8IxjVlWeK1nFmvFcMdXQPLEG6smcVm4H/59CjfhzBrt0Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4j2JhR3SMPzDyQ for ; Sat, 10 Oct 2026 22:44:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1d109 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 10 Oct 2026 22:44:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dimitry Andric Subject: git: 6b0f64133cd9 - main - Merge commit 681c2ee4dfbf from llvm-project (by Justin King): List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: Commit messages for the main branch of the src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dim X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6b0f64133cd930fec8971aa85f4ef36a67b8334f Auto-Submitted: auto-generated Date: Sat, 10 Oct 2026 22:44:55 +0000 Message-Id: <6acabfe7.1d109.5f7ff2f9@gitrepo.freebsd.org> The branch main has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=6b0f64133cd930fec8971aa85f4ef36a67b8334f commit 6b0f64133cd930fec8971aa85f4ef36a67b8334f Author: Dimitry Andric AuthorDate: 2026-10-10 21:44:49 +0000 Commit: Dimitry Andric CommitDate: 2026-10-10 22:44:17 +0000 Merge commit 681c2ee4dfbf from llvm-project (by Justin King): asan: refactor interceptor allocation/deallocation functions (#145087) Do some refactoring to allocation/deallocation interceptors. Expose explicit per-alloc_type functions and stop accepting explicit AllocType. This ensures we do not accidentally mix. NOTE: This change rejects attempts to call `operator new(, static_cast(0))`. For https://github.com/llvm/llvm-project/issues/144435 Signed-off-by: Justin King This a prerequisite for adding sanitizer interceptors for free_sized(3) and free_aligned_sized(3). PR: 298943 MFC after: 1 week --- .../compiler-rt/lib/asan/asan_allocator.cpp | 107 +++++++++++++++++++-- .../compiler-rt/lib/asan/asan_allocator.h | 24 ++++- .../llvm-project/compiler-rt/lib/asan/asan_mac.cpp | 2 +- .../compiler-rt/lib/asan/asan_malloc_linux.cpp | 8 +- .../compiler-rt/lib/asan/asan_malloc_mac.cpp | 6 +- .../compiler-rt/lib/asan/asan_malloc_win.cpp | 10 +- .../compiler-rt/lib/asan/asan_new_delete.cpp | 64 ++++++------ 7 files changed, 161 insertions(+), 60 deletions(-) diff --git a/contrib/llvm-project/compiler-rt/lib/asan/asan_allocator.cpp b/contrib/llvm-project/compiler-rt/lib/asan/asan_allocator.cpp index d3c0288285b8..9ebe4d08ec8c 100644 --- a/contrib/llvm-project/compiler-rt/lib/asan/asan_allocator.cpp +++ b/contrib/llvm-project/compiler-rt/lib/asan/asan_allocator.cpp @@ -1007,13 +1007,8 @@ void PrintInternalAllocatorStats() { instance.PrintStats(); } -void asan_free(void *ptr, BufferedStackTrace *stack, AllocType alloc_type) { - instance.Deallocate(ptr, 0, 0, stack, alloc_type); -} - -void asan_delete(void *ptr, uptr size, uptr alignment, - BufferedStackTrace *stack, AllocType alloc_type) { - instance.Deallocate(ptr, size, alignment, stack, alloc_type); +void asan_free(void *ptr, BufferedStackTrace *stack) { + instance.Deallocate(ptr, 0, 0, stack, FROM_MALLOC); } void *asan_malloc(uptr size, BufferedStackTrace *stack) { @@ -1068,8 +1063,7 @@ void *asan_pvalloc(uptr size, BufferedStackTrace *stack) { instance.Allocate(size, PageSize, stack, FROM_MALLOC, true)); } -void *asan_memalign(uptr alignment, uptr size, BufferedStackTrace *stack, - AllocType alloc_type) { +void *asan_memalign(uptr alignment, uptr size, BufferedStackTrace *stack) { if (UNLIKELY(!IsPowerOfTwo(alignment))) { errno = errno_EINVAL; if (AllocatorMayReturnNull()) @@ -1077,7 +1071,7 @@ void *asan_memalign(uptr alignment, uptr size, BufferedStackTrace *stack, ReportInvalidAllocationAlignment(alignment, stack); } return SetErrnoOnNull( - instance.Allocate(size, alignment, stack, alloc_type, true)); + instance.Allocate(size, alignment, stack, FROM_MALLOC, true)); } void *asan_aligned_alloc(uptr alignment, uptr size, BufferedStackTrace *stack) { @@ -1117,6 +1111,99 @@ uptr asan_malloc_usable_size(const void *ptr, uptr pc, uptr bp) { return usable_size; } +namespace { + +void *asan_new(uptr size, BufferedStackTrace *stack, bool array) { + return SetErrnoOnNull( + instance.Allocate(size, 0, stack, array ? FROM_NEW_BR : FROM_NEW, true)); +} + +void *asan_new_aligned(uptr size, uptr alignment, BufferedStackTrace *stack, + bool array) { + if (UNLIKELY(alignment == 0 || !IsPowerOfTwo(alignment))) { + errno = errno_EINVAL; + if (AllocatorMayReturnNull()) + return nullptr; + ReportInvalidAllocationAlignment(alignment, stack); + } + return SetErrnoOnNull(instance.Allocate( + size, alignment, stack, array ? FROM_NEW_BR : FROM_NEW, true)); +} + +void asan_delete(void *ptr, BufferedStackTrace *stack, bool array) { + instance.Deallocate(ptr, 0, 0, stack, array ? FROM_NEW_BR : FROM_NEW); +} + +void asan_delete_aligned(void *ptr, uptr alignment, BufferedStackTrace *stack, + bool array) { + instance.Deallocate(ptr, 0, alignment, stack, array ? FROM_NEW_BR : FROM_NEW); +} + +void asan_delete_sized(void *ptr, uptr size, BufferedStackTrace *stack, + bool array) { + instance.Deallocate(ptr, size, 0, stack, array ? FROM_NEW_BR : FROM_NEW); +} + +void asan_delete_sized_aligned(void *ptr, uptr size, uptr alignment, + BufferedStackTrace *stack, bool array) { + instance.Deallocate(ptr, size, alignment, stack, + array ? FROM_NEW_BR : FROM_NEW); +} + +} // namespace + +void *asan_new(uptr size, BufferedStackTrace *stack) { + return asan_new(size, stack, /*array=*/false); +} + +void *asan_new_aligned(uptr size, uptr alignment, BufferedStackTrace *stack) { + return asan_new_aligned(size, alignment, stack, /*array=*/false); +} + +void *asan_new_array(uptr size, BufferedStackTrace *stack) { + return asan_new(size, stack, /*array=*/true); +} + +void *asan_new_array_aligned(uptr size, uptr alignment, + BufferedStackTrace *stack) { + return asan_new_aligned(size, alignment, stack, /*array=*/true); +} + +void asan_delete(void *ptr, BufferedStackTrace *stack) { + asan_delete(ptr, stack, /*array=*/false); +} + +void asan_delete_aligned(void *ptr, uptr alignment, BufferedStackTrace *stack) { + asan_delete_aligned(ptr, alignment, stack, /*array=*/false); +} + +void asan_delete_sized(void *ptr, uptr size, BufferedStackTrace *stack) { + asan_delete_sized(ptr, size, stack, /*array=*/false); +} + +void asan_delete_sized_aligned(void *ptr, uptr size, uptr alignment, + BufferedStackTrace *stack) { + asan_delete_sized_aligned(ptr, size, alignment, stack, /*array=*/false); +} + +void asan_delete_array(void *ptr, BufferedStackTrace *stack) { + asan_delete(ptr, stack, /*array=*/true); +} + +void asan_delete_array_aligned(void *ptr, uptr alignment, + BufferedStackTrace *stack) { + asan_delete_aligned(ptr, alignment, stack, /*array=*/true); +} + +void asan_delete_array_sized(void *ptr, uptr size, BufferedStackTrace *stack) { + asan_delete_sized(ptr, size, stack, /*array=*/true); +} + +void asan_delete_array_sized_aligned(void *ptr, uptr size, uptr alignment, + BufferedStackTrace *stack) { + asan_delete_sized_aligned(ptr, size, alignment, stack, /*array=*/true); +} + uptr asan_mz_size(const void *ptr) { return instance.AllocationSize(reinterpret_cast(ptr)); } diff --git a/contrib/llvm-project/compiler-rt/lib/asan/asan_allocator.h b/contrib/llvm-project/compiler-rt/lib/asan/asan_allocator.h index 247d8bb77c98..fdf456473fb0 100644 --- a/contrib/llvm-project/compiler-rt/lib/asan/asan_allocator.h +++ b/contrib/llvm-project/compiler-rt/lib/asan/asan_allocator.h @@ -270,11 +270,8 @@ struct AsanThreadLocalMallocStorage { AsanThreadLocalMallocStorage() {} }; -void *asan_memalign(uptr alignment, uptr size, BufferedStackTrace *stack, - AllocType alloc_type); -void asan_free(void *ptr, BufferedStackTrace *stack, AllocType alloc_type); -void asan_delete(void *ptr, uptr size, uptr alignment, - BufferedStackTrace *stack, AllocType alloc_type); +void *asan_memalign(uptr alignment, uptr size, BufferedStackTrace *stack); +void asan_free(void *ptr, BufferedStackTrace *stack); void *asan_malloc(uptr size, BufferedStackTrace *stack); void *asan_calloc(uptr nmemb, uptr size, BufferedStackTrace *stack); @@ -289,6 +286,23 @@ int asan_posix_memalign(void **memptr, uptr alignment, uptr size, BufferedStackTrace *stack); uptr asan_malloc_usable_size(const void *ptr, uptr pc, uptr bp); +void *asan_new(uptr size, BufferedStackTrace *stack); +void *asan_new_aligned(uptr size, uptr alignment, BufferedStackTrace *stack); +void *asan_new_array(uptr size, BufferedStackTrace *stack); +void *asan_new_array_aligned(uptr size, uptr alignment, + BufferedStackTrace *stack); +void asan_delete(void *ptr, BufferedStackTrace *stack); +void asan_delete_aligned(void *ptr, uptr alignment, BufferedStackTrace *stack); +void asan_delete_sized(void *ptr, uptr size, BufferedStackTrace *stack); +void asan_delete_sized_aligned(void *ptr, uptr size, uptr alignment, + BufferedStackTrace *stack); +void asan_delete_array(void *ptr, BufferedStackTrace *stack); +void asan_delete_array_aligned(void *ptr, uptr alignment, + BufferedStackTrace *stack); +void asan_delete_array_sized(void *ptr, uptr size, BufferedStackTrace *stack); +void asan_delete_array_sized_aligned(void *ptr, uptr size, uptr alignment, + BufferedStackTrace *stack); + uptr asan_mz_size(const void *ptr); void asan_mz_force_lock(); void asan_mz_force_unlock(); diff --git a/contrib/llvm-project/compiler-rt/lib/asan/asan_mac.cpp b/contrib/llvm-project/compiler-rt/lib/asan/asan_mac.cpp index be513a03ed5c..4bc2c88e7d88 100644 --- a/contrib/llvm-project/compiler-rt/lib/asan/asan_mac.cpp +++ b/contrib/llvm-project/compiler-rt/lib/asan/asan_mac.cpp @@ -176,7 +176,7 @@ void asan_dispatch_call_block_and_release(void *block) { asan_register_worker_thread(context->parent_tid, &stack); // Call the original dispatcher for the block. context->func(context->block); - asan_free(context, &stack, FROM_MALLOC); + asan_free(context, &stack); } } // namespace __asan diff --git a/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp b/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp index 3f023d4c2ed0..add57318785b 100644 --- a/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp +++ b/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp @@ -49,7 +49,7 @@ INTERCEPTOR(void, free, void *ptr) { if (DlsymAlloc::PointerIsMine(ptr)) return DlsymAlloc::Free(ptr); GET_STACK_TRACE_FREE; - asan_free(ptr, &stack, FROM_MALLOC); + asan_free(ptr, &stack); } #if SANITIZER_INTERCEPT_CFREE @@ -57,7 +57,7 @@ INTERCEPTOR(void, cfree, void *ptr) { if (DlsymAlloc::PointerIsMine(ptr)) return DlsymAlloc::Free(ptr); GET_STACK_TRACE_FREE; - asan_free(ptr, &stack, FROM_MALLOC); + asan_free(ptr, &stack); } #endif // SANITIZER_INTERCEPT_CFREE @@ -93,12 +93,12 @@ INTERCEPTOR(void*, reallocarray, void *ptr, uptr nmemb, uptr size) { #if SANITIZER_INTERCEPT_MEMALIGN INTERCEPTOR(void*, memalign, uptr boundary, uptr size) { GET_STACK_TRACE_MALLOC; - return asan_memalign(boundary, size, &stack, FROM_MALLOC); + return asan_memalign(boundary, size, &stack); } INTERCEPTOR(void*, __libc_memalign, uptr boundary, uptr size) { GET_STACK_TRACE_MALLOC; - return asan_memalign(boundary, size, &stack, FROM_MALLOC); + return asan_memalign(boundary, size, &stack); } #endif // SANITIZER_INTERCEPT_MEMALIGN diff --git a/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_mac.cpp b/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_mac.cpp index f25d7e190153..a442bdbbaa4d 100644 --- a/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_mac.cpp +++ b/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_mac.cpp @@ -31,7 +31,7 @@ using namespace __asan; # define COMMON_MALLOC_FORCE_UNLOCK() asan_mz_force_unlock() # define COMMON_MALLOC_MEMALIGN(alignment, size) \ GET_STACK_TRACE_MALLOC; \ - void *p = asan_memalign(alignment, size, &stack, FROM_MALLOC) + void *p = asan_memalign(alignment, size, &stack) # define COMMON_MALLOC_MALLOC(size) \ GET_STACK_TRACE_MALLOC; \ void *p = asan_malloc(size, &stack) @@ -46,10 +46,10 @@ using namespace __asan; int res = asan_posix_memalign(memptr, alignment, size, &stack); # define COMMON_MALLOC_VALLOC(size) \ GET_STACK_TRACE_MALLOC; \ - void *p = asan_memalign(GetPageSizeCached(), size, &stack, FROM_MALLOC); + void *p = asan_memalign(GetPageSizeCached(), size, &stack); # define COMMON_MALLOC_FREE(ptr) \ GET_STACK_TRACE_FREE; \ - asan_free(ptr, &stack, FROM_MALLOC); + asan_free(ptr, &stack); # define COMMON_MALLOC_SIZE(ptr) uptr size = asan_mz_size(ptr); # define COMMON_MALLOC_FILL_STATS(zone, stats) \ AsanMallocStats malloc_stats; \ diff --git a/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_win.cpp b/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_win.cpp index 3278f0721987..8d98da940800 100644 --- a/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_win.cpp +++ b/contrib/llvm-project/compiler-rt/lib/asan/asan_malloc_win.cpp @@ -69,7 +69,7 @@ __declspec(noinline) size_t _msize_base(void *ptr) { return _msize(ptr); } __declspec(noinline) void free(void *ptr) { GET_STACK_TRACE_FREE; - return asan_free(ptr, &stack, FROM_MALLOC); + return asan_free(ptr, &stack); } __declspec(noinline) void _free_dbg(void *ptr, int) { free(ptr); } @@ -252,7 +252,7 @@ INTERCEPTOR_WINAPI(BOOL, HeapFree, HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) { CHECK((HEAP_FREE_UNSUPPORTED_FLAGS & dwFlags) != 0 && "unsupported flags"); } GET_STACK_TRACE_FREE; - asan_free(lpMem, &stack, FROM_MALLOC); + asan_free(lpMem, &stack); return true; } @@ -306,7 +306,7 @@ void *SharedReAlloc(ReAllocFunction reallocFunc, SizeFunction heapSizeFunc, if (replacement_alloc) { size_t old_size = heapSizeFunc(hHeap, dwFlags, lpMem); if (old_size == ((size_t)0) - 1) { - asan_free(replacement_alloc, &stack, FROM_MALLOC); + asan_free(replacement_alloc, &stack); return nullptr; } REAL(memcpy)(replacement_alloc, lpMem, old_size); @@ -331,7 +331,7 @@ void *SharedReAlloc(ReAllocFunction reallocFunc, SizeFunction heapSizeFunc, old_usable_size = asan_malloc_usable_size(lpMem, pc, bp); REAL(memcpy)(replacement_alloc, lpMem, Min(dwBytes, old_usable_size)); - asan_free(lpMem, &stack, FROM_MALLOC); + asan_free(lpMem, &stack); } return replacement_alloc; } @@ -429,7 +429,7 @@ INTERCEPTOR_WINAPI(BOOL, RtlFreeHeap, HANDLE HeapHandle, DWORD Flags, return REAL(RtlFreeHeap)(HeapHandle, Flags, BaseAddress); } GET_STACK_TRACE_FREE; - asan_free(BaseAddress, &stack, FROM_MALLOC); + asan_free(BaseAddress, &stack); return true; } diff --git a/contrib/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp b/contrib/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp index 99c7c9938dfb..d7ed5b570728 100644 --- a/contrib/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp +++ b/contrib/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp @@ -60,42 +60,42 @@ enum class align_val_t: size_t {}; // TODO(alekseyshl): throw std::bad_alloc instead of dying on OOM. // For local pool allocation, align to SHADOW_GRANULARITY to match asan // allocator behavior. -#define OPERATOR_NEW_BODY \ - GET_STACK_TRACE_MALLOC; \ - void *res = asan_memalign(0, size, &stack, FROM_NEW); \ - if (UNLIKELY(!res)) \ - ReportOutOfMemory(size, &stack); \ +#define OPERATOR_NEW_BODY \ + GET_STACK_TRACE_MALLOC; \ + void *res = asan_new(size, &stack); \ + if (UNLIKELY(!res)) \ + ReportOutOfMemory(size, &stack); \ return res #define OPERATOR_NEW_BODY_NOTHROW \ GET_STACK_TRACE_MALLOC; \ - return asan_memalign(0, size, &stack, FROM_NEW) -#define OPERATOR_NEW_BODY_ARRAY \ - GET_STACK_TRACE_MALLOC; \ - void *res = asan_memalign(0, size, &stack, FROM_NEW_BR); \ - if (UNLIKELY(!res)) \ - ReportOutOfMemory(size, &stack); \ + return asan_new(size, &stack) +#define OPERATOR_NEW_BODY_ARRAY \ + GET_STACK_TRACE_MALLOC; \ + void *res = asan_new_array(size, &stack); \ + if (UNLIKELY(!res)) \ + ReportOutOfMemory(size, &stack); \ return res #define OPERATOR_NEW_BODY_ARRAY_NOTHROW \ GET_STACK_TRACE_MALLOC; \ - return asan_memalign(0, size, &stack, FROM_NEW_BR) -#define OPERATOR_NEW_BODY_ALIGN \ - GET_STACK_TRACE_MALLOC; \ - void *res = asan_memalign((uptr)align, size, &stack, FROM_NEW); \ - if (UNLIKELY(!res)) \ - ReportOutOfMemory(size, &stack); \ + return asan_new_array(size, &stack) +#define OPERATOR_NEW_BODY_ALIGN \ + GET_STACK_TRACE_MALLOC; \ + void *res = asan_new_aligned(size, static_cast(align), &stack); \ + if (UNLIKELY(!res)) \ + ReportOutOfMemory(size, &stack); \ return res #define OPERATOR_NEW_BODY_ALIGN_NOTHROW \ GET_STACK_TRACE_MALLOC; \ - return asan_memalign((uptr)align, size, &stack, FROM_NEW) -#define OPERATOR_NEW_BODY_ALIGN_ARRAY \ - GET_STACK_TRACE_MALLOC; \ - void *res = asan_memalign((uptr)align, size, &stack, FROM_NEW_BR); \ - if (UNLIKELY(!res)) \ - ReportOutOfMemory(size, &stack); \ + return asan_new_aligned(size, static_cast(align), &stack) +#define OPERATOR_NEW_BODY_ALIGN_ARRAY \ + GET_STACK_TRACE_MALLOC; \ + void *res = asan_new_array_aligned(size, static_cast(align), &stack); \ + if (UNLIKELY(!res)) \ + ReportOutOfMemory(size, &stack); \ return res #define OPERATOR_NEW_BODY_ALIGN_ARRAY_NOTHROW \ GET_STACK_TRACE_MALLOC; \ - return asan_memalign((uptr)align, size, &stack, FROM_NEW_BR) + return asan_new_array_aligned(size, static_cast(align), &stack) // On OS X it's not enough to just provide our own 'operator new' and // 'operator delete' implementations, because they're going to be in the @@ -149,28 +149,28 @@ INTERCEPTOR(void *, _ZnamRKSt9nothrow_t, size_t size, std::nothrow_t const&) { #define OPERATOR_DELETE_BODY \ GET_STACK_TRACE_FREE; \ - asan_delete(ptr, 0, 0, &stack, FROM_NEW) + asan_delete(ptr, &stack) #define OPERATOR_DELETE_BODY_ARRAY \ GET_STACK_TRACE_FREE; \ - asan_delete(ptr, 0, 0, &stack, FROM_NEW_BR) + asan_delete_array(ptr, &stack) #define OPERATOR_DELETE_BODY_ALIGN \ GET_STACK_TRACE_FREE; \ - asan_delete(ptr, 0, static_cast(align), &stack, FROM_NEW) + asan_delete_aligned(ptr, static_cast(align), &stack) #define OPERATOR_DELETE_BODY_ALIGN_ARRAY \ GET_STACK_TRACE_FREE; \ - asan_delete(ptr, 0, static_cast(align), &stack, FROM_NEW_BR) + asan_delete_array_aligned(ptr, static_cast(align), &stack) #define OPERATOR_DELETE_BODY_SIZE \ GET_STACK_TRACE_FREE; \ - asan_delete(ptr, size, 0, &stack, FROM_NEW) + asan_delete_sized(ptr, size, &stack) #define OPERATOR_DELETE_BODY_SIZE_ARRAY \ GET_STACK_TRACE_FREE; \ - asan_delete(ptr, size, 0, &stack, FROM_NEW_BR) + asan_delete_array_sized(ptr, size, &stack) #define OPERATOR_DELETE_BODY_SIZE_ALIGN \ GET_STACK_TRACE_FREE; \ - asan_delete(ptr, size, static_cast(align), &stack, FROM_NEW) + asan_delete_sized_aligned(ptr, size, static_cast(align), &stack) #define OPERATOR_DELETE_BODY_SIZE_ALIGN_ARRAY \ GET_STACK_TRACE_FREE; \ - asan_delete(ptr, size, static_cast(align), &stack, FROM_NEW_BR) + asan_delete_array_sized_aligned(ptr, size, static_cast(align), &stack) #if !SANITIZER_APPLE CXX_OPERATOR_ATTRIBUTE