1 //===-- sancov_flags.cpp ----------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // Sanitizer Coverage runtime flags. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "sancov_flags.h" 14 #include "sanitizer_flag_parser.h" 15 #include "sanitizer_platform.h" 16 17 SANITIZER_INTERFACE_WEAK_DEF(const char*, __sancov_default_options, void) { 18 return ""; 19 } 20 21 using namespace __sanitizer; 22 23 namespace __sancov { 24 25 SancovFlags sancov_flags_dont_use_directly; // use via flags(); 26 27 void SancovFlags::SetDefaults() { 28 #define SANCOV_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue; 29 #include "sancov_flags.inc" 30 #undef SANCOV_FLAG 31 } 32 33 static void RegisterSancovFlags(FlagParser *parser, SancovFlags *f) { 34 #define SANCOV_FLAG(Type, Name, DefaultValue, Description) \ 35 RegisterFlag(parser, #Name, Description, &f->Name); 36 #include "sancov_flags.inc" 37 #undef SANCOV_FLAG 38 } 39 40 static const char *MaybeCallSancovDefaultOptions() { 41 return (&__sancov_default_options) ? __sancov_default_options() : ""; 42 } 43 44 void InitializeSancovFlags() { 45 SancovFlags *f = sancov_flags(); 46 f->SetDefaults(); 47 48 FlagParser parser; 49 RegisterSancovFlags(&parser, f); 50 51 parser.ParseString(MaybeCallSancovDefaultOptions()); 52 parser.ParseStringFromEnv("SANCOV_OPTIONS"); 53 54 ReportUnrecognizedFlags(); 55 if (f->help) parser.PrintFlagDescriptions(); 56 } 57 58 } // namespace __sancov 59