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