lldb-server.cpp revision 341825
1//===-- lldb-server.cpp -----------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "SystemInitializerLLGS.h"
11#include "lldb/Initialization/SystemLifetimeManager.h"
12#include "lldb/lldb-private.h"
13
14#include "llvm/ADT/STLExtras.h"
15#include "llvm/ADT/StringRef.h"
16#include "llvm/Support/ManagedStatic.h"
17#include "llvm/Support/PrettyStackTrace.h"
18#include "llvm/Support/Signals.h"
19
20#include <stdio.h>
21#include <stdlib.h>
22
23static llvm::ManagedStatic<lldb_private::SystemLifetimeManager>
24    g_debugger_lifetime;
25
26static void display_usage(const char *progname) {
27  fprintf(stderr, "Usage:\n"
28                  "  %s v[ersion]\n"
29                  "  %s g[dbserver] [options]\n"
30                  "  %s p[latform] [options]\n"
31                  "Invoke subcommand for additional help\n",
32          progname, progname, progname);
33  exit(0);
34}
35
36// Forward declarations of subcommand main methods.
37int main_gdbserver(int argc, char *argv[]);
38int main_platform(int argc, char *argv[]);
39
40static void initialize() {
41  g_debugger_lifetime->Initialize(llvm::make_unique<SystemInitializerLLGS>(),
42                                  nullptr);
43}
44
45static void terminate() { g_debugger_lifetime->Terminate(); }
46
47//----------------------------------------------------------------------
48// main
49//----------------------------------------------------------------------
50int main(int argc, char *argv[]) {
51  llvm::StringRef ToolName = argv[0];
52  llvm::sys::PrintStackTraceOnErrorSignal(ToolName);
53  llvm::PrettyStackTraceProgram X(argc, argv);
54
55  int option_error = 0;
56  const char *progname = argv[0];
57  if (argc < 2) {
58    display_usage(progname);
59    exit(option_error);
60  }
61
62  switch (argv[1][0]) {
63  case 'g':
64    initialize();
65    main_gdbserver(argc, argv);
66    terminate();
67    break;
68  case 'p':
69    initialize();
70    main_platform(argc, argv);
71    terminate();
72    break;
73  case 'v':
74    fprintf(stderr, "%s\n", lldb_private::GetVersion());
75    break;
76  default:
77    display_usage(progname);
78    exit(option_error);
79  }
80}
81