brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 95fde9d Raw
94 lines · cpp
1//===-- memprof_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// This file is a part of MemProfiler, a memory profiler.10//11// MemProf flag parsing logic.12//===----------------------------------------------------------------------===//13 14#include "memprof_flags.h"15#include "memprof_interface_internal.h"16#include "memprof_stack.h"17#include "sanitizer_common/sanitizer_common.h"18#include "sanitizer_common/sanitizer_flag_parser.h"19#include "sanitizer_common/sanitizer_flags.h"20 21namespace __memprof {22 23Flags memprof_flags_dont_use_directly; // use via flags().24 25static const char *MaybeUseMemprofDefaultOptionsCompileDefinition() {26#ifdef MEMPROF_DEFAULT_OPTIONS27  return SANITIZER_STRINGIFY(MEMPROF_DEFAULT_OPTIONS);28#else29  return "";30#endif31}32 33void Flags::SetDefaults() {34#define MEMPROF_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue;35#include "memprof_flags.inc"36#undef MEMPROF_FLAG37}38 39static void RegisterMemprofFlags(FlagParser *parser, Flags *f) {40#define MEMPROF_FLAG(Type, Name, DefaultValue, Description)                    \41  RegisterFlag(parser, #Name, Description, &f->Name);42#include "memprof_flags.inc"43#undef MEMPROF_FLAG44}45 46void InitializeFlags() {47  // Set the default values and prepare for parsing MemProf and common flags.48  SetCommonFlagsDefaults();49  {50    CommonFlags cf;51    cf.CopyFrom(*common_flags());52    cf.external_symbolizer_path = GetEnv("MEMPROF_SYMBOLIZER_PATH");53    cf.malloc_context_size = kDefaultMallocContextSize;54    cf.intercept_tls_get_addr = true;55    cf.exitcode = 1;56    OverrideCommonFlags(cf);57  }58  Flags *f = flags();59  f->SetDefaults();60 61  FlagParser memprof_parser;62  RegisterMemprofFlags(&memprof_parser, f);63  RegisterCommonFlags(&memprof_parser);64 65  // Override from MemProf compile definition.66  const char *memprof_compile_def =67      MaybeUseMemprofDefaultOptionsCompileDefinition();68  memprof_parser.ParseString(memprof_compile_def);69 70  // Override from user-specified string.71  const char *memprof_default_options = __memprof_default_options();72  memprof_parser.ParseString(memprof_default_options);73 74  // Override from command line.75  memprof_parser.ParseStringFromEnv("MEMPROF_OPTIONS");76 77  InitializeCommonFlags();78 79  if (Verbosity())80    ReportUnrecognizedFlags();81 82  if (common_flags()->help) {83    memprof_parser.PrintFlagDescriptions();84  }85 86  CHECK_LE((uptr)common_flags()->malloc_context_size, kStackTraceMax);87}88 89} // namespace __memprof90 91SANITIZER_INTERFACE_WEAK_DEF(const char *, __memprof_default_options, void) {92  return __memprof_default_options_str;93}94