blob: 78b7c2489b0de05988173fd11b78e227265ee874 [file] [log] [blame]
Zachary Turner24a148b2016-11-30 19:06:14 +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#ifndef LLVM_FUZZER_UTIL_H
12#define LLVM_FUZZER_UTIL_H
13
14#include "FuzzerDefs.h"
15
16namespace fuzzer {
17
18void PrintHexArray(const Unit &U, const char *PrintAfter = "");
19
20void PrintHexArray(const uint8_t *Data, size_t Size,
21 const char *PrintAfter = "");
22
23void PrintASCII(const uint8_t *Data, size_t Size, const char *PrintAfter = "");
24
25void PrintASCII(const Unit &U, const char *PrintAfter = "");
26
27// Changes U to contain only ASCII (isprint+isspace) characters.
28// Returns true iff U has been changed.
29bool ToASCII(uint8_t *Data, size_t Size);
30
31bool IsASCII(const Unit &U);
32
33bool IsASCII(const uint8_t *Data, size_t Size);
34
35std::string Base64(const Unit &U);
36
37void PrintPC(const char *SymbolizedFMT, const char *FallbackFMT, uintptr_t PC);
38
39std::string DescribePC(const char *SymbolizedFMT, uintptr_t PC);
40
Marcos Pividori6e3d8852016-12-13 17:45:53 +000041unsigned NumberOfCpuCores();
Zachary Turner24a148b2016-11-30 19:06:14 +000042
Zachary Turner6fa57ad2016-12-02 23:02:01 +000043bool ExecuteCommandAndReadOutput(const std::string &Command, std::string *Out);
44
Zachary Turner24a148b2016-11-30 19:06:14 +000045// Platform specific functions.
Marcos Pividoric59b6922016-12-13 17:45:20 +000046void SetSignalHandler(const FuzzingOptions& Options);
Zachary Turner24a148b2016-11-30 19:06:14 +000047
48void SleepSeconds(int Seconds);
49
Marcos Pividori463f8bd2016-12-13 17:45:44 +000050unsigned long GetPid();
Zachary Turner24a148b2016-11-30 19:06:14 +000051
52size_t GetPeakRSSMb();
53
Zachary Turner24a148b2016-11-30 19:06:14 +000054int ExecuteCommand(const std::string &Command);
55
Zachary Turner6fa57ad2016-12-02 23:02:01 +000056FILE *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
Kostya Serebryany111e1d62016-12-09 01:17:24 +000061std::string CloneArgsWithoutX(const std::vector<std::string> &Args,
62 const char *X1, const char *X2);
63
64inline std::string CloneArgsWithoutX(const std::vector<std::string> &Args,
65 const char *X) {
66 return CloneArgsWithoutX(Args, X, X);
67}
68
Zachary Turner24a148b2016-11-30 19:06:14 +000069} // namespace fuzzer
70#endif // LLVM_FUZZER_UTIL_H