Skip to content

Commit 12e137a

Browse files
committed
[NFC][sanitizer] Consolidate malloc hook invocations
1 parent f0ba32d commit 12e137a

File tree

9 files changed

+24
-96
lines changed

9 files changed

+24
-96
lines changed

compiler-rt/lib/asan/asan_allocator.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -597,8 +597,6 @@ struct Allocator {
597597
CHECK_LE(alloc_beg + sizeof(LargeChunkHeader), chunk_beg);
598598
reinterpret_cast<LargeChunkHeader *>(alloc_beg)->Set(m);
599599
}
600-
if (&__sanitizer_malloc_hook)
601-
__sanitizer_malloc_hook(res, size);
602600
RunMallocHooks(res, size);
603601
return res;
604602
}
@@ -680,8 +678,6 @@ struct Allocator {
680678
return;
681679
}
682680

683-
if (&__sanitizer_free_hook)
684-
__sanitizer_free_hook(ptr);
685681
RunFreeHooks(ptr);
686682

687683
// Must mark the chunk as quarantined before any changes to its metadata.
@@ -1221,16 +1217,3 @@ int __asan_update_allocation_context(void* addr) {
12211217
GET_STACK_TRACE_MALLOC;
12221218
return instance.UpdateAllocationStack((uptr)addr, &stack);
12231219
}
1224-
1225-
#if !SANITIZER_SUPPORTS_WEAK_HOOKS
1226-
// Provide default (no-op) implementation of malloc hooks.
1227-
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_malloc_hook,
1228-
void *ptr, uptr size) {
1229-
(void)ptr;
1230-
(void)size;
1231-
}
1232-
1233-
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_free_hook, void *ptr) {
1234-
(void)ptr;
1235-
}
1236-
#endif

compiler-rt/lib/hwasan/hwasan_allocator.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,6 @@ static void *HwasanAllocate(StackTrace *stack, uptr orig_size, uptr alignment,
199199
}
200200
}
201201

