//===-- fuzzer_initialize.cpp - Fuzz Clang --------------------------------===// // // 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 // //===----------------------------------------------------------------------===// /// /// \file /// This file implements two functions: one that returns the command line /// arguments for a given call to the fuzz target and one that initializes /// the fuzzer with the correct command line arguments. /// //===----------------------------------------------------------------------===// #include "fuzzer_initialize.h" #include "llvm/InitializePasses.h" #include "llvm/PassRegistry.h" #include "llvm/Support/TargetSelect.h" #include using namespace clang_fuzzer; using namespace llvm; namespace clang_fuzzer { static std::vector CLArgs; const std::vector& GetCLArgs() { return CLArgs; } } extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { InitializeAllTargets(); InitializeAllTargetMCs(); InitializeAllAsmPrinters(); InitializeAllAsmParsers(); PassRegistry &Registry = *PassRegistry::getPassRegistry(); initializeCore(Registry); initializeScalarOpts(Registry); initializeVectorization(Registry); initializeIPO(Registry); initializeAnalysis(Registry); initializeTransformUtils(Registry); initializeInstCombine(Registry); initializeAggressiveInstCombine(Registry); initializeInstrumentation(Registry); initializeTarget(Registry); CLArgs.push_back("-O2"); for (int I = 1; I < *argc; I++) { if (strcmp((*argv)[I], "-ignore_remaining_args=1") == 0) { for (I++; I < *argc; I++) CLArgs.push_back((*argv)[I]); break; } } return 0; }