]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/compiler-rt/lib/scudo/standalone/flags.cc
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / compiler-rt / lib / scudo / standalone / flags.cc
1 //===-- flags.cc ------------------------------------------------*- 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 #include "flags.h"
10 #include "common.h"
11 #include "flags_parser.h"
12 #include "interface.h"
13
14 namespace scudo {
15
16 Flags *getFlags() {
17   static Flags F;
18   return &F;
19 }
20
21 void Flags::setDefaults() {
22 #define SCUDO_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue;
23 #include "flags.inc"
24 #undef SCUDO_FLAG
25 }
26
27 void registerFlags(FlagParser *Parser, Flags *F) {
28 #define SCUDO_FLAG(Type, Name, DefaultValue, Description)                      \
29   Parser->registerFlag(#Name, Description, FlagType::FT_##Type,                \
30                        reinterpret_cast<void *>(&F->Name));
31 #include "flags.inc"
32 #undef SCUDO_FLAG
33 }
34
35 static const char *getCompileDefinitionScudoDefaultOptions() {
36 #ifdef SCUDO_DEFAULT_OPTIONS
37   return STRINGIFY(SCUDO_DEFAULT_OPTIONS);
38 #else
39   return "";
40 #endif
41 }
42
43 static const char *getScudoDefaultOptions() {
44   return (&__scudo_default_options) ? __scudo_default_options() : "";
45 }
46
47 void initFlags() {
48   Flags *F = getFlags();
49   F->setDefaults();
50   FlagParser Parser;
51   registerFlags(&Parser, F);
52   Parser.parseString(getCompileDefinitionScudoDefaultOptions());
53   Parser.parseString(getScudoDefaultOptions());
54   Parser.parseString(getEnv("SCUDO_OPTIONS"));
55 }
56
57 } // namespace scudo