202-
if (&__sanitizer_malloc_hook)
203-
__sanitizer_malloc_hook(user_ptr, size);
204202
RunMallocHooks(user_ptr, size);
205203
return user_ptr;
206204
}
@@ -228,8 +226,6 @@ static bool CheckInvalidFree(StackTrace *stack, void *untagged_ptr,
228226

229227
static void HwasanDeallocate(StackTrace *stack, void *tagged_ptr) {
230228
CHECK(tagged_ptr);
231-
if (&__sanitizer_free_hook)
232-
__sanitizer_free_hook(tagged_ptr);
233229
RunFreeHooks(tagged_ptr);
234230

235231
bool in_taggable_region =

compiler-rt/lib/lsan/lsan_allocator.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,6 @@ void *Allocate(const StackTrace &stack, uptr size, uptr alignment,
104104
if (cleared && allocator.FromPrimary(p))
105105
memset(p, 0, size);
106106
RegisterAllocation(stack, p, size);
107-
if (&__sanitizer_malloc_hook)
108-
__sanitizer_malloc_hook(p, size);
109107
RunMallocHooks(p, size);
110108
return p;
111109
}
@@ -121,8 +119,6 @@ static void *Calloc(uptr nmemb, uptr size, const StackTrace &stack) {
121119
}
122120

123121
void Deallocate(void *p) {
124-
if (&__sanitizer_free_hook)
125-
__sanitizer_free_hook(p);
126122
RunFreeHooks(p);
127123
RegisterDeallocation(p);
128124
allocator.Deallocate(GetAllocatorCache(), p);
@@ -366,16 +362,4 @@ uptr __sanitizer_get_allocated_size(const void *p) {
366362
return GetMallocUsableSize(p);
367363
}
368364

369-
#if !SANITIZER_SUPPORTS_WEAK_HOOKS
370-
// Provide default (no-op) implementation of malloc hooks.
371-
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
372-
void __sanitizer_malloc_hook(void *ptr, uptr size) {
373-
(void)ptr;
374-
(void)size;
375-
}
376-
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
377-
void __sanitizer_free_hook(void *ptr) {
378-
(void)ptr;
379-
}
380-
#endif
381365
} // extern "C"

compiler-rt/lib/memprof/memprof_allocator.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -430,8 +430,6 @@ struct Allocator {
430430
CHECK_LE(alloc_beg + sizeof(LargeChunkHeader), chunk_beg);
431431
reinterpret_cast<LargeChunkHeader *>(alloc_beg)->Set(m);
432432
}
433-
if (&__sanitizer_malloc_hook)
434-
__sanitizer_malloc_hook(res, size);
435433
RunMallocHooks(res, size);
436434
return res;
437435
}
@@ -442,8 +440,6 @@ struct Allocator {
442440
if (p == 0)
443441
return;
444442

445-
if (&__sanitizer_free_hook)
446-
__sanitizer_free_hook(ptr);
447443
RunFreeHooks(ptr);
448444

449445
uptr chunk_beg = p - kChunkHeaderSize;
@@ -698,19 +694,6 @@ uptr memprof_malloc_usable_size(const void *ptr, uptr pc, uptr bp) {
698694
// ---------------------- Interface ---------------- {{{1
699695
using namespace __memprof;
700696

701-
#if !SANITIZER_SUPPORTS_WEAK_HOOKS
702-
// Provide default (no-op) implementation of malloc hooks.
703-
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_malloc_hook, void *ptr,
704-
uptr size) {
705-
(void)ptr;
706-
(void)size;
707-
}
708-
709-
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_free_hook, void *ptr) {
710-
(void)ptr;
711-
}
712-
#endif
713-
714697
uptr __sanitizer_get_estimated_allocated_size(uptr size) { return size; }
715698

716699
int __sanitizer_get_ownership(const void *p) {

compiler-rt/lib/msan/msan_allocator.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,20 +194,14 @@ static void *MsanAllocate(StackTrace *stack, uptr size, uptr alignment,
194194
__msan_set_origin(allocated, size, o.raw_id());
195195
}
196196
}
197-
if (&__sanitizer_malloc_hook) {
198-
UnpoisonParam(2);
199-
__sanitizer_malloc_hook(allocated, size);
200-
}
197+
UnpoisonParam(2);
201198
RunMallocHooks(allocated, size);
202199
return allocated;
203200
}
204201

