aboutsummaryrefslogtreecommitdiff
path: root/src/test/fuzz/fuzz.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/fuzz/fuzz.cpp')
-rw-r--r--src/test/fuzz/fuzz.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/test/fuzz/fuzz.cpp b/src/test/fuzz/fuzz.cpp
index f9915187bd..9a54a44bd3 100644
--- a/src/test/fuzz/fuzz.cpp
+++ b/src/test/fuzz/fuzz.cpp
@@ -79,6 +79,26 @@ void FuzzFrameworkRegisterTarget(std::string_view name, TypeTestOneInput target,
static std::string_view g_fuzz_target;
static const TypeTestOneInput* g_test_one_input{nullptr};
+
+#if defined(__clang__) && defined(__linux__)
+extern "C" void __llvm_profile_reset_counters(void) __attribute__((weak));
+extern "C" void __gcov_reset(void) __attribute__((weak));
+
+void ResetCoverageCounters()
+{
+ if (__llvm_profile_reset_counters) {
+ __llvm_profile_reset_counters();
+ }
+
+ if (__gcov_reset) {
+ __gcov_reset();
+ }
+}
+#else
+void ResetCoverageCounters() {}
+#endif
+
+
void initialize()
{
// Terminate immediately if a fuzzing harness ever tries to create a TCP socket.
@@ -129,6 +149,8 @@ void initialize()
Assert(!g_test_one_input);
g_test_one_input = &it->second.test_one_input;
it->second.opts.init();
+
+ ResetCoverageCounters();
}
#if defined(PROVIDE_FUZZ_MAIN_FUNCTION)