From b9e31d7fcde1281c2026c23b64935ba5af6aaf4c Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Wed, 14 May 2014 14:03:31 +0000 Subject: [PATCH] [asan] use some LIKELY/UNLIKELY llvm-svn: 208776 --- compiler-rt/lib/asan/asan_allocator2.cc | 2 +- compiler-rt/lib/asan/asan_interceptors.cc | 38 ++++++++++--------- compiler-rt/lib/asan/asan_interceptors.h | 2 +- compiler-rt/lib/asan/asan_malloc_linux.cc | 2 +- compiler-rt/lib/asan/asan_malloc_mac.cc | 8 ++-- compiler-rt/lib/asan/asan_rtl.cc | 4 +- compiler-rt/lib/asan/asan_stack.h | 2 +- .../sanitizer_internal_defs.h | 4 +- 8 files changed, 32 insertions(+), 30 deletions(-) diff --git a/compiler-rt/lib/asan/asan_allocator2.cc b/compiler-rt/lib/asan/asan_allocator2.cc index e5626bf26591..b6513b257b69 100644 --- a/compiler-rt/lib/asan/asan_allocator2.cc +++ b/compiler-rt/lib/asan/asan_allocator2.cc @@ -281,7 +281,7 @@ void ReInitializeAllocator() { static void *Allocate(uptr size, uptr alignment, StackTrace *stack, AllocType alloc_type, bool can_fill) { - if (!asan_inited) + if (UNLIKELY(!asan_inited)) AsanInitFromRtl(); Flags &fl = *flags(); CHECK(stack); diff --git a/compiler-rt/lib/asan/asan_interceptors.cc b/compiler-rt/lib/asan/asan_interceptors.cc index 4cbc8abd1c35..cdcee9bc1326 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cc +++ b/compiler-rt/lib/asan/asan_interceptors.cc @@ -117,13 +117,15 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *) #define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \ ASAN_WRITE_RANGE(ptr, size) #define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) ASAN_READ_RANGE(ptr, size) -#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ - do { \ - if (asan_init_is_running) return REAL(func)(__VA_ARGS__); \ - ctx = 0; \ - (void) ctx; \ - if (SANITIZER_MAC && !asan_inited) return REAL(func)(__VA_ARGS__); \ - ENSURE_ASAN_INITED(); \ +#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ + do { \ + if (asan_init_is_running) \ + return REAL(func)(__VA_ARGS__); \ + ctx = 0; \ + (void) ctx; \ + if (SANITIZER_MAC && UNLIKELY(!asan_inited)) \ + return REAL(func)(__VA_ARGS__); \ + ENSURE_ASAN_INITED(); \ } while (false) #define COMMON_INTERCEPTOR_FD_ACQUIRE(ctx, fd) \ do { \ @@ -328,7 +330,7 @@ static inline int CharCmp(unsigned char c1, unsigned char c2) { } INTERCEPTOR(int, memcmp, const void *a1, const void *a2, uptr size) { - if (!asan_inited) return internal_memcmp(a1, a2, size); + if (UNLIKELY(!asan_inited)) return internal_memcmp(a1, a2, size); ENSURE_ASAN_INITED(); if (flags()->replace_intrin) { if (flags()->strict_memcmp) { @@ -356,7 +358,7 @@ INTERCEPTOR(int, memcmp, const void *a1, const void *a2, uptr size) { } void *__asan_memcpy(void *to, const void *from, uptr size) { - if (!asan_inited) return internal_memcpy(to, from, size); + if (UNLIKELY(!asan_inited)) return internal_memcpy(to, from, size); // memcpy is called during __asan_init() from the internals // of printf(...). if (asan_init_is_running) { @@ -376,7 +378,7 @@ void *__asan_memcpy(void *to, const void *from, uptr size) { } void *__asan_memset(void *block, int c, uptr size) { - if (!asan_inited) return internal_memset(block, c, size); + if (UNLIKELY(!asan_inited)) return internal_memset(block, c, size); // memset is called inside Printf. if (asan_init_is_running) { return REAL(memset)(block, c, size); @@ -389,7 +391,7 @@ void *__asan_memset(void *block, int c, uptr size) { } void *__asan_memmove(void *to, const void *from, uptr size) { - if (!asan_inited) + if (UNLIKELY(!asan_inited)) return internal_memmove(to, from, size); ENSURE_ASAN_INITED(); if (flags()->replace_intrin) { @@ -422,7 +424,7 @@ INTERCEPTOR(void*, memset, void *block, int c, uptr size) { } INTERCEPTOR(char*, strchr, const char *str, int c) { - if (!asan_inited) return internal_strchr(str, c); + if (UNLIKELY(!asan_inited)) return internal_strchr(str, c); // strchr is called inside create_purgeable_zone() when MallocGuardEdges=1 is // used. if (asan_init_is_running) { @@ -491,7 +493,7 @@ INTERCEPTOR(char*, strncat, char *to, const char *from, uptr size) { INTERCEPTOR(char*, strcpy, char *to, const char *from) { // NOLINT #if SANITIZER_MAC - if (!asan_inited) return REAL(strcpy)(to, from); // NOLINT + if (UNLIKELY(!asan_inited)) return REAL(strcpy)(to, from); // NOLINT #endif // strcpy is called from malloc_default_purgeable_zone() // in __asan::ReplaceSystemAlloc() on Mac. @@ -510,7 +512,7 @@ INTERCEPTOR(char*, strcpy, char *to, const char *from) { // NOLINT #if ASAN_INTERCEPT_STRDUP INTERCEPTOR(char*, strdup, const char *s) { - if (!asan_inited) return internal_strdup(s); + if (UNLIKELY(!asan_inited)) return internal_strdup(s); ENSURE_ASAN_INITED(); uptr length = REAL(strlen)(s); if (flags()->replace_str) { @@ -524,7 +526,7 @@ INTERCEPTOR(char*, strdup, const char *s) { #endif INTERCEPTOR(uptr, strlen, const char *s) { - if (!asan_inited) return internal_strlen(s); + if (UNLIKELY(!asan_inited)) return internal_strlen(s); // strlen is called from malloc_default_purgeable_zone() // in __asan::ReplaceSystemAlloc() on Mac. if (asan_init_is_running) { @@ -606,7 +608,7 @@ INTERCEPTOR(long, strtol, const char *nptr, // NOLINT INTERCEPTOR(int, atoi, const char *nptr) { #if SANITIZER_MAC - if (!asan_inited) return REAL(atoi)(nptr); + if (UNLIKELY(!asan_inited)) return REAL(atoi)(nptr); #endif ENSURE_ASAN_INITED(); if (!flags()->replace_str) { @@ -625,7 +627,7 @@ INTERCEPTOR(int, atoi, const char *nptr) { INTERCEPTOR(long, atol, const char *nptr) { // NOLINT #if SANITIZER_MAC - if (!asan_inited) return REAL(atol)(nptr); + if (UNLIKELY(!asan_inited)) return REAL(atol)(nptr); #endif ENSURE_ASAN_INITED(); if (!flags()->replace_str) { @@ -682,7 +684,7 @@ static void AtCxaAtexit(void *unused) { INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg, void *dso_handle) { #if SANITIZER_MAC - if (!asan_inited) return REAL(__cxa_atexit)(func, arg, dso_handle); + if (UNLIKELY(!asan_inited)) return REAL(__cxa_atexit)(func, arg, dso_handle); #endif ENSURE_ASAN_INITED(); int res = REAL(__cxa_atexit)(func, arg, dso_handle); diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index ecdf1f0262cb..3b7b2653b3fd 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -96,7 +96,7 @@ void InitializeAsanInterceptors(); #define ENSURE_ASAN_INITED() do { \ CHECK(!asan_init_is_running); \ - if (!asan_inited) { \ + if (UNLIKELY(!asan_inited)) { \ AsanInitFromRtl(); \ } \ } while (0) diff --git a/compiler-rt/lib/asan/asan_malloc_linux.cc b/compiler-rt/lib/asan/asan_malloc_linux.cc index f676dc2768a0..52fd4b1e9501 100644 --- a/compiler-rt/lib/asan/asan_malloc_linux.cc +++ b/compiler-rt/lib/asan/asan_malloc_linux.cc @@ -77,7 +77,7 @@ INTERCEPTOR(void*, malloc, uptr size) { } INTERCEPTOR(void*, calloc, uptr nmemb, uptr size) { - if (!asan_inited) { + if (UNLIKELY(!asan_inited)) { // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym. const uptr kCallocPoolSize = 1024; static uptr calloc_memory_for_dlsym[kCallocPoolSize]; diff --git a/compiler-rt/lib/asan/asan_malloc_mac.cc b/compiler-rt/lib/asan/asan_malloc_mac.cc index 589474b9714c..2ef4c77ff31f 100644 --- a/compiler-rt/lib/asan/asan_malloc_mac.cc +++ b/compiler-rt/lib/asan/asan_malloc_mac.cc @@ -159,7 +159,7 @@ size_t mz_size(malloc_zone_t* zone, const void* ptr) { } void *mz_malloc(malloc_zone_t *zone, size_t size) { - if (!asan_inited) { + if (UNLIKELY(!asan_inited)) { CHECK(system_malloc_zone); return malloc_zone_malloc(system_malloc_zone, size); } @@ -168,7 +168,7 @@ void *mz_malloc(malloc_zone_t *zone, size_t size) { } void *mz_calloc(malloc_zone_t *zone, size_t nmemb, size_t size) { - if (!asan_inited) { + if (UNLIKELY(!asan_inited)) { // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym. const size_t kCallocPoolSize = 1024; static uptr calloc_memory_for_dlsym[kCallocPoolSize]; @@ -184,7 +184,7 @@ void *mz_calloc(malloc_zone_t *zone, size_t nmemb, size_t size) { } void *mz_valloc(malloc_zone_t *zone, size_t size) { - if (!asan_inited) { + if (UNLIKELY(!asan_inited)) { CHECK(system_malloc_zone); return malloc_zone_valloc(system_malloc_zone, size); } @@ -242,7 +242,7 @@ void mz_destroy(malloc_zone_t* zone) { #if defined(MAC_OS_X_VERSION_10_6) && \ MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 void *mz_memalign(malloc_zone_t *zone, size_t align, size_t size) { - if (!asan_inited) { + if (UNLIKELY(!asan_inited)) { CHECK(system_malloc_zone); return malloc_zone_memalign(system_malloc_zone, align, size); } diff --git a/compiler-rt/lib/asan/asan_rtl.cc b/compiler-rt/lib/asan/asan_rtl.cc index 3a63c3ffba8b..d349ae1bf518 100644 --- a/compiler-rt/lib/asan/asan_rtl.cc +++ b/compiler-rt/lib/asan/asan_rtl.cc @@ -552,7 +552,7 @@ static void PrintAddressSpaceLayout() { } static void AsanInitInternal() { - if (asan_inited) return; + if (LIKELY(asan_inited)) return; SanitizerToolName = "AddressSanitizer"; CHECK(!asan_init_is_running && "ASan init calls itself!"); asan_init_is_running = true; @@ -708,7 +708,7 @@ public: // NOLINT AsanInitializer() { AsanCheckIncompatibleRT(); AsanCheckDynamicRTPrereqs(); - if (!asan_inited) + if (UNLIKELY(!asan_inited)) __asan_init(); } }; diff --git a/compiler-rt/lib/asan/asan_stack.h b/compiler-rt/lib/asan/asan_stack.h index 5db1d1a26485..032f729dcfe4 100644 --- a/compiler-rt/lib/asan/asan_stack.h +++ b/compiler-rt/lib/asan/asan_stack.h @@ -32,7 +32,7 @@ void GetStackTraceWithPcBpAndContext(StackTrace *stack, uptr max_depth, uptr pc, #else AsanThread *t; stack->size = 0; - if (asan_inited) { + if (LIKELY(asan_inited)) { if ((t = GetCurrentThread()) && !t->isUnwinding()) { uptr stack_top = t->stack_top(); uptr stack_bottom = t->stack_bottom(); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h index e7a1e4868fa7..d5d01f1d312d 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h @@ -199,7 +199,7 @@ void NORETURN CheckFailed(const char *file, int line, const char *cond, // Check macro #define RAW_CHECK_MSG(expr, msg) do { \ - if (!(expr)) { \ + if (UNLIKELY(!(expr))) { \ RawWrite(msg); \ Die(); \ } \ @@ -211,7 +211,7 @@ void NORETURN CheckFailed(const char *file, int line, const char *cond, do { \ __sanitizer::u64 v1 = (u64)(c1); \ __sanitizer::u64 v2 = (u64)(c2); \ - if (!(v1 op v2)) \ + if (UNLIKELY(!(v1 op v2))) \ __sanitizer::CheckFailed(__FILE__, __LINE__, \ "(" #c1 ") " #op " (" #c2 ")", v1, v2); \ } while (false) \