Jonas Devlieghere 2ad6e0a696 Move pretty stack trace printer into driver.
We used to have a pretty stack trace printer in SystemInitializerCommon.
This was disabled on Apple because we didn't want the library to be
setting signal handlers, as this was causing issues when loaded into
Xcode. However, I think it's useful to have this for the LLDB driver, so
I moved it up to use the PrettyStackTraceProgram in the driver's main.

Differential revision: https://reviews.llvm.org/D49377

llvm-svn: 337261
2018-07-17 10:04:19 +00:00

81 lines
2.2 KiB
C++

//===-- lldb-server.cpp -----------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "SystemInitializerLLGS.h"
#include "lldb/Initialization/SystemLifetimeManager.h"
#include "lldb/lldb-private.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/Signals.h"
#include <stdio.h>
#include <stdlib.h>
static llvm::ManagedStatic<lldb_private::SystemLifetimeManager>
g_debugger_lifetime;
static void display_usage(const char *progname) {
fprintf(stderr, "Usage:\n"
" %s v[ersion]\n"
" %s g[dbserver] [options]\n"
" %s p[latform] [options]\n"
"Invoke subcommand for additional help\n",
progname, progname, progname);
exit(0);
}
// Forward declarations of subcommand main methods.
int main_gdbserver(int argc, char *argv[]);
int main_platform(int argc, char *argv[]);
static void initialize() {
g_debugger_lifetime->Initialize(llvm::make_unique<SystemInitializerLLGS>(),
nullptr);
}
static void terminate() { g_debugger_lifetime->Terminate(); }
//----------------------------------------------------------------------
// main
//----------------------------------------------------------------------
int main(int argc, char *argv[]) {
llvm::StringRef ToolName = argv[0];
llvm::sys::PrintStackTraceOnErrorSignal(ToolName);
llvm::PrettyStackTraceProgram X(argc, argv);
int option_error = 0;
const char *progname = argv[0];
if (argc < 2) {
display_usage(progname);
exit(option_error);
}
switch (argv[1][0]) {
case 'g':
initialize();
main_gdbserver(argc, argv);
terminate();
break;
case 'p':
initialize();
main_platform(argc, argv);
terminate();
break;
case 'v':
fprintf(stderr, "%s\n", lldb_private::GetVersion());
break;
default:
display_usage(progname);
exit(option_error);
}
}