diff options
Diffstat (limited to 'llvm/lib/Fuzzer')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerLoop.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerTracePC.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerTracePC.h | 6 |
3 files changed, 13 insertions, 12 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerLoop.cpp b/llvm/lib/Fuzzer/FuzzerLoop.cpp index f7d4e4ef362..197b80e9473 100644 --- a/llvm/lib/Fuzzer/FuzzerLoop.cpp +++ b/llvm/lib/Fuzzer/FuzzerLoop.cpp @@ -500,7 +500,8 @@ void Fuzzer::ExecuteCallback(const uint8_t *Data, size_t Size) { UnitStartTime = system_clock::now(); ResetCounters(); // Reset coverage right before the callback. TPC.ResetMaps(); - TPC.ResetGuards(); + if (Options.UseCounters) + TPC.ResetGuards(); int Res = CB(DataCopy, Size); UnitStopTime = system_clock::now(); (void)Res; diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp index 9789d5df852..44149922a15 100644 --- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp +++ b/llvm/lib/Fuzzer/FuzzerTracePC.cpp @@ -20,8 +20,8 @@ namespace fuzzer { TracePC TPC; -void TracePC::HandleTrace(uintptr_t *Guard, uintptr_t PC) { - uintptr_t Idx = *Guard; +void TracePC::HandleTrace(uint32_t *Guard, uintptr_t PC) { + uint32_t Idx = *Guard; if (!Idx) return; uint8_t *CounterPtr = &Counters[Idx % kNumCounters]; uint8_t Counter = *CounterPtr; @@ -43,10 +43,10 @@ void TracePC::HandleTrace(uintptr_t *Guard, uintptr_t PC) { } } -void TracePC::HandleInit(uintptr_t *Start, uintptr_t *Stop) { +void TracePC::HandleInit(uint32_t *Start, uint32_t *Stop) { if (Start == Stop || *Start) return; assert(NumModules < sizeof(Modules) / sizeof(Modules[0])); - for (uintptr_t *P = Start; P < Stop; P++) + for (uint32_t *P = Start; P < Stop; P++) *P = ++NumGuards; Modules[NumModules].Start = Start; Modules[NumModules].Stop = Stop; @@ -61,9 +61,9 @@ void TracePC::PrintModuleInfo() { } void TracePC::ResetGuards() { - uintptr_t N = 0; + uint32_t N = 0; for (size_t M = 0; M < NumModules; M++) - for (uintptr_t *X = Modules[M].Start; X < Modules[M].Stop; X++) + for (uint32_t *X = Modules[M].Start; X < Modules[M].Stop; X++) *X = ++N; assert(N == NumGuards); } @@ -138,13 +138,13 @@ void TracePC::PrintFeatureSet() { extern "C" { __attribute__((visibility("default"))) -void __sanitizer_cov_trace_pc_guard(uintptr_t *Guard) { +void __sanitizer_cov_trace_pc_guard(uint32_t *Guard) { uintptr_t PC = (uintptr_t)__builtin_return_address(0); fuzzer::TPC.HandleTrace(Guard, PC); } __attribute__((visibility("default"))) -void __sanitizer_cov_trace_pc_guard_init(uintptr_t *Start, uintptr_t *Stop) { +void __sanitizer_cov_trace_pc_guard_init(uint32_t *Start, uint32_t *Stop) { fuzzer::TPC.HandleInit(Start, Stop); } diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.h b/llvm/lib/Fuzzer/FuzzerTracePC.h index 0f2b6a878c4..3f4c7833540 100644 --- a/llvm/lib/Fuzzer/FuzzerTracePC.h +++ b/llvm/lib/Fuzzer/FuzzerTracePC.h @@ -19,8 +19,8 @@ namespace fuzzer { class TracePC { public: - void HandleTrace(uintptr_t *guard, uintptr_t PC); - void HandleInit(uintptr_t *start, uintptr_t *stop); + void HandleTrace(uint32_t *guard, uintptr_t PC); + void HandleInit(uint32_t *start, uint32_t *stop); void HandleCallerCallee(uintptr_t Caller, uintptr_t Callee); void HandleValueProfile(size_t Value) { ValueProfileMap.AddValue(Value); } size_t GetTotalPCCoverage() { return TotalPCCoverage; } @@ -71,7 +71,7 @@ private: } struct Module { - uintptr_t *Start, *Stop; + uint32_t *Start, *Stop; }; Module Modules[4096]; |