1 //===-- sanitizer_flags.h ---------------------------------------*- 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 // This file is a part of ThreadSanitizer/AddressSanitizer runtime. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef SANITIZER_FLAGS_H 14 #define SANITIZER_FLAGS_H 15 16 #include "sanitizer_internal_defs.h" 17 18 namespace __sanitizer { 19 20 enum HandleSignalMode { 21 kHandleSignalNo, 22 kHandleSignalYes, 23 kHandleSignalExclusive, 24 }; 25 26 struct CommonFlags { 27 #define COMMON_FLAG(Type, Name, DefaultValue, Description) Type Name; 28 #include "sanitizer_flags.inc" 29 #undef COMMON_FLAG 30 31 void SetDefaults(); 32 void CopyFrom(const CommonFlags &other); 33 }; 34 35 // Functions to get/set global CommonFlags shared by all sanitizer runtimes: 36 extern CommonFlags common_flags_dont_use; 37 inline const CommonFlags *common_flags() { 38 return &common_flags_dont_use; 39 } 40 41 inline void SetCommonFlagsDefaults() { 42 common_flags_dont_use.SetDefaults(); 43 } 44 45 // This function can only be used to setup tool-specific overrides for 46 // CommonFlags defaults. Generally, it should only be used right after 47 // SetCommonFlagsDefaults(), but before ParseCommonFlagsFromString(), and 48 // only during the flags initialization (i.e. before they are used for 49 // the first time). 50 inline void OverrideCommonFlags(const CommonFlags &cf) { 51 common_flags_dont_use.CopyFrom(cf); 52 } 53 54 void SubstituteForFlagValue(const char *s, char *out, uptr out_size); 55 56 class FlagParser; 57 void RegisterCommonFlags(FlagParser *parser, 58 CommonFlags *cf = &common_flags_dont_use); 59 void RegisterIncludeFlags(FlagParser *parser, CommonFlags *cf); 60 61 // Should be called after parsing all flags. Sets up common flag values 62 // and perform initializations common to all sanitizers (e.g. setting 63 // verbosity). 64 void InitializeCommonFlags(CommonFlags *cf = &common_flags_dont_use); 65 66 // Platform specific flags initialization. 67 void InitializePlatformCommonFlags(CommonFlags *cf); 68 69 } // namespace __sanitizer 70 71 #endif // SANITIZER_FLAGS_H 72