]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/tools/lldb-server/lldb-server.cpp
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / tools / lldb-server / lldb-server.cpp
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
23 static llvm::ManagedStatic<lldb_private::SystemLifetimeManager>
24     g_debugger_lifetime;
25
26 static 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.
37 int main_gdbserver(int argc, char *argv[]);
38 int main_platform(int argc, char *argv[]);
39
40 static void initialize() {
41   g_debugger_lifetime->Initialize(llvm::make_unique<SystemInitializerLLGS>(),
42                                   nullptr);
43 }
44
45 static void terminate() { g_debugger_lifetime->Terminate(); }
46
47 //----------------------------------------------------------------------
48 // main
49 //----------------------------------------------------------------------
50 int 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 }