refactoring debug/be_quiet, fatal on dont_optimize and instrument_file

This commit is contained in:
van Hauser
2020-08-02 22:28:16 +02:00
parent 6041b1c486
commit 1cddd51662
13 changed files with 39 additions and 32 deletions

View File

@ -56,7 +56,6 @@ struct InsTrim : public ModulePass {
protected: protected:
uint32_t function_minimum_size = 1; uint32_t function_minimum_size = 1;
uint32_t debug = 0;
char * skip_nozero = NULL; char * skip_nozero = NULL;
private: private:
@ -102,7 +101,6 @@ struct InsTrim : public ModulePass {
bool runOnModule(Module &M) override { bool runOnModule(Module &M) override {
char be_quiet = 0;
setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0);
if ((isatty(2) && !getenv("AFL_QUIET")) || getenv("AFL_DEBUG") != NULL) { if ((isatty(2) && !getenv("AFL_QUIET")) || getenv("AFL_DEBUG") != NULL) {

View File

@ -639,6 +639,10 @@ int main(int argc, char **argv, char **envp) {
} }
if ((getenv("AFL_LLVM_INSTRUMENT_FILE") || getenv("AFL_LLVM_WHITELIST")) &&
getenv("AFL_DONT_OPTIMIZE"))
FATAL("AFL_LLVM_INSTRUMENT_FILE and AFL_DONT_OPTIMIZE cannot be combined");
if (getenv("AFL_LLVM_INSTRIM") || getenv("INSTRIM") || if (getenv("AFL_LLVM_INSTRIM") || getenv("INSTRIM") ||
getenv("INSTRIM_LIB")) { getenv("INSTRIM_LIB")) {

View File

@ -14,6 +14,8 @@
#include <fstream> #include <fstream>
#include <llvm/Support/raw_ostream.h> #include <llvm/Support/raw_ostream.h>
#define IS_EXTERN extern
#include "afl-llvm-common.h" #include "afl-llvm-common.h"
using namespace llvm; using namespace llvm;
@ -88,6 +90,7 @@ void initInstrumentList() {
char *instrumentListFilename = getenv("AFL_LLVM_INSTRUMENT_FILE"); char *instrumentListFilename = getenv("AFL_LLVM_INSTRUMENT_FILE");
if (!instrumentListFilename) if (!instrumentListFilename)
instrumentListFilename = getenv("AFL_LLVM_WHITELIST"); instrumentListFilename = getenv("AFL_LLVM_WHITELIST");
if (instrumentListFilename) { if (instrumentListFilename) {
std::string line; std::string line;
@ -105,6 +108,10 @@ void initInstrumentList() {
} }
if (debug)
SAYF(cMGN "[D] " cRST "loaded instrument list with %zu entries\n",
myInstrumentList.size());
} }
bool isInInstrumentList(llvm::Function *F) { bool isInInstrumentList(llvm::Function *F) {
@ -145,8 +152,6 @@ bool isInInstrumentList(llvm::Function *F) {
} }
(void)instLine;
/* Continue only if we know where we actually are */ /* Continue only if we know where we actually are */
if (!instFilename.str().empty()) { if (!instFilename.str().empty()) {
@ -164,6 +169,10 @@ bool isInInstrumentList(llvm::Function *F) {
if (fnmatch(("*" + *it).c_str(), instFilename.str().c_str(), 0) == if (fnmatch(("*" + *it).c_str(), instFilename.str().c_str(), 0) ==
0) { 0) {
if (debug)
SAYF(cMGN "[D] " cRST
"Function %s is in the list (%s), instrumenting ... \n",
F->getName().str().c_str(), instFilename.str().c_str());
return true; return true;
} }
@ -219,12 +228,15 @@ bool isInInstrumentList(llvm::Function *F) {
// we could not find out the location. in this case we say it is not // we could not find out the location. in this case we say it is not
// in the the instrument file list // in the the instrument file list
if (!be_quiet)
WARNF(
"No debug information found for function %s, will not be "
"instrumented (recompile with -g -O[1-3]).",
F->getName().str().c_str());
return false; return false;
} }
//
return false; return false;
} }

View File

@ -38,5 +38,14 @@ void initInstrumentList();
bool isInInstrumentList(llvm::Function *F); bool isInInstrumentList(llvm::Function *F);
unsigned long long int calculateCollisions(uint32_t edges); unsigned long long int calculateCollisions(uint32_t edges);
#ifndef IS_EXTERN
#define IS_EXTERN
#endif
IS_EXTERN int debug;
IS_EXTERN int be_quiet;
#undef IS_EXTERN
#endif #endif

View File

@ -73,8 +73,8 @@ struct InsTrimLTO : public ModulePass {
protected: protected:
uint32_t function_minimum_size = 1; uint32_t function_minimum_size = 1;
char * skip_nozero = NULL; char * skip_nozero = NULL;
int afl_global_id = 1, debug = 0, autodictionary = 1; int afl_global_id = 1, autodictionary = 1;
uint32_t be_quiet = 0, inst_blocks = 0, inst_funcs = 0; uint32_t inst_blocks = 0, inst_funcs = 0;
uint64_t map_addr = 0x10000; uint64_t map_addr = 0x10000;
public: public:

View File

@ -86,9 +86,9 @@ class AFLLTOPass : public ModulePass {
bool runOnModule(Module &M) override; bool runOnModule(Module &M) override;
protected: protected:
int afl_global_id = 1, debug = 0, autodictionary = 1; int afl_global_id = 1, autodictionary = 1;
uint32_t function_minimum_size = 1; uint32_t function_minimum_size = 1;
uint32_t be_quiet = 0, inst_blocks = 0, inst_funcs = 0, total_instr = 0; uint32_t inst_blocks = 0, inst_funcs = 0, total_instr = 0;
uint64_t map_addr = 0x10000; uint64_t map_addr = 0x10000;
char * skip_nozero = NULL; char * skip_nozero = NULL;
@ -207,7 +207,8 @@ bool AFLLTOPass::runOnModule(Module &M) {
if (debug) if (debug)
fprintf(stderr, fprintf(stderr,
"DEBUG: Function %s is not in a source file that was specified " "DEBUG: Function %s is not in a source file that was specified "
"in the instrument file list\n", F.getName().str().c_str()); "in the instrument file list\n",
F.getName().str().c_str());
continue; continue;
} }

View File

@ -104,7 +104,6 @@ class AFLcheckIfInstrument : public ModulePass {
protected: protected:
std::list<std::string> myInstrumentList; std::list<std::string> myInstrumentList;
int debug = 0;
}; };
@ -116,7 +115,6 @@ bool AFLcheckIfInstrument::runOnModule(Module &M) {
/* Show a banner */ /* Show a banner */
char be_quiet = 0;
setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0);
if ((isatty(2) && !getenv("AFL_QUIET")) || getenv("AFL_DEBUG") != NULL) { if ((isatty(2) && !getenv("AFL_QUIET")) || getenv("AFL_DEBUG") != NULL) {
@ -209,8 +207,10 @@ bool AFLcheckIfInstrument::runOnModule(Module &M) {
} else { } else {
if (!be_quiet) if (!be_quiet)
WARNF("No debug information found for function %s, recompile with -g", WARNF(
F.getName().str().c_str()); "No debug information found for function %s, recompile with -g "
"-O[1-3]",
F.getName().str().c_str());
continue; continue;
} }

View File

@ -82,7 +82,6 @@ class AFLCoverage : public ModulePass {
protected: protected:
uint32_t ngram_size = 0; uint32_t ngram_size = 0;
uint32_t debug = 0;
uint32_t map_size = MAP_SIZE; uint32_t map_size = MAP_SIZE;
uint32_t function_minimum_size = 1; uint32_t function_minimum_size = 1;
char * ctx_str = NULL, *skip_nozero = NULL; char * ctx_str = NULL, *skip_nozero = NULL;
@ -139,7 +138,6 @@ bool AFLCoverage::runOnModule(Module &M) {
/* Show a banner */ /* Show a banner */
char be_quiet = 0;
setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0);
if (getenv("AFL_DEBUG")) debug = 1; if (getenv("AFL_DEBUG")) debug = 1;

View File

@ -76,9 +76,6 @@ class CmpLogInstructions : public ModulePass {
} }
protected:
int be_quiet = 0;
private: private:
bool hookInstrs(Module &M); bool hookInstrs(Module &M);

View File

@ -76,9 +76,6 @@ class CmpLogRoutines : public ModulePass {
} }
protected:
int be_quiet = 0;
private: private:
bool hookRtns(Module &M); bool hookRtns(Module &M);

View File

@ -75,9 +75,6 @@ class CompareTransform : public ModulePass {
} }
protected:
int be_quiet = 0;
private: private:
bool transformCmps(Module &M, const bool processStrcmp, bool transformCmps(Module &M, const bool processStrcmp,
const bool processMemcmp, const bool processStrncmp, const bool processMemcmp, const bool processStrncmp,

View File

@ -71,9 +71,6 @@ class SplitComparesTransform : public ModulePass {
} }
protected:
int be_quiet = 0;
private: private:
int enableFPSplit; int enableFPSplit;

View File

@ -91,9 +91,6 @@ class SplitSwitchesTransform : public ModulePass {
typedef std::vector<CaseExpr> CaseVector; typedef std::vector<CaseExpr> CaseVector;
protected:
int be_quiet = 0;
private: private:
bool splitSwitches(Module &M); bool splitSwitches(Module &M);
bool transformCmps(Module &M, const bool processStrcmp, bool transformCmps(Module &M, const bool processStrcmp,