1*e5dd7070Spatrick //===-- fuzzer_initialize.cpp - Fuzz Clang --------------------------------===// 2*e5dd7070Spatrick // 3*e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information. 5*e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*e5dd7070Spatrick // 7*e5dd7070Spatrick //===----------------------------------------------------------------------===// 8*e5dd7070Spatrick /// 9*e5dd7070Spatrick /// \file 10*e5dd7070Spatrick /// This file implements two functions: one that returns the command line 11*e5dd7070Spatrick /// arguments for a given call to the fuzz target and one that initializes 12*e5dd7070Spatrick /// the fuzzer with the correct command line arguments. 13*e5dd7070Spatrick /// 14*e5dd7070Spatrick //===----------------------------------------------------------------------===// 15*e5dd7070Spatrick 16*e5dd7070Spatrick #include "fuzzer_initialize.h" 17*e5dd7070Spatrick 18*e5dd7070Spatrick #include "llvm/InitializePasses.h" 19*e5dd7070Spatrick #include "llvm/PassRegistry.h" 20*e5dd7070Spatrick #include "llvm/Support/TargetSelect.h" 21*e5dd7070Spatrick #include <cstring> 22*e5dd7070Spatrick 23*e5dd7070Spatrick using namespace clang_fuzzer; 24*e5dd7070Spatrick using namespace llvm; 25*e5dd7070Spatrick 26*e5dd7070Spatrick 27*e5dd7070Spatrick namespace clang_fuzzer { 28*e5dd7070Spatrick 29*e5dd7070Spatrick static std::vector<const char *> CLArgs; 30*e5dd7070Spatrick GetCLArgs()31*e5dd7070Spatrickconst std::vector<const char *>& GetCLArgs() { 32*e5dd7070Spatrick return CLArgs; 33*e5dd7070Spatrick } 34*e5dd7070Spatrick 35*e5dd7070Spatrick } 36*e5dd7070Spatrick LLVMFuzzerInitialize(int * argc,char *** argv)37*e5dd7070Spatrickextern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { 38*e5dd7070Spatrick InitializeAllTargets(); 39*e5dd7070Spatrick InitializeAllTargetMCs(); 40*e5dd7070Spatrick InitializeAllAsmPrinters(); 41*e5dd7070Spatrick InitializeAllAsmParsers(); 42*e5dd7070Spatrick 43*e5dd7070Spatrick PassRegistry &Registry = *PassRegistry::getPassRegistry(); 44*e5dd7070Spatrick initializeCore(Registry); 45*e5dd7070Spatrick initializeScalarOpts(Registry); 46*e5dd7070Spatrick initializeVectorization(Registry); 47*e5dd7070Spatrick initializeIPO(Registry); 48*e5dd7070Spatrick initializeAnalysis(Registry); 49*e5dd7070Spatrick initializeTransformUtils(Registry); 50*e5dd7070Spatrick initializeInstCombine(Registry); 51*e5dd7070Spatrick initializeTarget(Registry); 52*e5dd7070Spatrick 53*e5dd7070Spatrick CLArgs.push_back("-O2"); 54*e5dd7070Spatrick for (int I = 1; I < *argc; I++) { 55*e5dd7070Spatrick if (strcmp((*argv)[I], "-ignore_remaining_args=1") == 0) { 56*e5dd7070Spatrick for (I++; I < *argc; I++) 57*e5dd7070Spatrick CLArgs.push_back((*argv)[I]); 58*e5dd7070Spatrick break; 59*e5dd7070Spatrick } 60*e5dd7070Spatrick } 61*e5dd7070Spatrick return 0; 62*e5dd7070Spatrick } 63