diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
commit | 2d37894b1b037cf24231090eda8589bbb44fb6fc (patch) | |
tree | be835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/llvm12/lib/Support/Debug.cpp | |
parent | 718c552901d703c502ccbefdfc3c9028d608b947 (diff) | |
download | ydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz |
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/llvm12/lib/Support/Debug.cpp')
-rw-r--r-- | contrib/libs/llvm12/lib/Support/Debug.cpp | 330 |
1 files changed, 165 insertions, 165 deletions
diff --git a/contrib/libs/llvm12/lib/Support/Debug.cpp b/contrib/libs/llvm12/lib/Support/Debug.cpp index a4eb82ecb6..73b25d5523 100644 --- a/contrib/libs/llvm12/lib/Support/Debug.cpp +++ b/contrib/libs/llvm12/lib/Support/Debug.cpp @@ -1,165 +1,165 @@ -//===-- Debug.cpp - An easy way to add debug output to your code ----------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file implements a handy way of adding debugging information to your -// code, without it being enabled all of the time, and without having to add -// command line options to enable it. -// -// In particular, just wrap your code with the LLVM_DEBUG() macro, and it will -// be enabled automatically if you specify '-debug' on the command-line. -// Alternatively, you can also use the SET_DEBUG_TYPE("foo") macro to specify -// that your debug code belongs to class "foo". Then, on the command line, you -// can specify '-debug-only=foo' to enable JUST the debug information for the -// foo class. -// -// When compiling without assertions, the -debug-* options and all code in -// LLVM_DEBUG() statements disappears, so it does not affect the runtime of the -// code. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Support/Debug.h" -#include "llvm/Support/CommandLine.h" -#include "llvm/Support/ManagedStatic.h" -#include "llvm/Support/Signals.h" -#include "llvm/Support/circular_raw_ostream.h" -#include "llvm/Support/raw_ostream.h" - -#undef isCurrentDebugType -#undef setCurrentDebugType -#undef setCurrentDebugTypes - -using namespace llvm; - -// Even though LLVM might be built with NDEBUG, define symbols that the code -// built without NDEBUG can depend on via the llvm/Support/Debug.h header. -namespace llvm { -/// Exported boolean set by the -debug option. -bool DebugFlag = false; - -static ManagedStatic<std::vector<std::string>> CurrentDebugType; - -/// Return true if the specified string is the debug type -/// specified on the command line, or if none was specified on the command line -/// with the -debug-only=X option. -bool isCurrentDebugType(const char *DebugType) { - if (CurrentDebugType->empty()) - return true; - // See if DebugType is in list. Note: do not use find() as that forces us to - // unnecessarily create an std::string instance. - for (auto &d : *CurrentDebugType) { - if (d == DebugType) - return true; - } - return false; -} - -/// Set the current debug type, as if the -debug-only=X -/// option were specified. Note that DebugFlag also needs to be set to true for -/// debug output to be produced. -/// -void setCurrentDebugTypes(const char **Types, unsigned Count); - -void setCurrentDebugType(const char *Type) { - setCurrentDebugTypes(&Type, 1); -} - -void setCurrentDebugTypes(const char **Types, unsigned Count) { - CurrentDebugType->clear(); - for (size_t T = 0; T < Count; ++T) - CurrentDebugType->push_back(Types[T]); -} -} // namespace llvm - -// All Debug.h functionality is a no-op in NDEBUG mode. -#ifndef NDEBUG - -// -debug - Command line option to enable the DEBUG statements in the passes. -// This flag may only be enabled in debug builds. -static cl::opt<bool, true> -Debug("debug", cl::desc("Enable debug output"), cl::Hidden, - cl::location(DebugFlag)); - -// -debug-buffer-size - Buffer the last N characters of debug output -//until program termination. -static cl::opt<unsigned> -DebugBufferSize("debug-buffer-size", - cl::desc("Buffer the last N characters of debug output " - "until program termination. " - "[default 0 -- immediate print-out]"), - cl::Hidden, - cl::init(0)); - -namespace { - -struct DebugOnlyOpt { - void operator=(const std::string &Val) const { - if (Val.empty()) - return; - DebugFlag = true; - SmallVector<StringRef,8> dbgTypes; - StringRef(Val).split(dbgTypes, ',', -1, false); - for (auto dbgType : dbgTypes) - CurrentDebugType->push_back(std::string(dbgType)); - } -}; - -} - -static DebugOnlyOpt DebugOnlyOptLoc; - -static cl::opt<DebugOnlyOpt, true, cl::parser<std::string> > -DebugOnly("debug-only", cl::desc("Enable a specific type of debug output (comma separated list of types)"), - cl::Hidden, cl::ZeroOrMore, cl::value_desc("debug string"), - cl::location(DebugOnlyOptLoc), cl::ValueRequired); -// Signal handlers - dump debug output on termination. -static void debug_user_sig_handler(void *Cookie) { - // This is a bit sneaky. Since this is under #ifndef NDEBUG, we - // know that debug mode is enabled and dbgs() really is a - // circular_raw_ostream. If NDEBUG is defined, then dbgs() == - // errs() but this will never be invoked. - llvm::circular_raw_ostream &dbgout = - static_cast<circular_raw_ostream &>(llvm::dbgs()); - dbgout.flushBufferWithBanner(); -} - -/// dbgs - Return a circular-buffered debug stream. -raw_ostream &llvm::dbgs() { - // Do one-time initialization in a thread-safe way. - static struct dbgstream { - circular_raw_ostream strm; - - dbgstream() : - strm(errs(), "*** Debug Log Output ***\n", - (!EnableDebugBuffering || !DebugFlag) ? 0 : DebugBufferSize) { - if (EnableDebugBuffering && DebugFlag && DebugBufferSize != 0) - // TODO: Add a handler for SIGUSER1-type signals so the user can - // force a debug dump. - sys::AddSignalHandler(&debug_user_sig_handler, nullptr); - // Otherwise we've already set the debug stream buffer size to - // zero, disabling buffering so it will output directly to errs(). - } - } thestrm; - - return thestrm.strm; -} - -#else -// Avoid "has no symbols" warning. -namespace llvm { - /// dbgs - Return errs(). - raw_ostream &dbgs() { - return errs(); - } -} - -#endif - -/// EnableDebugBuffering - Turn on signal handler installation. -/// -bool llvm::EnableDebugBuffering = false; +//===-- Debug.cpp - An easy way to add debug output to your code ----------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements a handy way of adding debugging information to your +// code, without it being enabled all of the time, and without having to add +// command line options to enable it. +// +// In particular, just wrap your code with the LLVM_DEBUG() macro, and it will +// be enabled automatically if you specify '-debug' on the command-line. +// Alternatively, you can also use the SET_DEBUG_TYPE("foo") macro to specify +// that your debug code belongs to class "foo". Then, on the command line, you +// can specify '-debug-only=foo' to enable JUST the debug information for the +// foo class. +// +// When compiling without assertions, the -debug-* options and all code in +// LLVM_DEBUG() statements disappears, so it does not affect the runtime of the +// code. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Support/Debug.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/Signals.h" +#include "llvm/Support/circular_raw_ostream.h" +#include "llvm/Support/raw_ostream.h" + +#undef isCurrentDebugType +#undef setCurrentDebugType +#undef setCurrentDebugTypes + +using namespace llvm; + +// Even though LLVM might be built with NDEBUG, define symbols that the code +// built without NDEBUG can depend on via the llvm/Support/Debug.h header. +namespace llvm { +/// Exported boolean set by the -debug option. +bool DebugFlag = false; + +static ManagedStatic<std::vector<std::string>> CurrentDebugType; + +/// Return true if the specified string is the debug type +/// specified on the command line, or if none was specified on the command line +/// with the -debug-only=X option. +bool isCurrentDebugType(const char *DebugType) { + if (CurrentDebugType->empty()) + return true; + // See if DebugType is in list. Note: do not use find() as that forces us to + // unnecessarily create an std::string instance. + for (auto &d : *CurrentDebugType) { + if (d == DebugType) + return true; + } + return false; +} + +/// Set the current debug type, as if the -debug-only=X +/// option were specified. Note that DebugFlag also needs to be set to true for +/// debug output to be produced. +/// +void setCurrentDebugTypes(const char **Types, unsigned Count); + +void setCurrentDebugType(const char *Type) { + setCurrentDebugTypes(&Type, 1); +} + +void setCurrentDebugTypes(const char **Types, unsigned Count) { + CurrentDebugType->clear(); + for (size_t T = 0; T < Count; ++T) + CurrentDebugType->push_back(Types[T]); +} +} // namespace llvm + +// All Debug.h functionality is a no-op in NDEBUG mode. +#ifndef NDEBUG + +// -debug - Command line option to enable the DEBUG statements in the passes. +// This flag may only be enabled in debug builds. +static cl::opt<bool, true> +Debug("debug", cl::desc("Enable debug output"), cl::Hidden, + cl::location(DebugFlag)); + +// -debug-buffer-size - Buffer the last N characters of debug output +//until program termination. +static cl::opt<unsigned> +DebugBufferSize("debug-buffer-size", + cl::desc("Buffer the last N characters of debug output " + "until program termination. " + "[default 0 -- immediate print-out]"), + cl::Hidden, + cl::init(0)); + +namespace { + +struct DebugOnlyOpt { + void operator=(const std::string &Val) const { + if (Val.empty()) + return; + DebugFlag = true; + SmallVector<StringRef,8> dbgTypes; + StringRef(Val).split(dbgTypes, ',', -1, false); + for (auto dbgType : dbgTypes) + CurrentDebugType->push_back(std::string(dbgType)); + } +}; + +} + +static DebugOnlyOpt DebugOnlyOptLoc; + +static cl::opt<DebugOnlyOpt, true, cl::parser<std::string> > +DebugOnly("debug-only", cl::desc("Enable a specific type of debug output (comma separated list of types)"), + cl::Hidden, cl::ZeroOrMore, cl::value_desc("debug string"), + cl::location(DebugOnlyOptLoc), cl::ValueRequired); +// Signal handlers - dump debug output on termination. +static void debug_user_sig_handler(void *Cookie) { + // This is a bit sneaky. Since this is under #ifndef NDEBUG, we + // know that debug mode is enabled and dbgs() really is a + // circular_raw_ostream. If NDEBUG is defined, then dbgs() == + // errs() but this will never be invoked. + llvm::circular_raw_ostream &dbgout = + static_cast<circular_raw_ostream &>(llvm::dbgs()); + dbgout.flushBufferWithBanner(); +} + +/// dbgs - Return a circular-buffered debug stream. +raw_ostream &llvm::dbgs() { + // Do one-time initialization in a thread-safe way. + static struct dbgstream { + circular_raw_ostream strm; + + dbgstream() : + strm(errs(), "*** Debug Log Output ***\n", + (!EnableDebugBuffering || !DebugFlag) ? 0 : DebugBufferSize) { + if (EnableDebugBuffering && DebugFlag && DebugBufferSize != 0) + // TODO: Add a handler for SIGUSER1-type signals so the user can + // force a debug dump. + sys::AddSignalHandler(&debug_user_sig_handler, nullptr); + // Otherwise we've already set the debug stream buffer size to + // zero, disabling buffering so it will output directly to errs(). + } + } thestrm; + + return thestrm.strm; +} + +#else +// Avoid "has no symbols" warning. +namespace llvm { + /// dbgs - Return errs(). + raw_ostream &dbgs() { + return errs(); + } +} + +#endif + +/// EnableDebugBuffering - Turn on signal handler installation. +/// +bool llvm::EnableDebugBuffering = false; |