brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · f498edf Raw
77 lines · cpp
1//===-- flags.cpp -----------------------------------------------*- 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-exception6//7//===----------------------------------------------------------------------===//8 9#include "flags.h"10#include "common.h"11#include "flags_parser.h"12 13#include "scudo/interface.h"14 15namespace scudo {16 17Flags *getFlags() {18  static Flags F;19  return &F;20}21 22void Flags::setDefaults() {23#define SCUDO_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue;24#include "flags.inc"25#undef SCUDO_FLAG26 27#ifdef GWP_ASAN_HOOKS28#define GWP_ASAN_OPTION(Type, Name, DefaultValue, Description)                 \29  GWP_ASAN_##Name = DefaultValue;30#include "gwp_asan/options.inc"31#undef GWP_ASAN_OPTION32#endif // GWP_ASAN_HOOKS33}34 35void registerFlags(FlagParser *Parser, Flags *F) {36#define SCUDO_FLAG(Type, Name, DefaultValue, Description)                      \37  Parser->registerFlag(#Name, Description, FlagType::FT_##Type,                \38                       reinterpret_cast<void *>(&F->Name));39#include "flags.inc"40#undef SCUDO_FLAG41 42#ifdef GWP_ASAN_HOOKS43#define GWP_ASAN_OPTION(Type, Name, DefaultValue, Description)                 \44  Parser->registerFlag("GWP_ASAN_" #Name, Description, FlagType::FT_##Type,    \45                       reinterpret_cast<void *>(&F->GWP_ASAN_##Name));46#include "gwp_asan/options.inc"47#undef GWP_ASAN_OPTION48#endif // GWP_ASAN_HOOKS49}50 51static const char *getCompileDefinitionScudoDefaultOptions() {52#ifdef SCUDO_DEFAULT_OPTIONS53  return STRINGIFY(SCUDO_DEFAULT_OPTIONS);54#else55  return "";56#endif57}58 59static const char *getScudoDefaultOptions() {60  return (&__scudo_default_options) ? __scudo_default_options() : "";61}62 63void initFlags() {64  Flags *F = getFlags();65  F->setDefaults();66  FlagParser Parser;67  registerFlags(&Parser, F);68  Parser.parseString(getCompileDefinitionScudoDefaultOptions());69  Parser.parseString(getScudoDefaultOptions());70  Parser.parseString(getEnv("SCUDO_OPTIONS"));71  if (const char *V = getEnv("SCUDO_ALLOCATION_RING_BUFFER_SIZE")) {72    Parser.parseStringPair("allocation_ring_buffer_size", V);73  }74}75 76} // namespace scudo77