diff options
author | Kostya Serebryany <kcc@google.com> | 2016-12-16 22:45:25 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2016-12-16 22:45:25 +0000 |
commit | 3a4e2dd92fc47098b9b5d6d42756ce59c4a67267 (patch) | |
tree | 126e8664a967c70a36ea1485a9e4821581dfbd65 /llvm/lib/Fuzzer | |
parent | be7003f99c778beb4917b0caa19c974b0b5bc6fb (diff) | |
download | bcm5719-llvm-3a4e2dd92fc47098b9b5d6d42756ce59c4a67267.tar.gz bcm5719-llvm-3a4e2dd92fc47098b9b5d6d42756ce59c4a67267.zip |
[libFuzzer] avoid msan false positives in more cases
llvm-svn: 289999
Diffstat (limited to 'llvm/lib/Fuzzer')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerDefs.h | 7 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerLoop.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerTracePC.cpp | 8 |
3 files changed, 12 insertions, 6 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerDefs.h b/llvm/lib/Fuzzer/FuzzerDefs.h index a699045842b..0f5b8a7cf21 100644 --- a/llvm/lib/Fuzzer/FuzzerDefs.h +++ b/llvm/lib/Fuzzer/FuzzerDefs.h @@ -44,6 +44,13 @@ #define ATTRIBUTE_TARGET_POPCNT #endif + +#ifdef __clang__ // avoid gcc warning. +# define ATTRIBUTE_NO_SANITIZE_MEMORY __attribute__((no_sanitize("memory"))) +#else +# define ATTRIBUTE_NO_SANITIZE_MEMORY +#endif + namespace fuzzer { template <class T> T Min(T a, T b) { return a < b ? a : b; } diff --git a/llvm/lib/Fuzzer/FuzzerLoop.cpp b/llvm/lib/Fuzzer/FuzzerLoop.cpp index c666de8f226..d4a36d9d44a 100644 --- a/llvm/lib/Fuzzer/FuzzerLoop.cpp +++ b/llvm/lib/Fuzzer/FuzzerLoop.cpp @@ -137,6 +137,7 @@ struct MallocFreeTracer { static MallocFreeTracer AllocTracer; +ATTRIBUTE_NO_SANITIZE_MEMORY void MallocHook(const volatile void *ptr, size_t size) { size_t N = AllocTracer.Mallocs++; F->HandleMalloc(size); @@ -146,6 +147,8 @@ void MallocHook(const volatile void *ptr, size_t size) { EF->__sanitizer_print_stack_trace(); } } + +ATTRIBUTE_NO_SANITIZE_MEMORY void FreeHook(const volatile void *ptr) { size_t N = AllocTracer.Frees++; if (int TraceLevel = AllocTracer.TraceLevel) { diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp index 781bd56eb7e..6cb1c66e205 100644 --- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp +++ b/llvm/lib/Fuzzer/FuzzerTracePC.cpp @@ -198,9 +198,7 @@ void TracePC::PrintCoverage() { // For cmp instructions the interesting value is a XOR of the parameters. // The interesting value is mixed up with the PC and is then added to the map. -#ifdef __clang__ // avoid gcc warning. -__attribute__((no_sanitize("memory"))) -#endif +ATTRIBUTE_NO_SANITIZE_MEMORY void TracePC::AddValueForMemcmp(void *caller_pc, const void *s1, const void *s2, size_t n) { if (!n) return; @@ -218,9 +216,7 @@ void TracePC::AddValueForMemcmp(void *caller_pc, const void *s1, const void *s2, TPC.HandleValueProfile((PC & 4095) | (Idx << 12)); } -#ifdef __clang__ // avoid gcc warning. -__attribute__((no_sanitize("memory"))) -#endif +ATTRIBUTE_NO_SANITIZE_MEMORY void TracePC::AddValueForStrcmp(void *caller_pc, const char *s1, const char *s2, size_t n) { if (!n) return; |