[llvm-commits] [compiler-rt] r152767 - in /compiler-rt/trunk/lib/asan: asan_interceptors.cc asan_mapping.h asan_poisoning.cc

Kostya Serebryany kcc at google.com
Wed Mar 14 18:18:07 PDT 2012


Author: kcc
Date: Wed Mar 14 20:18:06 2012
New Revision: 152767

URL: http://llvm.org/viewvc/llvm-project?rev=152767&view=rev
Log:
[asan] performance optimization: make sure the check for poisoned shadow inside inteceptors is inlined

Modified:
    compiler-rt/trunk/lib/asan/asan_interceptors.cc
    compiler-rt/trunk/lib/asan/asan_mapping.h
    compiler-rt/trunk/lib/asan/asan_poisoning.cc

Modified: compiler-rt/trunk/lib/asan/asan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=152767&r1=152766&r2=152767&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Wed Mar 14 20:18:06 2012
@@ -64,7 +64,7 @@
 // Instruments read/write access to a single byte in memory.
 // On error calls __asan_report_error, which aborts the program.
 static NOINLINE void AccessAddress(uintptr_t address, bool isWrite) {
-  if (__asan_address_is_poisoned((void*)address)) {
+  if (AddressIsPoisoned(address)) {
     GET_BP_PC_SP;
     __asan_report_error(pc, bp, sp, address, isWrite, /* access_size */ 1);
   }

Modified: compiler-rt/trunk/lib/asan/asan_mapping.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mapping.h?rev=152767&r1=152766&r2=152767&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_mapping.h (original)
+++ compiler-rt/trunk/lib/asan/asan_mapping.h Wed Mar 14 20:18:06 2012
@@ -95,6 +95,18 @@
   return (a & (SHADOW_GRANULARITY - 1)) == 0;
 }
 
+static inline bool AddressIsPoisoned(uintptr_t a) {
+  const size_t kAccessSize = 1;
+  uint8_t *shadow_address = (uint8_t*)MemToShadow(a);
+  int8_t shadow_value = *shadow_address;
+  if (shadow_value) {
+    uint8_t last_accessed_byte = (a & (SHADOW_GRANULARITY - 1))
+                                 + kAccessSize - 1;
+    return (last_accessed_byte >= shadow_value);
+  }
+  return false;
+}
+
 }  // namespace __asan
 
 #endif  // ASAN_MAPPING_H

Modified: compiler-rt/trunk/lib/asan/asan_poisoning.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_poisoning.cc?rev=152767&r1=152766&r2=152767&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_poisoning.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_poisoning.cc Wed Mar 14 20:18:06 2012
@@ -147,14 +147,5 @@
 }
 
 bool __asan_address_is_poisoned(void const volatile *addr) {
-  const size_t kAccessSize = 1;
-  uintptr_t address = (uintptr_t)addr;
-  uint8_t *shadow_address = (uint8_t*)MemToShadow(address);
-  int8_t shadow_value = *shadow_address;
-  if (shadow_value) {
-    uint8_t last_accessed_byte = (address & (SHADOW_GRANULARITY - 1))
-                                 + kAccessSize - 1;
-    return (last_accessed_byte >= shadow_value);
-  }
-  return false;
+  return __asan::AddressIsPoisoned((uintptr_t)addr);
 }





More information about the llvm-commits mailing list