[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