blob: f05c96cfaa95312e9ac07982f4c75e682153518f [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() {
Pavel Labathfa3fa5b2018-05-24 12:44:18 +000041 g_debugger_lifetime->Initialize(llvm::make_unique<SystemInitializerLLGS>(),
42 nullptr);
Robert Flackab3269d2015-03-02 15:14:50 +000043}
44
Kate Stoneb9c1b512016-09-06 20:57:50 +000045static void terminate() { g_debugger_lifetime->Terminate(); }
Robert Flackab3269d2015-03-02 15:14:50 +000046
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000047//----------------------------------------------------------------------
48// main
49//----------------------------------------------------------------------
Kate Stoneb9c1b512016-09-06 20:57:50 +000050int main(int argc, char *argv[]) {
Jonas Devlieghere2ad6e0a2018-07-17 10:04:19 +000051 llvm::StringRef ToolName = argv[0];
52 llvm::sys::PrintStackTraceOnErrorSignal(ToolName);
53 llvm::PrettyStackTraceProgram X(argc, argv);
54
Kate Stoneb9c1b512016-09-06 20:57:50 +000055 int option_error = 0;
56 const char *progname = argv[0];
57 if (argc < 2) {
58 display_usage(progname);
59 exit(option_error);
60 }
Tamas Berghammer2e912ec2016-02-10 10:35:48 +000061
Kate Stoneb9c1b512016-09-06 20:57:50 +000062 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 }
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000080}