1*80814287SRaphael Isemann //===-- CommandObjectPlugin.cpp -------------------------------------------===//
221dfcd9dSEnrico Granata //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
621dfcd9dSEnrico Granata //
721dfcd9dSEnrico Granata //===----------------------------------------------------------------------===//
821dfcd9dSEnrico Granata
921dfcd9dSEnrico Granata #include "CommandObjectPlugin.h"
1021dfcd9dSEnrico Granata #include "lldb/Interpreter/CommandInterpreter.h"
1121dfcd9dSEnrico Granata #include "lldb/Interpreter/CommandReturnObject.h"
1221dfcd9dSEnrico Granata
1321dfcd9dSEnrico Granata using namespace lldb;
1421dfcd9dSEnrico Granata using namespace lldb_private;
1521dfcd9dSEnrico Granata
16b9c1b51eSKate Stone class CommandObjectPluginLoad : public CommandObjectParsed {
1721dfcd9dSEnrico Granata public:
CommandObjectPluginLoad(CommandInterpreter & interpreter)18b9c1b51eSKate Stone CommandObjectPluginLoad(CommandInterpreter &interpreter)
19b9c1b51eSKate Stone : CommandObjectParsed(interpreter, "plugin load",
2021dfcd9dSEnrico Granata "Import a dylib that implements an LLDB plugin.",
21b9c1b51eSKate Stone nullptr) {
2221dfcd9dSEnrico Granata CommandArgumentEntry arg1;
2321dfcd9dSEnrico Granata CommandArgumentData cmd_arg;
2421dfcd9dSEnrico Granata
2521dfcd9dSEnrico Granata // Define the first (and only) variant of this arg.
2621dfcd9dSEnrico Granata cmd_arg.arg_type = eArgTypeFilename;
2721dfcd9dSEnrico Granata cmd_arg.arg_repetition = eArgRepeatPlain;
2821dfcd9dSEnrico Granata
29b9c1b51eSKate Stone // There is only one variant this argument could be; put it into the
30b9c1b51eSKate Stone // argument entry.
3121dfcd9dSEnrico Granata arg1.push_back(cmd_arg);
3221dfcd9dSEnrico Granata
3321dfcd9dSEnrico Granata // Push the data for the first argument into the m_arguments vector.
3421dfcd9dSEnrico Granata m_arguments.push_back(arg1);
3521dfcd9dSEnrico Granata }
3621dfcd9dSEnrico Granata
3726cac3afSEugene Zelenko ~CommandObjectPluginLoad() override = default;
3821dfcd9dSEnrico Granata
39ae34ed2cSRaphael Isemann void
HandleArgumentCompletion(CompletionRequest & request,OptionElementVector & opt_element_vector)40ae34ed2cSRaphael Isemann HandleArgumentCompletion(CompletionRequest &request,
412443bbd4SRaphael Isemann OptionElementVector &opt_element_vector) override {
42b9c1b51eSKate Stone CommandCompletions::InvokeCommonCompletionCallbacks(
43b9c1b51eSKate Stone GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
44a2e76c0bSRaphael Isemann request, nullptr);
4521dfcd9dSEnrico Granata }
4621dfcd9dSEnrico Granata
4721dfcd9dSEnrico Granata protected:
DoExecute(Args & command,CommandReturnObject & result)48b9c1b51eSKate Stone bool DoExecute(Args &command, CommandReturnObject &result) override {
4921dfcd9dSEnrico Granata size_t argc = command.GetArgumentCount();
5021dfcd9dSEnrico Granata
51b9c1b51eSKate Stone if (argc != 1) {
5221dfcd9dSEnrico Granata result.AppendError("'plugin load' requires one argument");
5321dfcd9dSEnrico Granata return false;
5421dfcd9dSEnrico Granata }
5521dfcd9dSEnrico Granata
5697206d57SZachary Turner Status error;
5721dfcd9dSEnrico Granata
580d9a201eSRaphael Isemann FileSpec dylib_fspec(command[0].ref());
598f3be7a3SJonas Devlieghere FileSystem::Instance().Resolve(dylib_fspec);
6021dfcd9dSEnrico Granata
6157179860SJonas Devlieghere if (GetDebugger().LoadPlugin(dylib_fspec, error))
6221dfcd9dSEnrico Granata result.SetStatus(eReturnStatusSuccessFinishResult);
63b9c1b51eSKate Stone else {
64e743c782SEnrico Granata result.AppendError(error.AsCString());
65e743c782SEnrico Granata }
6621dfcd9dSEnrico Granata
6721dfcd9dSEnrico Granata return result.Succeeded();
6821dfcd9dSEnrico Granata }
6921dfcd9dSEnrico Granata };
7021dfcd9dSEnrico Granata
CommandObjectPlugin(CommandInterpreter & interpreter)717428a18cSKate Stone CommandObjectPlugin::CommandObjectPlugin(CommandInterpreter &interpreter)
72b9c1b51eSKate Stone : CommandObjectMultiword(interpreter, "plugin",
73b9c1b51eSKate Stone "Commands for managing LLDB plugins.",
74b9c1b51eSKate Stone "plugin <subcommand> [<subcommand-options>]") {
75b9c1b51eSKate Stone LoadSubCommand("load",
76b9c1b51eSKate Stone CommandObjectSP(new CommandObjectPluginLoad(interpreter)));
7721dfcd9dSEnrico Granata }
7821dfcd9dSEnrico Granata
7926cac3afSEugene Zelenko CommandObjectPlugin::~CommandObjectPlugin() = default;
80