summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Fuzzer/FuzzerTracePC.cpp
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2017-07-31 20:20:59 +0000
committerKostya Serebryany <kcc@google.com>2017-07-31 20:20:59 +0000
commitb2a1eba2f5491127c734cf3d7736396157d0cea9 (patch)
tree97914aed9d60659ea2ef111342e3f77685f89158 /llvm/lib/Fuzzer/FuzzerTracePC.cpp
parentb77d0a5cf1957439bd7f9536ed531c3e6fe7af37 (diff)
downloadbcm5719-llvm-b2a1eba2f5491127c734cf3d7736396157d0cea9.tar.gz
bcm5719-llvm-b2a1eba2f5491127c734cf3d7736396157d0cea9.zip
[libFuzzer] implement __sanitizer_cov_pcs_init and add pc-table to build flags for one test (for now)
llvm-svn: 309615
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerTracePC.cpp')
-rw-r--r--llvm/lib/Fuzzer/FuzzerTracePC.cpp31
1 files changed, 26 insertions, 5 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp
index bf2a6110e85..1c4c24032fc 100644
--- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp
+++ b/llvm/lib/Fuzzer/FuzzerTracePC.cpp
@@ -66,6 +66,15 @@ void TracePC::HandleInline8bitCountersInit(uint8_t *Start, uint8_t *Stop) {
NumInline8bitCounters += Stop - Start;
}
+void TracePC::HandlePCsInit(const uint8_t *Start, const uint8_t *Stop) {
+ const uintptr_t *B = reinterpret_cast<const uintptr_t *>(Start);
+ const uintptr_t *E = reinterpret_cast<const uintptr_t *>(Stop);
+ if (NumPCTables && ModulePCTable[NumPCTables - 1].Start == B) return;
+ assert(NumPCTables < sizeof(ModulePCTable) / sizeof(ModulePCTable[0]));
+ ModulePCTable[NumPCTables++] = {B, E};
+ NumPCsInPCTables = E - B;
+}
+
void TracePC::HandleInit(uint32_t *Start, uint32_t *Stop) {
if (Start == Stop || *Start) return;
assert(NumModules < sizeof(Modules) / sizeof(Modules[0]));
@@ -85,17 +94,28 @@ void TracePC::HandleInit(uint32_t *Start, uint32_t *Stop) {
}
void TracePC::PrintModuleInfo() {
- Printf("INFO: Loaded %zd modules (%zd guards): ", NumModules, NumGuards);
- for (size_t i = 0; i < NumModules; i++)
- Printf("[%p, %p), ", Modules[i].Start, Modules[i].Stop);
- Printf("\n");
+ if (NumGuards) {
+ Printf("INFO: Loaded %zd modules (%zd guards): ", NumModules, NumGuards);
+ for (size_t i = 0; i < NumModules; i++)
+ Printf("[%p, %p), ", Modules[i].Start, Modules[i].Stop);
+ Printf("\n");
+ }
if (NumModulesWithInline8bitCounters) {
- Printf("INFO: Loaded %zd modules with %zd inline 8-bit counters\n",
+ Printf("INFO: Loaded %zd modules with %zd inline 8-bit counters: ",
NumModulesWithInline8bitCounters, NumInline8bitCounters);
for (size_t i = 0; i < NumModulesWithInline8bitCounters; i++)
Printf("[%p, %p), ", ModuleCounters[i].Start, ModuleCounters[i].Stop);
Printf("\n");
}
+ if (NumPCTables) {
+ Printf("INFO: Loaded %zd PC tables, %zd PCs: ", NumPCTables,
+ NumPCsInPCTables);
+ for (size_t i = 0; i < NumPCTables; i++) {
+ Printf("[%p,%p), ", ModulePCTable[i].Start, ModulePCTable[i].Stop,
+ ModulePCTable[i].Stop - ModulePCTable[i].Start);
+ }
+ Printf("\n");
+ }
}
ATTRIBUTE_NO_SANITIZE_ALL
@@ -354,6 +374,7 @@ void __sanitizer_cov_8bit_counters_init(uint8_t *Start, uint8_t *Stop) {
ATTRIBUTE_INTERFACE
void __sanitizer_cov_pcs_init(const uint8_t *pcs_beg, const uint8_t *pcs_end) {
+ fuzzer::TPC.HandlePCsInit(pcs_beg, pcs_end);
}
ATTRIBUTE_INTERFACE
OpenPOWER on IntegriCloud