Lines Matching defs:PC
1 //===- FuzzerTracePC.cpp - PC tracing--------------------------------------===//
11 // the callback required for -fsanitize-coverage=trace-pc-guard instrumentation.
167 Printf("INFO: Loaded %zd PC tables (%zd PCs): ", NumPCTables,
177 Printf("ERROR: The size of coverage PC tables does not match the\n"
199 inline ALWAYS_INLINE uintptr_t GetPreviousInstructionPc(uintptr_t PC) {
202 // so we return (pc-2) in that case in order to be safe.
203 // For A32 mode we return (pc-4) because all instructions are 32 bit long.
204 return (PC - 3) & (~1);
207 return PC - 4;
209 return PC - 8;
211 return PC - 1;
217 inline ALWAYS_INLINE uintptr_t GetNextInstructionPc(uintptr_t PC) {
219 return PC + 8;
222 return PC + 4;
224 return PC + 1;
230 auto ObservePC = [&](uintptr_t PC) {
231 if (ObservedPCs.insert(PC).second && DoPrintNewPCs) {
232 PrintPC("\tNEW_PC: %p %F %L", "\tNEW_PC: %p", GetNextInstructionPc(PC));
239 if (++ObservedFuncs[TE.PC] == 1 && NumPrintNewFuncs)
240 CoveredFuncs.push_back(TE.PC);
241 ObservePC(TE.PC);
273 static std::string GetModuleName(uintptr_t PC) {
277 reinterpret_cast<void *>(PC), ModulePathRaw,
288 auto ModuleName = GetModuleName(M.Start->PC);
295 if (ObservedFuncs.count(FE->PC))
296 CB(FE, NextFE, ObservedFuncs[FE->PC]);
311 auto Name = DescribePC("%F", GetNextInstructionPc(PCTE.Start[I].PC));
347 auto VisualizePC = GetNextInstructionPc(First->PC);
359 if (!ObservedPCs.count(TE->PC))
360 UncoveredPCs.push_back(TE->PC);
364 for (auto PC: UncoveredPCs)
366 DescribePC("%s:%l", GetNextInstructionPc(PC)).c_str());
388 if (ObservedFuncs.count(TE.PC)) {
389 auto VisualizePC = GetNextInstructionPc(TE.PC);
410 // The interesting value is mixed up with the PC and is then added to the map.
434 size_t PC = reinterpret_cast<size_t>(caller_pc);
435 size_t Idx = (PC & 4095) | (I << 12);
443 void TracePC::HandleCmp(uintptr_t PC, T Arg1, T Arg2) {
452 ValueProfileMap.AddValue(PC * 128 + HammingDistance);
453 PC * 128 + 64 + AbsoluteDistance);
494 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
496 __sancov_trace_pc_pcs[Idx] = PC;
500 // Best-effort support for -fsanitize-coverage=trace-pc, which is available
505 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
506 uintptr_t Idx = PC & (((uintptr_t)1 << fuzzer::TracePC::kTracePcBits) - 1);
507 __sancov_trace_pc_pcs[Idx] = PC;
530 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
531 fuzzer::TPC.HandleCallerCallee(PC, Callee);
538 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
539 fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
549 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
550 fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
557 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
558 fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
565 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
566 fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
573 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
574 fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
581 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
582 fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
589 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
590 fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
597 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
598 fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
611 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
621 fuzzer::TPC.HandleCmp(PC + i, static_cast<uint16_t>(Token), (uint16_t)(0));
623 fuzzer::TPC.HandleCmp(PC + i, static_cast<uint32_t>(Token), (uint32_t)(0));
625 fuzzer::TPC.HandleCmp(PC + i, Token, (uint64_t)(0));
632 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
633 fuzzer::TPC.HandleCmp(PC, Val, (uint32_t)0);
640 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
641 fuzzer::TPC.HandleCmp(PC, Val, (uint64_t)0);
648 uintptr_t PC = reinterpret_cast<uintptr_t>(__builtin_return_address(0));
649 fuzzer::TPC.HandleCmp(PC, Idx, (uintptr_t)0);