From 7de73da8dad3ee6c5bca676b679bcdab84050ea2 Mon Sep 17 00:00:00 2001 From: Kirill Stoimenov Date: Wed, 21 Jul 2021 16:20:35 +0000 Subject: [PATCH] [asan] Modified ASAN_MEMORY_ACCESS_CALLBACK to use a function call to ReportGenericErrorWrapper. This change eliminate the stack frame for the fast path and improves runtime performance. Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D106505 --- compiler-rt/lib/asan/asan_rtl.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/compiler-rt/lib/asan/asan_rtl.cpp b/compiler-rt/lib/asan/asan_rtl.cpp index e06a111..bfaa3bc 100644 --- a/compiler-rt/lib/asan/asan_rtl.cpp +++ b/compiler-rt/lib/asan/asan_rtl.cpp @@ -82,6 +82,17 @@ void ShowStatsAndAbort() { Die(); } +NOINLINE +static void ReportGenericErrorWrapper(uptr addr, bool is_write, int size, + int exp_arg, bool fatal) { + if (__asan_test_only_reported_buggy_pointer) { + *__asan_test_only_reported_buggy_pointer = addr; + } else { + GET_CALLER_PC_BP_SP; + ReportGenericError(pc, bp, sp, addr, is_write, size, exp_arg, fatal); + } +} + // --------------- LowLevelAllocateCallbac ---------- {{{1 static void OnLowLevelAllocate(uptr ptr, uptr size) { PoisonShadow(ptr, size, kAsanInternalHeapMagic); @@ -145,12 +156,7 @@ ASAN_REPORT_ERROR_N(store, true) if (UNLIKELY(size >= SHADOW_GRANULARITY || \ ((s8)((addr & (SHADOW_GRANULARITY - 1)) + size - 1)) >= \ (s8)s)) { \ - if (__asan_test_only_reported_buggy_pointer) { \ - *__asan_test_only_reported_buggy_pointer = addr; \ - } else { \ - GET_CALLER_PC_BP_SP; \ - ReportGenericError(pc, bp, sp, addr, is_write, size, exp_arg, fatal); \ - } \ + ReportGenericErrorWrapper(addr, is_write, size, exp_arg, fatal); \ } \ } -- 2.7.4