
Summary: This code already works and passes some number of tests. There is need to finish remaining sanitizers to get better coverage. Many tests fail due to overly long file names of executables (>31). This is a current shortcoming of the NetBSD 8(beta) kernel, as certain functions can fail (like retrieving file name of executable). Sponsored by <The NetBSD Foundation> Reviewers: joerg, kcc, vitalybuka, george.karpenkov Reviewed By: kcc Subscribers: mgorny, llvm-commits, #sanitizers Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D37304 llvm-svn: 312183
42 lines
1.4 KiB
C++
42 lines
1.4 KiB
C++
//===- FuzzerExtraCounters.cpp - Extra coverage counters ------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
// Extra coverage counters defined by user code.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "FuzzerDefs.h"
|
|
|
|
#if LIBFUZZER_LINUX || LIBFUZZER_NETBSD
|
|
__attribute__((weak)) extern uint8_t __start___libfuzzer_extra_counters;
|
|
__attribute__((weak)) extern uint8_t __stop___libfuzzer_extra_counters;
|
|
|
|
namespace fuzzer {
|
|
uint8_t *ExtraCountersBegin() { return &__start___libfuzzer_extra_counters; }
|
|
uint8_t *ExtraCountersEnd() { return &__stop___libfuzzer_extra_counters; }
|
|
ATTRIBUTE_NO_SANITIZE_ALL
|
|
void ClearExtraCounters() { // hand-written memset, don't asan-ify.
|
|
uintptr_t *Beg = reinterpret_cast<uintptr_t*>(ExtraCountersBegin());
|
|
uintptr_t *End = reinterpret_cast<uintptr_t*>(ExtraCountersEnd());
|
|
for (; Beg < End; Beg++) {
|
|
*Beg = 0;
|
|
__asm__ __volatile__("" : : : "memory");
|
|
}
|
|
}
|
|
|
|
} // namespace fuzzer
|
|
|
|
#else
|
|
// TODO: implement for other platforms.
|
|
namespace fuzzer {
|
|
uint8_t *ExtraCountersBegin() { return nullptr; }
|
|
uint8_t *ExtraCountersEnd() { return nullptr; }
|
|
void ClearExtraCounters() {}
|
|
} // namespace fuzzer
|
|
|
|
#endif
|