blob: 8c5c57c3ab83b7631cf404d510b9e38d2903374b [file] [log] [blame]
george.karpenkov29efa6d2017-08-21 23:25:50 +00001//===- FuzzerUtil.h - Internal header for the Fuzzer Utils ------*- C++ -* ===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9// Util functions.
10//===----------------------------------------------------------------------===//
11
12#ifndef LLVM_FUZZER_UTIL_H
13#define LLVM_FUZZER_UTIL_H
14
15#include "FuzzerDefs.h"
morehousea80f6452017-12-04 19:25:59 +000016#include "FuzzerCommand.h"
george.karpenkov29efa6d2017-08-21 23:25:50 +000017
18namespace fuzzer {
19
20void PrintHexArray(const Unit &U, const char *PrintAfter = "");
21
22void PrintHexArray(const uint8_t *Data, size_t Size,
23 const char *PrintAfter = "");
24
25void PrintASCII(const uint8_t *Data, size_t Size, const char *PrintAfter = "");
26
27void PrintASCII(const Unit &U, const char *PrintAfter = "");
28
29// Changes U to contain only ASCII (isprint+isspace) characters.
30// Returns true iff U has been changed.
31bool ToASCII(uint8_t *Data, size_t Size);
32
33bool IsASCII(const Unit &U);
34
35bool IsASCII(const uint8_t *Data, size_t Size);
36
37std::string Base64(const Unit &U);
38
39void PrintPC(const char *SymbolizedFMT, const char *FallbackFMT, uintptr_t PC);
40
41std::string DescribePC(const char *SymbolizedFMT, uintptr_t PC);
42
morehousebd67cc22018-05-08 23:45:05 +000043void PrintStackTrace();
44
45void PrintMemoryProfile();
46
george.karpenkov29efa6d2017-08-21 23:25:50 +000047unsigned NumberOfCpuCores();
48
49// Platform specific functions.
50void SetSignalHandler(const FuzzingOptions& Options);
51
52void SleepSeconds(int Seconds);
53
54unsigned long GetPid();
55
56size_t GetPeakRSSMb();
57
morehousea80f6452017-12-04 19:25:59 +000058int ExecuteCommand(const Command &Cmd);
george.karpenkov29efa6d2017-08-21 23:25:50 +000059
60FILE *OpenProcessPipe(const char *Command, const char *Mode);
61
62const void *SearchMemory(const void *haystack, size_t haystacklen,
63 const void *needle, size_t needlelen);
64
george.karpenkovfbfa45c2017-08-27 23:20:09 +000065std::string CloneArgsWithoutX(const Vector<std::string> &Args,
george.karpenkov29efa6d2017-08-21 23:25:50 +000066 const char *X1, const char *X2);
67
george.karpenkovfbfa45c2017-08-27 23:20:09 +000068inline std::string CloneArgsWithoutX(const Vector<std::string> &Args,
george.karpenkov29efa6d2017-08-21 23:25:50 +000069 const char *X) {
70 return CloneArgsWithoutX(Args, X, X);
71}
72
73inline std::pair<std::string, std::string> SplitBefore(std::string X,
74 std::string S) {
75 auto Pos = S.find(X);
76 if (Pos == std::string::npos)
77 return std::make_pair(S, "");
78 return std::make_pair(S.substr(0, Pos), S.substr(Pos));
79}
80
81std::string DisassembleCmd(const std::string &FileName);
82
83std::string SearchRegexCmd(const std::string &Regex);
84
85size_t SimpleFastHash(const uint8_t *Data, size_t Size);
86
kcce29d7e32017-12-12 23:11:28 +000087inline uint32_t Log(uint32_t X) { return 32 - __builtin_clz(X) - 1; }
88
george.karpenkov29efa6d2017-08-21 23:25:50 +000089} // namespace fuzzer
90
91#endif // LLVM_FUZZER_UTIL_H