diff options
author | Kostya Serebryany <kcc@google.com> | 2017-01-26 01:04:54 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2017-01-26 01:04:54 +0000 |
commit | d0ecb4c69e7e74048b527daa72baac1318d5f306 (patch) | |
tree | 04449efe178ccc240285fd65f7d9d85b88f052fb /llvm/lib/Fuzzer/FuzzerTracePC.cpp | |
parent | 5dd55e8405d66842219883a55563ec45cc010da4 (diff) | |
download | bcm5719-llvm-d0ecb4c69e7e74048b527daa72baac1318d5f306.tar.gz bcm5719-llvm-d0ecb4c69e7e74048b527daa72baac1318d5f306.zip |
[libFuzzer] simplify the code for __sanitizer_cov_trace_pc_guard and make sure it is not asan/msan-instrumented
llvm-svn: 293125
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerTracePC.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerTracePC.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp index 80a59031e6f..8b3ea60e8e5 100644 --- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp +++ b/llvm/lib/Fuzzer/FuzzerTracePC.cpp @@ -28,10 +28,10 @@ namespace fuzzer { TracePC TPC; +ATTRIBUTE_NO_SANITIZE_ALL void TracePC::HandleTrace(uint32_t *Guard, uintptr_t PC) { uint32_t Idx = *Guard; - if (!Idx) return; - PCs[Idx % kNumPCs] = PC; + PCs[Idx] = PC; Counters[Idx % kNumCounters]++; } @@ -46,8 +46,16 @@ size_t TracePC::GetTotalPCCoverage() { void TracePC::HandleInit(uint32_t *Start, uint32_t *Stop) { if (Start == Stop || *Start) return; assert(NumModules < sizeof(Modules) / sizeof(Modules[0])); - for (uint32_t *P = Start; P < Stop; P++) - *P = ++NumGuards; + for (uint32_t *P = Start; P < Stop; P++) { + NumGuards++; + if (NumGuards == kNumPCs) { + RawPrint( + "WARNING: The binary has too many instrumented PCs.\n" + " You may want to reduce the size of the binary\n" + " for more efficient fuzzing and precise coverage data\n"); + } + *P = NumGuards % kNumPCs; + } Modules[NumModules].Start = Start; Modules[NumModules].Stop = Stop; NumModules++; @@ -258,6 +266,7 @@ void TracePC::HandleCmp(uintptr_t PC, T Arg1, T Arg2) { extern "C" { ATTRIBUTE_INTERFACE +ATTRIBUTE_NO_SANITIZE_ALL void __sanitizer_cov_trace_pc_guard(uint32_t *Guard) { uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0)); fuzzer::TPC.HandleTrace(Guard, PC); |