summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Fuzzer
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Fuzzer')
-rw-r--r--llvm/lib/Fuzzer/FuzzerLoop.cpp3
-rw-r--r--llvm/lib/Fuzzer/FuzzerTracePC.cpp16
-rw-r--r--llvm/lib/Fuzzer/FuzzerTracePC.h6
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];
OpenPOWER on IntegriCloud