forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- FuzzerUtil.h - Internal header for the Fuzzer Utils ------*- C++ -* ===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| // Util functions.
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_FUZZER_UTIL_H
 | |
| #define LLVM_FUZZER_UTIL_H
 | |
| 
 | |
| #include "FuzzerBuiltins.h"
 | |
| #include "FuzzerBuiltinsMsvc.h"
 | |
| #include "FuzzerCommand.h"
 | |
| #include "FuzzerDefs.h"
 | |
| 
 | |
| namespace fuzzer {
 | |
| 
 | |
| void PrintHexArray(const Unit &U, const char *PrintAfter = "");
 | |
| 
 | |
| void PrintHexArray(const uint8_t *Data, size_t Size,
 | |
|                    const char *PrintAfter = "");
 | |
| 
 | |
| void PrintASCII(const uint8_t *Data, size_t Size, const char *PrintAfter = "");
 | |
| 
 | |
| void PrintASCII(const Unit &U, const char *PrintAfter = "");
 | |
| 
 | |
| // Changes U to contain only ASCII (isprint+isspace) characters.
 | |
| // Returns true iff U has been changed.
 | |
| bool ToASCII(uint8_t *Data, size_t Size);
 | |
| 
 | |
| bool IsASCII(const Unit &U);
 | |
| 
 | |
| bool IsASCII(const uint8_t *Data, size_t Size);
 | |
| 
 | |
| std::string Base64(const Unit &U);
 | |
| 
 | |
| void PrintPC(const char *SymbolizedFMT, const char *FallbackFMT, uintptr_t PC);
 | |
| 
 | |
| std::string DescribePC(const char *SymbolizedFMT, uintptr_t PC);
 | |
| 
 | |
| void PrintStackTrace();
 | |
| 
 | |
| void PrintMemoryProfile();
 | |
| 
 | |
| unsigned NumberOfCpuCores();
 | |
| 
 | |
| // Platform specific functions.
 | |
| void SetSignalHandler(const FuzzingOptions& Options);
 | |
| 
 | |
| void SleepSeconds(int Seconds);
 | |
| 
 | |
| unsigned long GetPid();
 | |
| 
 | |
| size_t GetPeakRSSMb();
 | |
| 
 | |
| int ExecuteCommand(const Command &Cmd);
 | |
| bool ExecuteCommand(const Command &Cmd, std::string *CmdOutput);
 | |
| 
 | |
| // Fuchsia does not have popen/pclose.
 | |
| FILE *OpenProcessPipe(const char *Command, const char *Mode);
 | |
| int CloseProcessPipe(FILE *F);
 | |
| 
 | |
| const void *SearchMemory(const void *haystack, size_t haystacklen,
 | |
|                          const void *needle, size_t needlelen);
 | |
| 
 | |
| std::string CloneArgsWithoutX(const Vector<std::string> &Args,
 | |
|                               const char *X1, const char *X2);
 | |
| 
 | |
| inline std::string CloneArgsWithoutX(const Vector<std::string> &Args,
 | |
|                                      const char *X) {
 | |
|   return CloneArgsWithoutX(Args, X, X);
 | |
| }
 | |
| 
 | |
| inline std::pair<std::string, std::string> SplitBefore(std::string X,
 | |
|                                                        std::string S) {
 | |
|   auto Pos = S.find(X);
 | |
|   if (Pos == std::string::npos)
 | |
|     return std::make_pair(S, "");
 | |
|   return std::make_pair(S.substr(0, Pos), S.substr(Pos));
 | |
| }
 | |
| 
 | |
| void DiscardOutput(int Fd);
 | |
| 
 | |
| std::string DisassembleCmd(const std::string &FileName);
 | |
| 
 | |
| std::string SearchRegexCmd(const std::string &Regex);
 | |
| 
 | |
| size_t SimpleFastHash(const uint8_t *Data, size_t Size);
 | |
| 
 | |
| inline uint32_t Log(uint32_t X) { return 32 - Clz(X) - 1; }
 | |
| 
 | |
| inline size_t PageSize() { return 4096; }
 | |
| inline uint8_t *RoundUpByPage(uint8_t *P) {
 | |
|   uintptr_t X = reinterpret_cast<uintptr_t>(P);
 | |
|   size_t Mask = PageSize() - 1;
 | |
|   X = (X + Mask) & ~Mask;
 | |
|   return reinterpret_cast<uint8_t *>(X);
 | |
| }
 | |
| inline uint8_t *RoundDownByPage(uint8_t *P) {
 | |
|   uintptr_t X = reinterpret_cast<uintptr_t>(P);
 | |
|   size_t Mask = PageSize() - 1;
 | |
|   X = X & ~Mask;
 | |
|   return reinterpret_cast<uint8_t *>(X);
 | |
| }
 | |
| 
 | |
| }  // namespace fuzzer
 | |
| 
 | |
| #endif  // LLVM_FUZZER_UTIL_H
 | 
