1 | //===-- lldb-server.cpp -----------------------------------------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #include "SystemInitializerLLGS.h" |
10 | #include "lldb/Host/Config.h" |
11 | #include "lldb/Initialization/SystemLifetimeManager.h" |
12 | #include "lldb/Version/Version.h" |
13 | |
14 | #include "llvm/ADT/STLExtras.h" |
15 | #include "llvm/ADT/StringRef.h" |
16 | #include "llvm/Support/InitLLVM.h" |
17 | #include "llvm/Support/ManagedStatic.h" |
18 | #include "llvm/Support/PrettyStackTrace.h" |
19 | #include "llvm/Support/Signals.h" |
20 | |
21 | #include <cstdio> |
22 | #include <cstdlib> |
23 | |
24 | static llvm::ManagedStatic<lldb_private::SystemLifetimeManager> |
25 | g_debugger_lifetime; |
26 | |
27 | static void display_usage(const char *progname) { |
28 | fprintf(stderr, format: "Usage:\n" |
29 | " %s v[ersion]\n" |
30 | " %s g[dbserver] [options]\n" |
31 | " %s p[latform] [options]\n" |
32 | "Invoke subcommand for additional help\n" , |
33 | progname, progname, progname); |
34 | exit(status: 0); |
35 | } |
36 | |
37 | // Forward declarations of subcommand main methods. |
38 | int main_gdbserver(int argc, char *argv[]); |
39 | int main_platform(int argc, char *argv[]); |
40 | |
41 | namespace llgs { |
42 | static void initialize() { |
43 | if (auto e = g_debugger_lifetime->Initialize( |
44 | initializer: std::make_unique<SystemInitializerLLGS>(), plugin_callback: nullptr)) |
45 | llvm::consumeError(Err: std::move(e)); |
46 | } |
47 | |
48 | static void terminate_debugger() { g_debugger_lifetime->Terminate(); } |
49 | } // namespace llgs |
50 | |
51 | // main |
52 | int main(int argc, char *argv[]) { |
53 | llvm::InitLLVM IL(argc, argv, /*InstallPipeSignalExitHandler=*/false); |
54 | llvm::setBugReportMsg("PLEASE submit a bug report to " LLDB_BUG_REPORT_URL |
55 | " and include the crash backtrace.\n" ); |
56 | |
57 | int option_error = 0; |
58 | const char *progname = argv[0]; |
59 | if (argc < 2) { |
60 | display_usage(progname); |
61 | exit(status: option_error); |
62 | } |
63 | |
64 | switch (argv[1][0]) { |
65 | case 'g': |
66 | llgs::initialize(); |
67 | main_gdbserver(argc, argv); |
68 | llgs::terminate_debugger(); |
69 | break; |
70 | case 'p': |
71 | llgs::initialize(); |
72 | main_platform(argc, argv); |
73 | llgs::terminate_debugger(); |
74 | break; |
75 | case 'v': |
76 | fprintf(stderr, format: "%s\n" , lldb_private::GetVersion()); |
77 | break; |
78 | default: |
79 | display_usage(progname); |
80 | exit(status: option_error); |
81 | } |
82 | } |
83 | |