[llvm] r272232 - Search for llvm-symbolizer binary in the same directory as argv[0], before

Richard Smith via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 8 18:04:44 PDT 2016


Note, the corresponding changes in other LLVM subprojects are
r272233-r272235; syncs in [272232,272235) may result in build failures.

On Wed, Jun 8, 2016 at 5:53 PM, Richard Smith via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: rsmith
> Date: Wed Jun  8 19:53:21 2016
> New Revision: 272232
>
> URL: http://llvm.org/viewvc/llvm-project?rev=272232&view=rev
> Log:
> Search for llvm-symbolizer binary in the same directory as argv[0], before
> looking for it along $PATH. This allows installs of LLVM tools outside of
> $PATH to find the symbolizer and produce pretty backtraces if they crash.
>
> Modified:
>     llvm/trunk/include/llvm/Support/Signals.h
>     llvm/trunk/lib/Support/Signals.cpp
>     llvm/trunk/lib/Support/Unix/Signals.inc
>     llvm/trunk/lib/Support/Windows/Signals.inc
>     llvm/trunk/tools/bugpoint/bugpoint.cpp
>     llvm/trunk/tools/dsymutil/dsymutil.cpp
>     llvm/trunk/tools/llc/llc.cpp
>     llvm/trunk/tools/lli/lli.cpp
>     llvm/trunk/tools/llvm-ar/llvm-ar.cpp
>     llvm/trunk/tools/llvm-as/llvm-as.cpp
>     llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
>     llvm/trunk/tools/llvm-cov/CodeCoverage.cpp
>     llvm/trunk/tools/llvm-cov/TestingSupport.cpp
>     llvm/trunk/tools/llvm-cov/gcov.cpp
>     llvm/trunk/tools/llvm-cov/llvm-cov.cpp
>     llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp
>     llvm/trunk/tools/llvm-dis/llvm-dis.cpp
>     llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
>     llvm/trunk/tools/llvm-extract/llvm-extract.cpp
>     llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp
>     llvm/trunk/tools/llvm-link/llvm-link.cpp
>     llvm/trunk/tools/llvm-lto/llvm-lto.cpp
>     llvm/trunk/tools/llvm-mc/llvm-mc.cpp
>     llvm/trunk/tools/llvm-mcmarkup/llvm-mcmarkup.cpp
>     llvm/trunk/tools/llvm-nm/llvm-nm.cpp
>     llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
>     llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
>     llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
>     llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp
>     llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp
>     llvm/trunk/tools/llvm-size/llvm-size.cpp
>     llvm/trunk/tools/llvm-symbolizer/llvm-symbolizer.cpp
>     llvm/trunk/tools/obj2yaml/obj2yaml.cpp
>     llvm/trunk/tools/opt/opt.cpp
>     llvm/trunk/tools/sancov/sancov.cc
>     llvm/trunk/tools/verify-uselistorder/verify-uselistorder.cpp
>     llvm/trunk/tools/yaml2obj/yaml2obj.cpp
>     llvm/trunk/utils/FileCheck/FileCheck.cpp
>     llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp
>     llvm/trunk/utils/TableGen/TableGen.cpp
>     llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp
>
> Modified: llvm/trunk/include/llvm/Support/Signals.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Signals.h?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/Signals.h (original)
> +++ llvm/trunk/include/llvm/Support/Signals.h Wed Jun  8 19:53:21 2016
> @@ -38,8 +38,14 @@ namespace sys {
>
>    /// When an error signal (such as SIBABRT or SIGSEGV) is delivered to
> the
>    /// process, print a stack trace and then exit.
> -  /// @brief Print a stack trace if a fatal signal occurs.
> -  void PrintStackTraceOnErrorSignal(bool DisableCrashReporting = false);
> +  /// \brief Print a stack trace if a fatal signal occurs.
> +  /// \param Argv0 the current binary name, used to find the symbolizer
> +  ///        relative to the current binary before searching $PATH; can be
> +  ///        StringRef(), in which case we will only search $PATH.
> +  /// \param DisableCrashReporting if \c true, disable the normal crash
> +  ///        reporting mechanisms on the underlying operating system.
> +  void PrintStackTraceOnErrorSignal(StringRef Argv0,
> +                                    bool DisableCrashReporting = false);
>
>    /// Disable all system dialog boxes that appear when the process
> crashes.
>    void DisableSystemDialogsOnCrash();
>
> Modified: llvm/trunk/lib/Support/Signals.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Signals.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Signals.cpp (original)
> +++ llvm/trunk/lib/Support/Signals.cpp Wed Jun  8 19:53:21 2016
> @@ -62,28 +62,40 @@ static FormattedNumber format_ptr(void *
>    return format_hex((uint64_t)PC, PtrWidth);
>  }
>
> -static bool printSymbolizedStackTrace(void **StackTrace, int Depth,
> +static bool printSymbolizedStackTrace(StringRef Argv0,
> +                                      void **StackTrace, int Depth,
>                                        llvm::raw_ostream &OS)
>    LLVM_ATTRIBUTE_USED;
>
>  /// Helper that launches llvm-symbolizer and symbolizes a backtrace.
> -static bool printSymbolizedStackTrace(void **StackTrace, int Depth,
> +static bool printSymbolizedStackTrace(StringRef Argv0,
> +                                      void **StackTrace, int Depth,
>                                        llvm::raw_ostream &OS) {
> +  // Don't recursively invoke the llvm-symbolizer binary.
> +  if (Argv0.find("llvm-symbolizer") != std::string::npos)
> +    return false;
> +
>    // FIXME: Subtract necessary number from StackTrace entries to turn
> return addresses
>    // into actual instruction addresses.
> -  // Use llvm-symbolizer tool to symbolize the stack traces.
> -  ErrorOr<std::string> LLVMSymbolizerPathOrErr =
> -      sys::findProgramByName("llvm-symbolizer");
> +  // Use llvm-symbolizer tool to symbolize the stack traces. First look
> for it
> +  // alongside our binary, then in $PATH.
> +  ErrorOr<std::string> LLVMSymbolizerPathOrErr = std::error_code();
> +  if (!Argv0.empty()) {
> +    StringRef Parent = llvm::sys::path::parent_path(Argv0);
> +    if (!Parent.empty())
> +      LLVMSymbolizerPathOrErr = sys::findProgramByName("llvm-symbolizer",
> Parent);
> +  }
> +  if (!LLVMSymbolizerPathOrErr)
> +    LLVMSymbolizerPathOrErr = sys::findProgramByName("llvm-symbolizer");
>    if (!LLVMSymbolizerPathOrErr)
>      return false;
>    const std::string &LLVMSymbolizerPath = *LLVMSymbolizerPathOrErr;
> -  // We don't know argv0 or the address of main() at this point, but try
> -  // to guess it anyway (it's possible on some platforms).
> -  std::string MainExecutableName = sys::fs::getMainExecutable(nullptr,
> nullptr);
> -  if (MainExecutableName.empty() ||
> -      MainExecutableName.find("llvm-symbolizer") != std::string::npos)
> -    return false;
>
> +  // If we don't know argv0 or the address of main() at this point, try
> +  // to guess it anyway (it's possible on some platforms).
> +  std::string MainExecutableName =
> +      Argv0.empty() ? sys::fs::getMainExecutable(nullptr, nullptr)
> +                    : (std::string)Argv0;
>    BumpPtrAllocator Allocator;
>    StringSaver StrPool(Allocator);
>    std::vector<const char *> Modules(Depth, nullptr);
>
> Modified: llvm/trunk/lib/Support/Unix/Signals.inc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Signals.inc?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Unix/Signals.inc (original)
> +++ llvm/trunk/lib/Support/Unix/Signals.inc Wed Jun  8 19:53:21 2016
> @@ -68,6 +68,8 @@ static void (*InterruptFunction)() = nul
>
>  static ManagedStatic<std::vector<std::string>> FilesToRemove;
>
> +static StringRef Argv0;
> +
>  // IntSigs - Signals that represent requested termination. There's no bug
>  // or failure, or if there is, it's not our direct responsibility. For
> whatever
>  // reason, our continued execution is no longer desirable.
> @@ -408,7 +410,7 @@ void llvm::sys::PrintStackTrace(raw_ostr
>    if (!depth)
>      return;
>
> -  if (printSymbolizedStackTrace(StackTrace, depth, OS))
> +  if (printSymbolizedStackTrace(Argv0, StackTrace, depth, OS))
>      return;
>  #if HAVE_DLFCN_H && __GNUG__
>    int width = 0;
> @@ -471,7 +473,10 @@ void llvm::sys::DisableSystemDialogsOnCr
>
>  /// PrintStackTraceOnErrorSignal - When an error signal (such as SIGABRT
> or
>  /// SIGSEGV) is delivered to the process, print a stack trace and then
> exit.
> -void llvm::sys::PrintStackTraceOnErrorSignal(bool DisableCrashReporting) {
> +void llvm::sys::PrintStackTraceOnErrorSignal(StringRef Argv0,
> +                                             bool DisableCrashReporting) {
> +  ::Argv0 = Argv0;
> +
>    AddSignalHandler(PrintStackTraceSignalHandler, nullptr);
>
>  #if defined(__APPLE__) && defined(ENABLE_CRASH_OVERRIDES)
>
> Modified: llvm/trunk/lib/Support/Windows/Signals.inc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Signals.inc?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Windows/Signals.inc (original)
> +++ llvm/trunk/lib/Support/Windows/Signals.inc Wed Jun  8 19:53:21 2016
> @@ -206,6 +206,8 @@ static PTOP_LEVEL_EXCEPTION_FILTER OldFi
>  static CRITICAL_SECTION CriticalSection;
>  static bool CriticalSectionInitialized = false;
>
> +static StringRef Argv0;
> +
>  enum {
>  #if defined(_M_X64)
>    NativeMachineType = IMAGE_FILE_MACHINE_AMD64
> @@ -240,7 +242,7 @@ static bool printStackTraceWithLLVMSymbo
>        break;
>    }
>
> -  return printSymbolizedStackTrace(&StackTrace[0], Depth, OS);
> +  return printSymbolizedStackTrace(Argv0, &StackTrace[0], Depth, OS);
>  }
>
>  namespace {
> @@ -496,7 +498,10 @@ void sys::DisableSystemDialogsOnCrash()
>
>  /// PrintStackTraceOnErrorSignal - When an error signal (such as SIBABRT
> or
>  /// SIGSEGV) is delivered to the process, print a stack trace and then
> exit.
> -void sys::PrintStackTraceOnErrorSignal(bool DisableCrashReporting) {
> +void sys::PrintStackTraceOnErrorSignal(StringRef Argv0,
> +                                       bool DisableCrashReporting) {
> +  ::Argv0 = Argv0;
> +
>    if (DisableCrashReporting || getenv("LLVM_DISABLE_CRASH_REPORT"))
>      Process::PreventCoreFiles();
>
>
> Modified: llvm/trunk/tools/bugpoint/bugpoint.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/bugpoint.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/bugpoint/bugpoint.cpp (original)
> +++ llvm/trunk/tools/bugpoint/bugpoint.cpp Wed Jun  8 19:53:21 2016
> @@ -113,7 +113,7 @@ void initializePollyPasses(llvm::PassReg
>
>  int main(int argc, char **argv) {
>  #ifndef DEBUG_BUGPOINT
> -  llvm::sys::PrintStackTraceOnErrorSignal();
> +  llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
>    llvm::PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>  #endif
>
> Modified: llvm/trunk/tools/dsymutil/dsymutil.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/dsymutil.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/dsymutil/dsymutil.cpp (original)
> +++ llvm/trunk/tools/dsymutil/dsymutil.cpp Wed Jun  8 19:53:21 2016
> @@ -237,7 +237,7 @@ void llvm::dsymutil::exitDsymutil(int Ex
>  }
>
>  int main(int argc, char **argv) {
> -  llvm::sys::PrintStackTraceOnErrorSignal();
> +  llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
>    llvm::PrettyStackTraceProgram StackPrinter(argc, argv);
>    llvm::llvm_shutdown_obj Shutdown;
>    LinkOptions Options;
>
> Modified: llvm/trunk/tools/llc/llc.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llc/llc.cpp (original)
> +++ llvm/trunk/tools/llc/llc.cpp Wed Jun  8 19:53:21 2016
> @@ -202,7 +202,7 @@ static void DiagnosticHandler(const Diag
>  // main - Entry point for the llc compiler.
>  //
>  int main(int argc, char **argv) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    // Enable debug stream buffering.
>
> Modified: llvm/trunk/tools/lli/lli.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/lli.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/lli/lli.cpp (original)
> +++ llvm/trunk/tools/lli/lli.cpp Wed Jun  8 19:53:21 2016
> @@ -365,7 +365,7 @@ CodeGenOpt::Level getOptLevel() {
>  // main Driver function
>  //
>  int main(int argc, char **argv, char * const *envp) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    atexit(llvm_shutdown); // Call llvm_shutdown() on exit.
>
> Modified: llvm/trunk/tools/llvm-ar/llvm-ar.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ar/llvm-ar.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-ar/llvm-ar.cpp (original)
> +++ llvm/trunk/tools/llvm-ar/llvm-ar.cpp Wed Jun  8 19:53:21 2016
> @@ -773,7 +773,7 @@ static int ranlib_main() {
>  int main(int argc, char **argv) {
>    ToolName = argv[0];
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/llvm-as/llvm-as.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-as/llvm-as.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-as/llvm-as.cpp (original)
> +++ llvm/trunk/tools/llvm-as/llvm-as.cpp Wed Jun  8 19:53:21 2016
> @@ -89,7 +89,7 @@ static void WriteOutputFile(const Module
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    LLVMContext Context;
>    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
>
> Modified: llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp (original)
> +++ llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp Wed Jun  8
> 19:53:21 2016
> @@ -915,7 +915,7 @@ static int AnalyzeBitcode() {
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>    cl::ParseCommandLineOptions(argc, argv, "llvm-bcanalyzer file
> analyzer\n");
>
> Modified: llvm/trunk/tools/llvm-cov/CodeCoverage.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CodeCoverage.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-cov/CodeCoverage.cpp (original)
> +++ llvm/trunk/tools/llvm-cov/CodeCoverage.cpp Wed Jun  8 19:53:21 2016
> @@ -26,11 +26,8 @@
>  #include "llvm/Support/CommandLine.h"
>  #include "llvm/Support/FileSystem.h"
>  #include "llvm/Support/Format.h"
> -#include "llvm/Support/ManagedStatic.h"
>  #include "llvm/Support/Path.h"
> -#include "llvm/Support/PrettyStackTrace.h"
>  #include "llvm/Support/Process.h"
> -#include "llvm/Support/Signals.h"
>  #include <functional>
>  #include <system_error>
>
> @@ -240,11 +237,6 @@ std::unique_ptr<CoverageMapping> CodeCov
>  }
>
>  int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
> -  // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> -  PrettyStackTraceProgram X(argc, argv);
> -  llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
> -
>    cl::opt<std::string, true> ObjectFilename(
>        cl::Positional, cl::Required, cl::location(this->ObjectFilename),
>        cl::desc("Covered executable or object file."));
>
> Modified: llvm/trunk/tools/llvm-cov/TestingSupport.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/TestingSupport.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-cov/TestingSupport.cpp (original)
> +++ llvm/trunk/tools/llvm-cov/TestingSupport.cpp Wed Jun  8 19:53:21 2016
> @@ -11,9 +11,6 @@
>  #include "llvm/ProfileData/InstrProf.h"
>  #include "llvm/Support/CommandLine.h"
>  #include "llvm/Support/LEB128.h"
> -#include "llvm/Support/ManagedStatic.h"
> -#include "llvm/Support/PrettyStackTrace.h"
> -#include "llvm/Support/Signals.h"
>  #include "llvm/Support/raw_ostream.h"
>  #include <functional>
>  #include <system_error>
> @@ -22,10 +19,6 @@ using namespace llvm;
>  using namespace object;
>
>  int convertForTestingMain(int argc, const char *argv[]) {
> -  sys::PrintStackTraceOnErrorSignal();
> -  PrettyStackTraceProgram X(argc, argv);
> -  llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
> -
>    cl::opt<std::string> InputSourceFile(cl::Positional, cl::Required,
>                                         cl::desc("<Source file>"));
>
>
> Modified: llvm/trunk/tools/llvm-cov/gcov.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/gcov.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-cov/gcov.cpp (original)
> +++ llvm/trunk/tools/llvm-cov/gcov.cpp Wed Jun  8 19:53:21 2016
> @@ -16,10 +16,7 @@
>  #include "llvm/Support/Errc.h"
>  #include "llvm/Support/FileSystem.h"
>  #include "llvm/Support/GCOV.h"
> -#include "llvm/Support/ManagedStatic.h"
>  #include "llvm/Support/Path.h"
> -#include "llvm/Support/PrettyStackTrace.h"
> -#include "llvm/Support/Signals.h"
>  #include <system_error>
>  using namespace llvm;
>
> @@ -85,11 +82,6 @@ static void reportCoverage(StringRef Sou
>  }
>
>  int gcovMain(int argc, const char *argv[]) {
> -  // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> -  PrettyStackTraceProgram X(argc, argv);
> -  llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
> -
>    cl::list<std::string> SourceFiles(cl::Positional, cl::OneOrMore,
>                                      cl::desc("SOURCEFILE"));
>
>
> Modified: llvm/trunk/tools/llvm-cov/llvm-cov.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/llvm-cov.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-cov/llvm-cov.cpp (original)
> +++ llvm/trunk/tools/llvm-cov/llvm-cov.cpp Wed Jun  8 19:53:21 2016
> @@ -14,8 +14,11 @@
>  #include "llvm/ADT/StringRef.h"
>  #include "llvm/ADT/StringSwitch.h"
>  #include "llvm/Support/CommandLine.h"
> +#include "llvm/Support/ManagedStatic.h"
>  #include "llvm/Support/Path.h"
> +#include "llvm/Support/PrettyStackTrace.h"
>  #include "llvm/Support/Process.h"
> +#include "llvm/Support/Signals.h"
>  #include "llvm/Support/raw_ostream.h"
>  #include <string>
>
> @@ -51,6 +54,11 @@ static int versionMain(int argc, const c
>  }
>
>  int main(int argc, const char **argv) {
> +  // Print a stack trace if we signal out.
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
> +  PrettyStackTraceProgram X(argc, argv);
> +  llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
> +
>    // If argv[0] is or ends with 'gcov', always be gcov compatible
>    if (sys::path::stem(argv[0]).endswith_lower("gcov"))
>      return gcovMain(argc, argv);
>
> Modified: llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp (original)
> +++ llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp Wed Jun  8 19:53:21 2016
> @@ -525,7 +525,7 @@ static void dumpInput(StringRef File) {
>  }
>
>  int main(int argc, const char *argv[]) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;
>
>
> Modified: llvm/trunk/tools/llvm-dis/llvm-dis.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dis/llvm-dis.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-dis/llvm-dis.cpp (original)
> +++ llvm/trunk/tools/llvm-dis/llvm-dis.cpp Wed Jun  8 19:53:21 2016
> @@ -134,7 +134,7 @@ static void diagnosticHandler(const Diag
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    LLVMContext Context;
>
> Modified: llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp (original)
> +++ llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp Wed Jun  8 19:53:21
> 2016
> @@ -146,7 +146,7 @@ static std::vector<std::string> expandBu
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/llvm-extract/llvm-extract.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-extract/llvm-extract.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-extract/llvm-extract.cpp (original)
> +++ llvm/trunk/tools/llvm-extract/llvm-extract.cpp Wed Jun  8 19:53:21 2016
> @@ -102,7 +102,7 @@ static cl::opt<bool> PreserveAssemblyUse
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    LLVMContext Context;
>
> Modified: llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp (original)
> +++ llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp Wed Jun  8
> 19:53:21 2016
> @@ -179,7 +179,7 @@ InputFilename(cl::Positional, cl::desc("
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/llvm-link/llvm-link.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-link/llvm-link.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-link/llvm-link.cpp (original)
> +++ llvm/trunk/tools/llvm-link/llvm-link.cpp Wed Jun  8 19:53:21 2016
> @@ -335,7 +335,7 @@ static bool linkFiles(const char *argv0,
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    LLVMContext Context;
>
> Modified: llvm/trunk/tools/llvm-lto/llvm-lto.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-lto/llvm-lto.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-lto/llvm-lto.cpp (original)
> +++ llvm/trunk/tools/llvm-lto/llvm-lto.cpp Wed Jun  8 19:53:21 2016
> @@ -691,7 +691,7 @@ private:
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
>
> Modified: llvm/trunk/tools/llvm-mc/llvm-mc.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/llvm-mc.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-mc/llvm-mc.cpp (original)
> +++ llvm/trunk/tools/llvm-mc/llvm-mc.cpp Wed Jun  8 19:53:21 2016
> @@ -369,7 +369,7 @@ static int AssembleInput(const char *Pro
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/llvm-mcmarkup/llvm-mcmarkup.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mcmarkup/llvm-mcmarkup.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-mcmarkup/llvm-mcmarkup.cpp (original)
> +++ llvm/trunk/tools/llvm-mcmarkup/llvm-mcmarkup.cpp Wed Jun  8 19:53:21
> 2016
> @@ -208,7 +208,7 @@ static void parseMCMarkup(StringRef File
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>
> Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
> +++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Wed Jun  8 19:53:21 2016
> @@ -1347,7 +1347,7 @@ static void dumpSymbolNamesFromFile(std:
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
>
> Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)
> +++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Wed Jun  8 19:53:21 2016
> @@ -1736,7 +1736,7 @@ static void DumpInput(StringRef file) {
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp (original)
> +++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp Wed Jun  8 19:53:21 2016
> @@ -433,7 +433,7 @@ static void dumpInput(StringRef Path) {
>
>  int main(int argc_, const char *argv_[]) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv_[0]);
>    PrettyStackTraceProgram X(argc_, argv_);
>
>    ExitOnErr.setBanner("llvm-pdbdump: ");
>
> Modified: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)
> +++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Wed Jun  8 19:53:21
> 2016
> @@ -518,7 +518,7 @@ static int show_main(int argc, const cha
>
>  int main(int argc, const char *argv[]) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp (original)
> +++ llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp Wed Jun  8 19:53:21 2016
> @@ -487,7 +487,7 @@ static void dumpInput(StringRef File) {
>  }
>
>  int main(int argc, const char *argv[]) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;
>
>
> Modified: llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp (original)
> +++ llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp Wed Jun  8 19:53:21 2016
> @@ -726,7 +726,7 @@ static int linkAndVerify() {
>  }
>
>  int main(int argc, char **argv) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    ProgramName = argv[0];
>
> Modified: llvm/trunk/tools/llvm-size/llvm-size.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-size/llvm-size.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-size/llvm-size.cpp (original)
> +++ llvm/trunk/tools/llvm-size/llvm-size.cpp Wed Jun  8 19:53:21 2016
> @@ -806,7 +806,7 @@ static void printFileSectionSizes(String
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>
>    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
>
> Modified: llvm/trunk/tools/llvm-symbolizer/llvm-symbolizer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-symbolizer/llvm-symbolizer.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-symbolizer/llvm-symbolizer.cpp (original)
> +++ llvm/trunk/tools/llvm-symbolizer/llvm-symbolizer.cpp Wed Jun  8
> 19:53:21 2016
> @@ -140,7 +140,7 @@ static bool parseCommand(StringRef Input
>
>  int main(int argc, char **argv) {
>    // Print stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/obj2yaml/obj2yaml.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/obj2yaml.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/obj2yaml/obj2yaml.cpp (original)
> +++ llvm/trunk/tools/obj2yaml/obj2yaml.cpp Wed Jun  8 19:53:21 2016
> @@ -48,7 +48,7 @@ cl::opt<std::string> InputFilename(cl::P
>
>  int main(int argc, char *argv[]) {
>    cl::ParseCommandLineOptions(argc, argv);
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/opt/opt.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/opt/opt.cpp (original)
> +++ llvm/trunk/tools/opt/opt.cpp Wed Jun  8 19:53:21 2016
> @@ -327,7 +327,7 @@ void initializePollyPasses(llvm::PassReg
>  // main for opt
>  //
>  int main(int argc, char **argv) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    llvm::PrettyStackTraceProgram X(argc, argv);
>
>    // Enable debug stream buffering.
>
> Modified: llvm/trunk/tools/sancov/sancov.cc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/sancov/sancov.cc?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/sancov/sancov.cc (original)
> +++ llvm/trunk/tools/sancov/sancov.cc Wed Jun  8 19:53:21 2016
> @@ -1197,7 +1197,7 @@ private:
>
>  int main(int argc, char **argv) {
>    // Print stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/tools/verify-uselistorder/verify-uselistorder.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/verify-uselistorder/verify-uselistorder.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/verify-uselistorder/verify-uselistorder.cpp (original)
> +++ llvm/trunk/tools/verify-uselistorder/verify-uselistorder.cpp Wed Jun
> 8 19:53:21 2016
> @@ -526,7 +526,7 @@ static void reverseUseLists(Module &M) {
>  }
>
>  int main(int argc, char **argv) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    llvm::PrettyStackTraceProgram X(argc, argv);
>
>    // Enable debug stream buffering.
>
> Modified: llvm/trunk/tools/yaml2obj/yaml2obj.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2obj.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/yaml2obj/yaml2obj.cpp (original)
> +++ llvm/trunk/tools/yaml2obj/yaml2obj.cpp Wed Jun  8 19:53:21 2016
> @@ -79,7 +79,7 @@ static int convertYAML(yaml::Input &YIn,
>
>  int main(int argc, char **argv) {
>    cl::ParseCommandLineOptions(argc, argv);
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/utils/FileCheck/FileCheck.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileCheck/FileCheck.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/FileCheck/FileCheck.cpp (original)
> +++ llvm/trunk/utils/FileCheck/FileCheck.cpp Wed Jun  8 19:53:21 2016
> @@ -1306,7 +1306,7 @@ static void DumpCommandLine(int argc, ch
>  }
>
>  int main(int argc, char **argv) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    cl::ParseCommandLineOptions(argc, argv);
>
>
> Modified: llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp (original)
> +++ llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp Wed Jun  8 19:53:21
> 2016
> @@ -296,7 +296,7 @@ static StringRef ExceptionCodeToString(D
>
>  int main(int argc, char **argv) {
>    // Print a stack trace if we signal out.
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>
>
> Modified: llvm/trunk/utils/TableGen/TableGen.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TableGen.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/TableGen/TableGen.cpp (original)
> +++ llvm/trunk/utils/TableGen/TableGen.cpp Wed Jun  8 19:53:21 2016
> @@ -179,7 +179,7 @@ bool LLVMTableGenMain(raw_ostream &OS, R
>  }
>
>  int main(int argc, char **argv) {
> -  sys::PrintStackTraceOnErrorSignal();
> +  sys::PrintStackTraceOnErrorSignal(argv[0]);
>    PrettyStackTraceProgram X(argc, argv);
>    cl::ParseCommandLineOptions(argc, argv);
>
>
> Modified: llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp?rev=272232&r1=272231&r2=272232&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp (original)
> +++ llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp Wed Jun  8
> 19:53:21 2016
> @@ -22,7 +22,8 @@
>  const char *TestMainArgv0;
>
>  int main(int argc, char **argv) {
> -  llvm::sys::PrintStackTraceOnErrorSignal(true /* Disable crash reporting
> */);
> +  llvm::sys::PrintStackTraceOnErrorSignal(argv[0],
> +                                          true /* Disable crash reporting
> */);
>    testing::InitGoogleTest(&argc, argv);
>    llvm::cl::ParseCommandLineOptions(argc, argv);
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160608/084166b1/attachment.html>


More information about the llvm-commits mailing list