diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/tools/lldb-server/lldb-server.cpp | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/tools/lldb-server/lldb-server.cpp')
-rw-r--r-- | gnu/llvm/lldb/tools/lldb-server/lldb-server.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/tools/lldb-server/lldb-server.cpp b/gnu/llvm/lldb/tools/lldb-server/lldb-server.cpp new file mode 100644 index 00000000000..749a381ebca --- /dev/null +++ b/gnu/llvm/lldb/tools/lldb-server/lldb-server.cpp @@ -0,0 +1,82 @@ +//===-- lldb-server.cpp -----------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "SystemInitializerLLGS.h" +#include "lldb/Initialization/SystemLifetimeManager.h" +#include "lldb/lldb-private.h" + +#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/InitLLVM.h" +#include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Signals.h" + +#include <stdio.h> +#include <stdlib.h> + +static llvm::ManagedStatic<lldb_private::SystemLifetimeManager> + g_debugger_lifetime; + +static void display_usage(const char *progname) { + fprintf(stderr, "Usage:\n" + " %s v[ersion]\n" + " %s g[dbserver] [options]\n" + " %s p[latform] [options]\n" + "Invoke subcommand for additional help\n", + progname, progname, progname); + exit(0); +} + +// Forward declarations of subcommand main methods. +int main_gdbserver(int argc, char *argv[]); +int main_platform(int argc, char *argv[]); + +namespace llgs { +static void initialize() { + if (auto e = g_debugger_lifetime->Initialize( + std::make_unique<SystemInitializerLLGS>(), nullptr)) + llvm::consumeError(std::move(e)); +} + +static void terminate_debugger() { g_debugger_lifetime->Terminate(); } +} // namespace llgs + +// main +int main(int argc, char *argv[]) { + llvm::InitLLVM IL(argc, argv, /*InstallPipeSignalExitHandler=*/false); + llvm::StringRef ToolName = argv[0]; + llvm::sys::PrintStackTraceOnErrorSignal(ToolName); + llvm::PrettyStackTraceProgram X(argc, argv); + + int option_error = 0; + const char *progname = argv[0]; + if (argc < 2) { + display_usage(progname); + exit(option_error); + } + + switch (argv[1][0]) { + case 'g': + llgs::initialize(); + main_gdbserver(argc, argv); + llgs::terminate_debugger(); + break; + case 'p': + llgs::initialize(); + main_platform(argc, argv); + llgs::terminate_debugger(); + break; + case 'v': + fprintf(stderr, "%s\n", lldb_private::GetVersion()); + break; + default: + display_usage(progname); + exit(option_error); + } +} |