| //===- FuzzerUtil.cpp - Misc utils ----------------------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // Misc utils. |
| //===----------------------------------------------------------------------===// |
| |
| #include "FuzzerInternal.h" |
| #include <iostream> |
| #include <sys/time.h> |
| #include <cassert> |
| #include <cstring> |
| #include <signal.h> |
| |
| namespace fuzzer { |
| |
| void Print(const Unit &v, const char *PrintAfter) { |
| for (auto x : v) |
| std::cerr << "0x" << std::hex << (unsigned) x << std::dec << ","; |
| std::cerr << PrintAfter; |
| } |
| |
| void PrintASCII(const Unit &U, const char *PrintAfter) { |
| for (auto X : U) { |
| if (isprint(X)) |
| std::cerr << X; |
| else |
| std::cerr << "\\x" << std::hex << (int)(unsigned)X << std::dec; |
| } |
| std::cerr << PrintAfter; |
| } |
| |
| std::string Hash(const Unit &in) { |
| size_t h1 = 0, h2 = 0; |
| for (auto x : in) { |
| h1 += x; |
| h1 *= 5; |
| h2 += x; |
| h2 *= 7; |
| } |
| return std::to_string(h1) + std::to_string(h2); |
| } |
| |
| static void AlarmHandler(int, siginfo_t *, void *) { |
| Fuzzer::StaticAlarmCallback(); |
| } |
| |
| void SetTimer(int Seconds) { |
| struct itimerval T {{Seconds, 0}, {Seconds, 0}}; |
| std::cerr << "SetTimer " << Seconds << "\n"; |
| int Res = setitimer(ITIMER_REAL, &T, nullptr); |
| assert(Res == 0); |
| struct sigaction sigact; |
| memset(&sigact, 0, sizeof(sigact)); |
| sigact.sa_sigaction = AlarmHandler; |
| Res = sigaction(SIGALRM, &sigact, 0); |
| assert(Res == 0); |
| } |
| |
| } // namespace fuzzer |