205202
void MsanDeallocate(StackTrace *stack, void *p) {
206203
CHECK(p);
207-
if (&__sanitizer_free_hook) {
208-
UnpoisonParam(1);
209-
__sanitizer_free_hook(p);
210-
}
204+
UnpoisonParam(1);
211205
RunFreeHooks(p);
212206

213207
Metadata *meta = reinterpret_cast<Metadata *>(allocator.GetMetaData(p));

compiler-rt/lib/sanitizer_common/sanitizer_common.cpp

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,18 +310,22 @@ struct MallocFreeHook {
310310

311311
static MallocFreeHook MFHooks[kMaxMallocFreeHooks];
312312

313-
void RunMallocHooks(const void *ptr, uptr size) {
313+
void RunMallocHooks(void *ptr, uptr size) {
314+
__sanitizer_malloc_hook(ptr, size);
314315
for (int i = 0; i < kMaxMallocFreeHooks; i++) {
315316
auto hook = MFHooks[i].malloc_hook;
316-
if (!hook) return;
317+
if (!hook)
318+
break;
317319
hook(ptr, size);
318320
}
319321
}
320322

321-
void RunFreeHooks(const void *ptr) {
323+
void RunFreeHooks(void *ptr) {
324+
__sanitizer_free_hook(ptr);
322325
for (int i = 0; i < kMaxMallocFreeHooks; i++) {
323326
auto hook = MFHooks[i].free_hook;
324-
if (!hook) return;
327+
if (!hook)
328+
break;
325329
hook(ptr);
326330
}
327331
}
@@ -369,4 +373,16 @@ int __sanitizer_install_malloc_and_free_hooks(void (*malloc_hook)(const void *,
369373
void (*free_hook)(const void *)) {
370374
return InstallMallocFreeHooks(malloc_hook, free_hook);
371375
}
376+
377+
// Provide default (no-op) implementation of malloc hooks.
378+
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_malloc_hook, void *ptr,
379+
uptr size) {
380+
(void)ptr;
381+
(void)size;
382+
}
383+
384+
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_free_hook, void *ptr) {
385+
(void)ptr;
386+
}
387+
372388
} // extern "C"

compiler-rt/lib/sanitizer_common/sanitizer_common.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ void SetShadowRegionHugePageMode(uptr addr, uptr length);
170170
bool DontDumpShadowMemory(uptr addr, uptr length);
171171
// Check if the built VMA size matches the runtime one.
172172
void CheckVMASize();
173-
void RunMallocHooks(const void *ptr, uptr size);
174-
void RunFreeHooks(const void *ptr);
173+
void RunMallocHooks(void *ptr, uptr size);
174+
void RunFreeHooks(void *ptr);
175175

176176
class ReservedAddressRange {
177177
public:

compiler-rt/lib/tsan/rtl-old/tsan_mman.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,6 @@
2020
#include "tsan_report.h"
2121
#include "tsan_flags.h"
2222

23-
// May be overriden by front-end.
24-
SANITIZER_WEAK_DEFAULT_IMPL
25-
void __sanitizer_malloc_hook(void *ptr, uptr size) {
26-
(void)ptr;
27-
(void)size;
28-
}
29-
30-
SANITIZER_WEAK_DEFAULT_IMPL
31-
void __sanitizer_free_hook(void *ptr) {
32-
(void)ptr;
33-
}
34-
3523
namespace __tsan {
3624

3725
struct MapUnmapCallback {
@@ -356,15 +344,13 @@ void invoke_malloc_hook(void *ptr, uptr size) {
356344
ThreadState *thr = cur_thread();
357345
if (ctx == 0 || !ctx->initialized || thr->ignore_interceptors)
358346
return;
359-
__sanitizer_malloc_hook(ptr, size);
360347
RunMallocHooks(ptr, size);
361348
}
362349

363350
void invoke_free_hook(void *ptr) {
364351
ThreadState *thr = cur_thread();
365352
if (ctx == 0 || !ctx->initialized || thr->ignore_interceptors)
366353
return;
367-
__sanitizer_free_hook(ptr);
368354
RunFreeHooks(ptr);
369355
}
370356

compiler-rt/lib/tsan/rtl/tsan_mman.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,6 @@
2020
#include "tsan_report.h"
2121
#include "tsan_flags.h"
2222

23-
// May be overriden by front-end.
24-
SANITIZER_WEAK_DEFAULT_IMPL
25-
void __sanitizer_malloc_hook(void *ptr, uptr size) {
26-
(void)ptr;
27-
(void)size;
28-
}
29-
30-
SANITIZER_WEAK_DEFAULT_IMPL
31-
void __sanitizer_free_hook(void *ptr) {
32-
(void)ptr;
33-
}
34-
3523
namespace __tsan {
3624

3725
struct MapUnmapCallback {
@@ -378,15 +366,13 @@ void invoke_malloc_hook(void *ptr, uptr size) {
378366
ThreadState *thr = cur_thread();
379367
if (ctx == 0 || !ctx->initialized || thr->ignore_interceptors)
380368
return;
381-
__sanitizer_malloc_hook(ptr, size);
382369
RunMallocHooks(ptr, size);
383370
}
384371

385372
void invoke_free_hook(void *ptr) {
386373
ThreadState *thr = cur_thread();
387374
if (ctx == 0 || !ctx->initialized || thr->ignore_interceptors)
388375
return;
389-
__sanitizer_free_hook(ptr);
390376
RunFreeHooks(ptr);
391377
}
392378

0 commit comments

Comments
 (0)