blob: a86fa373a83d4a35a7dc13e77967ad83128c22d3 [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
Robert Flackf196c932015-03-10 18:07:47 +000010#include "lldb/Core/Debugger.h"
Zachary Turnere6e2bb32015-03-31 21:03:22 +000011#include "lldb/Initialization/SystemLifetimeManager.h"
12#include "lldb/Initialization/SystemInitializerCommon.h"
13
14#include "llvm/ADT/STLExtras.h"
15#include "llvm/Support/ManagedStatic.h"
Robert Flackab3269d2015-03-02 15:14:50 +000016
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000017#include <stdio.h>
18#include <stdlib.h>
19
Zachary Turnere6e2bb32015-03-31 21:03:22 +000020static llvm::ManagedStatic<lldb_private::SystemLifetimeManager> g_debugger_lifetime;
21
Chaoren Line4bb0b32015-02-23 21:48:42 +000022static void
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000023display_usage (const char *progname)
24{
25 fprintf(stderr, "Usage:\n"
26 " %s g[dbserver] [options]\n"
27 " %s p[latform] [options]\n"
Chaoren Line4bb0b32015-02-23 21:48:42 +000028 "Invoke subcommand for additional help\n", progname, progname);
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000029 exit(0);
30}
31
32// Forward declarations of subcommand main methods.
33int main_gdbserver (int argc, char *argv[]);
34int main_platform (int argc, char *argv[]);
35
Robert Flackab3269d2015-03-02 15:14:50 +000036static void
37initialize ()
38{
Zachary Turnere6e2bb32015-03-31 21:03:22 +000039 g_debugger_lifetime->Initialize(llvm::make_unique<lldb_private::SystemInitializerCommon>(), nullptr);
Robert Flackab3269d2015-03-02 15:14:50 +000040}
41
42static void
43terminate ()
44{
Zachary Turnere6e2bb32015-03-31 21:03:22 +000045 g_debugger_lifetime->Terminate();
Robert Flackab3269d2015-03-02 15:14:50 +000046}
47
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000048//----------------------------------------------------------------------
49// main
50//----------------------------------------------------------------------
51int
52main (int argc, char *argv[])
53{
54 int option_error = 0;
55 const char *progname = argv[0];
56 if (argc < 2)
57 {
58 display_usage(progname);
59 exit(option_error);
60 }
61 else if (argv[1][0] == 'g')
62 {
Robert Flackab3269d2015-03-02 15:14:50 +000063 initialize();
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000064 main_gdbserver(argc, argv);
Robert Flackab3269d2015-03-02 15:14:50 +000065 terminate();
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000066 }
67 else if (argv[1][0] == 'p')
68 {
Robert Flackab3269d2015-03-02 15:14:50 +000069 initialize();
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000070 main_platform(argc, argv);
Robert Flackab3269d2015-03-02 15:14:50 +000071 terminate();
Tamas Berghammerc2c3d712015-02-18 15:39:41 +000072 }
73 else {
74 display_usage(progname);
75 exit(option_error);
76 }
77}