blob: f84fd9ef0fcea9f89c391e16c0d7f55a21c7c2e1 [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
Zachary Turner6fa57ad2016-12-02 23:02:01 +000044bool ExecuteCommandAndReadOutput(const std::string &Command, std::string *Out);
45
Zachary Turner24a148b2016-11-30 19:06:14 +000046// Platform specific functions.
Marcos Pividoric59b6922016-12-13 17:45:20 +000047void SetSignalHandler(const FuzzingOptions& Options);
Zachary Turner24a148b2016-11-30 19:06:14 +000048
49void SleepSeconds(int Seconds);
50
Marcos Pividori463f8bd2016-12-13 17:45:44 +000051unsigned long GetPid();
Zachary Turner24a148b2016-11-30 19:06:14 +000052
53size_t GetPeakRSSMb();
54
Zachary Turner24a148b2016-11-30 19:06:14 +000055int ExecuteCommand(const std::string &Command);
56
Zachary Turner6fa57ad2016-12-02 23:02:01 +000057FILE *OpenProcessPipe(const char *Command, const char *Mode);
58
59const void *SearchMemory(const void *haystack, size_t haystacklen,
60 const void *needle, size_t needlelen);
61
Kostya Serebryany111e1d62016-12-09 01:17:24 +000062std::string CloneArgsWithoutX(const std::vector<std::string> &Args,
63 const char *X1, const char *X2);
64
65inline std::string CloneArgsWithoutX(const std::vector<std::string> &Args,
66 const char *X) {
67 return CloneArgsWithoutX(Args, X, X);
68}
69
Marcos Pividori62c8fc52017-01-22 01:58:26 +000070std::string DisassembleCmd(const std::string &FileName);
71
72std::string SearchRegexCmd(const std::string &Regex);
73
Zachary Turner24a148b2016-11-30 19:06:14 +000074} // namespace fuzzer
Marcos Pividori178fe582016-12-13 17:46:11 +000075
Zachary Turner24a148b2016-11-30 19:06:14 +000076#endif // LLVM_FUZZER_UTIL_H