brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 25cefd4 Raw
81 lines · cpp
1//===-- ubsan_flags.cpp ---------------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8//9// Runtime flags for UndefinedBehaviorSanitizer.10//11//===----------------------------------------------------------------------===//12 13#include "ubsan_platform.h"14#if CAN_SANITIZE_UB15#include "ubsan_flags.h"16#include "sanitizer_common/sanitizer_common.h"17#include "sanitizer_common/sanitizer_flags.h"18#include "sanitizer_common/sanitizer_flag_parser.h"19 20#include <stdlib.h>21 22namespace __ubsan {23 24static const char *GetFlag(const char *flag) {25  // We cannot call getenv() from inside a preinit array initializer26  if (SANITIZER_CAN_USE_PREINIT_ARRAY) {27    return GetEnv(flag);28  } else {29    return getenv(flag);30  }31}32 33Flags ubsan_flags;34 35void Flags::SetDefaults() {36#define UBSAN_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue;37#include "ubsan_flags.inc"38#undef UBSAN_FLAG39}40 41void RegisterUbsanFlags(FlagParser *parser, Flags *f) {42#define UBSAN_FLAG(Type, Name, DefaultValue, Description) \43  RegisterFlag(parser, #Name, Description, &f->Name);44#include "ubsan_flags.inc"45#undef UBSAN_FLAG46}47 48void InitializeFlags() {49  SetCommonFlagsDefaults();50  {51    CommonFlags cf;52    cf.CopyFrom(*common_flags());53    cf.external_symbolizer_path = GetFlag("UBSAN_SYMBOLIZER_PATH");54    OverrideCommonFlags(cf);55  }56 57  Flags *f = flags();58  f->SetDefaults();59 60  FlagParser parser;61  RegisterCommonFlags(&parser);62  RegisterUbsanFlags(&parser, f);63 64  // Override from user-specified string.65  parser.ParseString(__ubsan_default_options());66  // Override from environment variable.67  parser.ParseStringFromEnv("UBSAN_OPTIONS");68  InitializeCommonFlags();69  if (Verbosity()) ReportUnrecognizedFlags();70 71  if (common_flags()->help) parser.PrintFlagDescriptions();72}73 74}  // namespace __ubsan75 76SANITIZER_INTERFACE_WEAK_DEF(const char *, __ubsan_default_options, void) {77  return "";78}79 80#endif  // CAN_SANITIZE_UB81