xref: /llvm-project/compiler-rt/lib/rtsan/rtsan_flags.cpp (revision aa43f3abe0e9a7199a8df3f71364d7084f968825)
1 //===--- rtsan_flags.cpp - Realtime Sanitizer -------------------*- 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 RealtimeSanitizer.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "rtsan/rtsan_flags.h"
14 #include "sanitizer_common/sanitizer_flag_parser.h"
15 #include "sanitizer_common/sanitizer_flags.h"
16 
17 using namespace __sanitizer;
18 using namespace __rtsan;
19 
20 Flags __rtsan::flags_data;
21 
22 SANITIZER_INTERFACE_WEAK_DEF(const char *, __rtsan_default_options, void) {
23   return "";
24 }
25 
26 static void RegisterRtsanFlags(FlagParser *parser, Flags *f) {
27 #define RTSAN_FLAG(Type, Name, DefaultValue, Description)                      \
28   RegisterFlag(parser, #Name, Description, &f->Name);
29 #include "rtsan_flags.inc"
30 #undef RTSAN_FLAG
31 }
32 
33 void __rtsan::InitializeFlags() {
34   SetCommonFlagsDefaults();
35   {
36     CommonFlags cf;
37     cf.CopyFrom(*common_flags());
38     cf.exitcode = 43;
39     cf.external_symbolizer_path = GetEnv("RTSAN_SYMBOLIZER_PATH");
40     OverrideCommonFlags(cf);
41   }
42 
43   FlagParser parser;
44   RegisterRtsanFlags(&parser, &flags());
45   RegisterCommonFlags(&parser);
46 
47   // Override from user-specified string.
48   parser.ParseString(__rtsan_default_options());
49 
50   parser.ParseStringFromEnv("RTSAN_OPTIONS");
51 
52   InitializeCommonFlags();
53 
54   if (Verbosity())
55     ReportUnrecognizedFlags();
56 
57   if (common_flags()->help)
58     parser.PrintFlagDescriptions();
59 }
60