brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 744f8ce Raw
83 lines · cpp
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-exception6//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 24static llvm::ManagedStatic<lldb_private::SystemLifetimeManager>25    g_debugger_lifetime;26 27static void display_usage(const char *progname) {28  fprintf(stderr, "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(0);35}36 37// Forward declarations of subcommand main methods.38int main_gdbserver(int argc, char *argv[]);39int main_platform(int argc, char *argv[]);40 41namespace llgs {42static void initialize() {43  if (auto e = g_debugger_lifetime->Initialize(44          std::make_unique<SystemInitializerLLGS>()))45    llvm::consumeError(std::move(e));46}47 48static void terminate_debugger() { g_debugger_lifetime->Terminate(); }49} // namespace llgs50 51// main52int 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_URL55                        " 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(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, "%s\n", lldb_private::GetVersion());77    break;78  default:79    display_usage(progname);80    exit(option_error);81  }82}83