Path: blob/main/contrib/llvm-project/compiler-rt/lib/scudo/standalone/flags.cpp
35292 views
//===-- flags.cpp -----------------------------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "flags.h"9#include "common.h"10#include "flags_parser.h"1112#include "scudo/interface.h"1314namespace scudo {1516Flags *getFlags() {17static Flags F;18return &F;19}2021void Flags::setDefaults() {22#define SCUDO_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue;23#include "flags.inc"24#undef SCUDO_FLAG2526#ifdef GWP_ASAN_HOOKS27#define GWP_ASAN_OPTION(Type, Name, DefaultValue, Description) \28GWP_ASAN_##Name = DefaultValue;29#include "gwp_asan/options.inc"30#undef GWP_ASAN_OPTION31#endif // GWP_ASAN_HOOKS32}3334void registerFlags(FlagParser *Parser, Flags *F) {35#define SCUDO_FLAG(Type, Name, DefaultValue, Description) \36Parser->registerFlag(#Name, Description, FlagType::FT_##Type, \37reinterpret_cast<void *>(&F->Name));38#include "flags.inc"39#undef SCUDO_FLAG4041#ifdef GWP_ASAN_HOOKS42#define GWP_ASAN_OPTION(Type, Name, DefaultValue, Description) \43Parser->registerFlag("GWP_ASAN_" #Name, Description, FlagType::FT_##Type, \44reinterpret_cast<void *>(&F->GWP_ASAN_##Name));45#include "gwp_asan/options.inc"46#undef GWP_ASAN_OPTION47#endif // GWP_ASAN_HOOKS48}4950static const char *getCompileDefinitionScudoDefaultOptions() {51#ifdef SCUDO_DEFAULT_OPTIONS52return STRINGIFY(SCUDO_DEFAULT_OPTIONS);53#else54return "";55#endif56}5758static const char *getScudoDefaultOptions() {59return (&__scudo_default_options) ? __scudo_default_options() : "";60}6162void initFlags() {63Flags *F = getFlags();64F->setDefaults();65FlagParser Parser;66registerFlags(&Parser, F);67Parser.parseString(getCompileDefinitionScudoDefaultOptions());68Parser.parseString(getScudoDefaultOptions());69Parser.parseString(getEnv("SCUDO_OPTIONS"));70if (const char *V = getEnv("SCUDO_ALLOCATION_RING_BUFFER_SIZE")) {71Parser.parseStringPair("allocation_ring_buffer_size", V);72}73}7475} // namespace scudo767778