blob: 9a6227ea7da7b5de98a5eca2acd1ae31925516d5 [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
43unsigned NumberOfCpuCores();
44
45// Platform specific functions.
46void SetSignalHandler(const FuzzingOptions& Options);
47
48void SleepSeconds(int Seconds);
49
50unsigned long GetPid();
51
52size_t GetPeakRSSMb();
53
morehousea80f6452017-12-04 19:25:59 +000054int ExecuteCommand(const Command &Cmd);
george.karpenkov29efa6d2017-08-21 23:25:50 +000055
56FILE *OpenProcessPipe(const char *Command, const char *Mode);
57
58const void *SearchMemory(const void *haystack, size_t haystacklen,
59 const void *needle, size_t needlelen);
60
george.karpenkovfbfa45c2017-08-27 23:20:09 +000061std::string CloneArgsWithoutX(const Vector<std::string> &Args,
george.karpenkov29efa6d2017-08-21 23:25:50 +000062 const char *X1, const char *X2);
63
george.karpenkovfbfa45c2017-08-27 23:20:09 +000064inline std::string CloneArgsWithoutX(const Vector<std::string> &Args,
george.karpenkov29efa6d2017-08-21 23:25:50 +000065 const char *X) {
66 return CloneArgsWithoutX(Args, X, X);
67}
68
69inline std::pair<std::string, std::string> SplitBefore(std::string X,
70 std::string S) {
71 auto Pos = S.find(X);
72 if (Pos == std::string::npos)
73 return std::make_pair(S, "");
74 return std::make_pair(S.substr(0, Pos), S.substr(Pos));
75}
76
77std::string DisassembleCmd(const std::string &FileName);
78
79std::string SearchRegexCmd(const std::string &Regex);
80
81size_t SimpleFastHash(const uint8_t *Data, size_t Size);
82
83} // namespace fuzzer
84
85#endif // LLVM_FUZZER_UTIL_H