//===-- esan_flags.cc -------------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file is a part of EfficiencySanitizer, a family of performance tuners. // // Esan flag parsing logic. //===----------------------------------------------------------------------===// #include "esan_flags.h" #include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_flag_parser.h" #include "sanitizer_common/sanitizer_flags.h" using namespace __sanitizer; namespace __esan { static const char EsanOptsEnv[] = "ESAN_OPTIONS"; Flags EsanFlagsDontUseDirectly; void Flags::setDefaults() { #define ESAN_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue; #include "esan_flags.inc" #undef ESAN_FLAG } static void registerEsanFlags(FlagParser *Parser, Flags *F) { #define ESAN_FLAG(Type, Name, DefaultValue, Description) \ RegisterFlag(Parser, #Name, Description, &F->Name); #include "esan_flags.inc" #undef ESAN_FLAG } void initializeFlags() { SetCommonFlagsDefaults(); Flags *F = getFlags(); F->setDefaults(); FlagParser Parser; registerEsanFlags(&Parser, F); RegisterCommonFlags(&Parser); Parser.ParseString(GetEnv(EsanOptsEnv)); InitializeCommonFlags(); if (Verbosity()) ReportUnrecognizedFlags(); if (common_flags()->help) Parser.PrintFlagDescriptions(); __sanitizer_set_report_path(common_flags()->log_path); } } // namespace __esan