blob: 9c90040b09cb45f770aeb565f6a6e9591798ba2d [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//===----------------------------------------------------------------------===//
Marcos Pividori178fe582016-12-13 17:46:11 +000011
Zachary Turner24a148b2016-11-30 19:06:14 +000012#ifndef LLVM_FUZZER_UTIL_H
13#define LLVM_FUZZER_UTIL_H
14
15#include "FuzzerDefs.h"
16
17namespace fuzzer {
18
19void PrintHexArray(const Unit &U, const char *PrintAfter = "");
20
21void PrintHexArray(const uint8_t *Data, size_t Size,
22 const char *PrintAfter = "");
23
24void PrintASCII(const uint8_t *Data, size_t Size, const char *PrintAfter = "");
25
26void PrintASCII(const Unit &U, const char *PrintAfter = "");
27
28// Changes U to contain only ASCII (isprint+isspace) characters.
29// Returns true iff U has been changed.
30bool ToASCII(uint8_t *Data, size_t Size);
31
32bool IsASCII(const Unit &U);
33
34bool IsASCII(const uint8_t *Data, size_t Size);
35
36std::string Base64(const Unit &U);
37
38void PrintPC(const char *SymbolizedFMT, const char *FallbackFMT, uintptr_t PC);
39
40std::string DescribePC(const char *SymbolizedFMT, uintptr_t PC);
41
Marcos Pividori6e3d8852016-12-13 17:45:53 +000042unsigned NumberOfCpuCores();
Zachary Turner24a148b2016-11-30 19:06:14 +000043
44// Platform specific functions.
Marcos Pividoric59b6922016-12-13 17:45:20 +000045void SetSignalHandler(const FuzzingOptions& Options);
Zachary Turner24a148b2016-11-30 19:06:14 +000046
47void SleepSeconds(int Seconds);
48
Marcos Pividori463f8bd2016-12-13 17:45:44 +000049unsigned long GetPid();
Zachary Turner24a148b2016-11-30 19:06:14 +000050
51size_t GetPeakRSSMb();
52
Zachary Turner24a148b2016-11-30 19:06:14 +000053int ExecuteCommand(const std::string &Command);
54
Zachary Turner6fa57ad2016-12-02 23:02:01 +000055FILE *OpenProcessPipe(const char *Command, const char *Mode);
56
57const void *SearchMemory(const void *haystack, size_t haystacklen,
58 const void *needle, size_t needlelen);
59
Kostya Serebryany111e1d62016-12-09 01:17:24 +000060std::string CloneArgsWithoutX(const std::vector<std::string> &Args,
61 const char *X1, const char *X2);
62
63inline std::string CloneArgsWithoutX(const std::vector<std::string> &Args,
64 const char *X) {
65 return CloneArgsWithoutX(Args, X, X);
66}
67
Justin Bognerc27a70d2017-07-14 23:33:04 +000068inline std::pair<std::string, std::string> SplitBefore(std::string X,
69 std::string S) {
70 auto Pos = S.find(X);
71 if (Pos == std::string::npos)
72 return std::make_pair(S, "");
73 return std::make_pair(S.substr(0, Pos), S.substr(Pos));
74}
75
Marcos Pividori62c8fc52017-01-22 01:58:26 +000076std::string DisassembleCmd(const std::string &FileName);
77
78std::string SearchRegexCmd(const std::string &Regex);
79
Kostya Serebryanyf64b8482017-07-14 00:06:27 +000080size_t SimpleFastHash(const uint8_t *Data, size_t Size);
81
Zachary Turner24a148b2016-11-30 19:06:14 +000082} // namespace fuzzer
Marcos Pividori178fe582016-12-13 17:46:11 +000083
Zachary Turner24a148b2016-11-30 19:06:14 +000084#endif // LLVM_FUZZER_UTIL_H