xref: /llvm-project/compiler-rt/lib/rtsan/rtsan_flags.cpp (revision aa43f3abe0e9a7199a8df3f71364d7084f968825)
12e9b3316SChris Apple //===--- rtsan_flags.cpp - Realtime Sanitizer -------------------*- C++ -*-===//
22e9b3316SChris Apple //
32e9b3316SChris Apple // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42e9b3316SChris Apple // See https://llvm.org/LICENSE.txt for license information.
52e9b3316SChris Apple // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62e9b3316SChris Apple //
72e9b3316SChris Apple //===----------------------------------------------------------------------===//
82e9b3316SChris Apple //
92e9b3316SChris Apple // This file is a part of RealtimeSanitizer.
102e9b3316SChris Apple //
112e9b3316SChris Apple //===----------------------------------------------------------------------===//
122e9b3316SChris Apple 
132e9b3316SChris Apple #include "rtsan/rtsan_flags.h"
142e9b3316SChris Apple #include "sanitizer_common/sanitizer_flag_parser.h"
152e9b3316SChris Apple #include "sanitizer_common/sanitizer_flags.h"
162e9b3316SChris Apple 
172e9b3316SChris Apple using namespace __sanitizer;
182e9b3316SChris Apple using namespace __rtsan;
192e9b3316SChris Apple 
202e9b3316SChris Apple Flags __rtsan::flags_data;
212e9b3316SChris Apple 
222e9b3316SChris Apple SANITIZER_INTERFACE_WEAK_DEF(const char *, __rtsan_default_options, void) {
232e9b3316SChris Apple   return "";
242e9b3316SChris Apple }
252e9b3316SChris Apple 
262e9b3316SChris Apple static void RegisterRtsanFlags(FlagParser *parser, Flags *f) {
272e9b3316SChris Apple #define RTSAN_FLAG(Type, Name, DefaultValue, Description)                      \
282e9b3316SChris Apple   RegisterFlag(parser, #Name, Description, &f->Name);
292e9b3316SChris Apple #include "rtsan_flags.inc"
302e9b3316SChris Apple #undef RTSAN_FLAG
312e9b3316SChris Apple }
322e9b3316SChris Apple 
332e9b3316SChris Apple void __rtsan::InitializeFlags() {
342e9b3316SChris Apple   SetCommonFlagsDefaults();
352e9b3316SChris Apple   {
362e9b3316SChris Apple     CommonFlags cf;
372e9b3316SChris Apple     cf.CopyFrom(*common_flags());
38*aa43f3abSChris Apple     cf.exitcode = 43;
392e9b3316SChris Apple     cf.external_symbolizer_path = GetEnv("RTSAN_SYMBOLIZER_PATH");
402e9b3316SChris Apple     OverrideCommonFlags(cf);
412e9b3316SChris Apple   }
422e9b3316SChris Apple 
432e9b3316SChris Apple   FlagParser parser;
442e9b3316SChris Apple   RegisterRtsanFlags(&parser, &flags());
452e9b3316SChris Apple   RegisterCommonFlags(&parser);
462e9b3316SChris Apple 
472e9b3316SChris Apple   // Override from user-specified string.
482e9b3316SChris Apple   parser.ParseString(__rtsan_default_options());
492e9b3316SChris Apple 
502e9b3316SChris Apple   parser.ParseStringFromEnv("RTSAN_OPTIONS");
512e9b3316SChris Apple 
522e9b3316SChris Apple   InitializeCommonFlags();
532e9b3316SChris Apple 
542e9b3316SChris Apple   if (Verbosity())
552e9b3316SChris Apple     ReportUnrecognizedFlags();
562e9b3316SChris Apple 
572e9b3316SChris Apple   if (common_flags()->help)
582e9b3316SChris Apple     parser.PrintFlagDescriptions();
592e9b3316SChris Apple }
60