13cab2bb3Spatrick //===-- sanitizer_flags.h ---------------------------------------*- C++ -*-===//
23cab2bb3Spatrick //
33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information.
53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63cab2bb3Spatrick //
73cab2bb3Spatrick //===----------------------------------------------------------------------===//
83cab2bb3Spatrick //
93cab2bb3Spatrick // This file is a part of ThreadSanitizer/AddressSanitizer runtime.
103cab2bb3Spatrick //
113cab2bb3Spatrick //===----------------------------------------------------------------------===//
123cab2bb3Spatrick
133cab2bb3Spatrick #ifndef SANITIZER_FLAGS_H
143cab2bb3Spatrick #define SANITIZER_FLAGS_H
153cab2bb3Spatrick
163cab2bb3Spatrick #include "sanitizer_internal_defs.h"
173cab2bb3Spatrick
183cab2bb3Spatrick namespace __sanitizer {
193cab2bb3Spatrick
203cab2bb3Spatrick enum HandleSignalMode {
213cab2bb3Spatrick kHandleSignalNo,
223cab2bb3Spatrick kHandleSignalYes,
233cab2bb3Spatrick kHandleSignalExclusive,
243cab2bb3Spatrick };
253cab2bb3Spatrick
263cab2bb3Spatrick struct CommonFlags {
273cab2bb3Spatrick #define COMMON_FLAG(Type, Name, DefaultValue, Description) Type Name;
283cab2bb3Spatrick #include "sanitizer_flags.inc"
293cab2bb3Spatrick #undef COMMON_FLAG
303cab2bb3Spatrick
313cab2bb3Spatrick void SetDefaults();
323cab2bb3Spatrick void CopyFrom(const CommonFlags &other);
333cab2bb3Spatrick };
343cab2bb3Spatrick
353cab2bb3Spatrick // Functions to get/set global CommonFlags shared by all sanitizer runtimes:
363cab2bb3Spatrick extern CommonFlags common_flags_dont_use;
common_flags()373cab2bb3Spatrick inline const CommonFlags *common_flags() {
383cab2bb3Spatrick return &common_flags_dont_use;
393cab2bb3Spatrick }
403cab2bb3Spatrick
SetCommonFlagsDefaults()413cab2bb3Spatrick inline void SetCommonFlagsDefaults() {
423cab2bb3Spatrick common_flags_dont_use.SetDefaults();
433cab2bb3Spatrick }
443cab2bb3Spatrick
453cab2bb3Spatrick // This function can only be used to setup tool-specific overrides for
463cab2bb3Spatrick // CommonFlags defaults. Generally, it should only be used right after
473cab2bb3Spatrick // SetCommonFlagsDefaults(), but before ParseCommonFlagsFromString(), and
483cab2bb3Spatrick // only during the flags initialization (i.e. before they are used for
493cab2bb3Spatrick // the first time).
OverrideCommonFlags(const CommonFlags & cf)503cab2bb3Spatrick inline void OverrideCommonFlags(const CommonFlags &cf) {
513cab2bb3Spatrick common_flags_dont_use.CopyFrom(cf);
523cab2bb3Spatrick }
533cab2bb3Spatrick
543cab2bb3Spatrick void SubstituteForFlagValue(const char *s, char *out, uptr out_size);
553cab2bb3Spatrick
563cab2bb3Spatrick class FlagParser;
573cab2bb3Spatrick void RegisterCommonFlags(FlagParser *parser,
583cab2bb3Spatrick CommonFlags *cf = &common_flags_dont_use);
593cab2bb3Spatrick void RegisterIncludeFlags(FlagParser *parser, CommonFlags *cf);
603cab2bb3Spatrick
613cab2bb3Spatrick // Should be called after parsing all flags. Sets up common flag values
623cab2bb3Spatrick // and perform initializations common to all sanitizers (e.g. setting
633cab2bb3Spatrick // verbosity).
643cab2bb3Spatrick void InitializeCommonFlags(CommonFlags *cf = &common_flags_dont_use);
65*d89ec533Spatrick
66*d89ec533Spatrick // Platform specific flags initialization.
67*d89ec533Spatrick void InitializePlatformCommonFlags(CommonFlags *cf);
68*d89ec533Spatrick
693cab2bb3Spatrick } // namespace __sanitizer
703cab2bb3Spatrick
713cab2bb3Spatrick #endif // SANITIZER_FLAGS_H
72