blob: c924fa22f3102fa50edfb07647df5f01e6a3c421 [file] [log] [blame]
Tamas Berghammerc2c3d712015-02-18 15:39:41 +00001//===-- 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
Pavel Labathfa3fa5b2018-05-24 12:44:18 +000010#include "SystemInitializerLLGS.h"
Kate Stoneb9c1b512016-09-06 20:57:50 +000011#include "lldb/Initialization/SystemLifetimeManager.h"
Tamas Berghammer2e912ec2016-02-10 10:35:48 +000012#include "lldb/lldb-private.h"
Zachary Turnere6e2bb32015-03-31 21:03:22 +000013
14#include "llvm/ADT/STLExtras.h"
Jonas Devlieghere2ad6e0a2018-07-17 10:04:19 +000015#include "llvm/ADT/StringRef.h"
Zachary Turnere6e2bb32015-03-31 21:03:22 +000016#include "llvm/Support/ManagedStatic.h"
Jonas Devlieghere2ad6e0a2018-07-17 10:04:19 +000017#include "llvm/Support/PrettyStackTrace.h"
18#include "llvm/Support/Signals.h"
Robert Flackab3269d2015-03-02 15:14:50 +000019
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000020#include <stdio.h>
21#include <stdlib.h>
22
Kate Stoneb9c1b512016-09-06 20:57:50 +000023static llvm::ManagedStatic<lldb_private::SystemLifetimeManager>
24 g_debugger_lifetime;
Zachary Turnere6e2bb32015-03-31 21:03:22 +000025
Kate Stoneb9c1b512016-09-06 20:57:50 +000026static 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);
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000034}
35
36// Forward declarations of subcommand main methods.
Kate Stoneb9c1b512016-09-06 20:57:50 +000037int main_gdbserver(int argc, char *argv[]);
38int main_platform(int argc, char *argv[]);
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000039
Kate Stoneb9c1b512016-09-06 20:57:50 +000040static void initialize() {
Jonas Devlieghere15eacd72018-12-03 17:28:29 +000041 if (auto e = g_debugger_lifetime->Initialize(
42 llvm::make_unique<SystemInitializerLLGS>(), {}, nullptr))
43 llvm::consumeError(std::move(e));
Robert Flackab3269d2015-03-02 15:14:50 +000044}
45
Kate Stoneb9c1b512016-09-06 20:57:50 +000046static void terminate() { g_debugger_lifetime->Terminate(); }
Robert Flackab3269d2015-03-02 15:14:50 +000047
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000048//----------------------------------------------------------------------
49// main
50//----------------------------------------------------------------------
Kate Stoneb9c1b512016-09-06 20:57:50 +000051int main(int argc, char *argv[]) {
Jonas Devlieghere2ad6e0a2018-07-17 10:04:19 +000052 llvm::StringRef ToolName = argv[0];
53 llvm::sys::PrintStackTraceOnErrorSignal(ToolName);
54 llvm::PrettyStackTraceProgram X(argc, argv);
55
Kate Stoneb9c1b512016-09-06 20:57:50 +000056 int option_error = 0;
57 const char *progname = argv[0];
58 if (argc < 2) {
59 display_usage(progname);
60 exit(option_error);
61 }
Tamas Berghammer2e912ec2016-02-10 10:35:48 +000062
Kate Stoneb9c1b512016-09-06 20:57:50 +000063 switch (argv[1][0]) {
64 case 'g':
65 initialize();
66 main_gdbserver(argc, argv);
67 terminate();
68 break;
69 case 'p':
70 initialize();
71 main_platform(argc, argv);
72 terminate();
73 break;
74 case 'v':
75 fprintf(stderr, "%s\n", lldb_private::GetVersion());
76 break;
77 default:
78 display_usage(progname);
79 exit(option_error);
80 }
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000081}