1 //===-- CommandObjectPlugin.cpp -------------------------------------------===//
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-exception
7 //===----------------------------------------------------------------------===//
9 #include "CommandObjectPlugin.h"
10 #include "lldb/Interpreter/CommandInterpreter.h"
11 #include "lldb/Interpreter/CommandReturnObject.h"
14 using namespace lldb_private
;
16 class CommandObjectPluginLoad
: public CommandObjectParsed
{
18 CommandObjectPluginLoad(CommandInterpreter
&interpreter
)
19 : CommandObjectParsed(interpreter
, "plugin load",
20 "Import a dylib that implements an LLDB plugin.",
22 CommandArgumentEntry arg1
;
23 CommandArgumentData cmd_arg
;
25 // Define the first (and only) variant of this arg.
26 cmd_arg
.arg_type
= eArgTypeFilename
;
27 cmd_arg
.arg_repetition
= eArgRepeatPlain
;
29 // There is only one variant this argument could be; put it into the
31 arg1
.push_back(cmd_arg
);
33 // Push the data for the first argument into the m_arguments vector.
34 m_arguments
.push_back(arg1
);
37 ~CommandObjectPluginLoad() override
= default;
40 HandleArgumentCompletion(CompletionRequest
&request
,
41 OptionElementVector
&opt_element_vector
) override
{
42 lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
43 GetCommandInterpreter(), lldb::eDiskFileCompletion
, request
, nullptr);
47 void DoExecute(Args
&command
, CommandReturnObject
&result
) override
{
48 size_t argc
= command
.GetArgumentCount();
51 result
.AppendError("'plugin load' requires one argument");
57 FileSpec
dylib_fspec(command
[0].ref());
58 FileSystem::Instance().Resolve(dylib_fspec
);
60 if (GetDebugger().LoadPlugin(dylib_fspec
, error
))
61 result
.SetStatus(eReturnStatusSuccessFinishResult
);
63 result
.AppendError(error
.AsCString());
68 CommandObjectPlugin::CommandObjectPlugin(CommandInterpreter
&interpreter
)
69 : CommandObjectMultiword(interpreter
, "plugin",
70 "Commands for managing LLDB plugins.",
71 "plugin <subcommand> [<subcommand-options>]") {
72 LoadSubCommand("load",
73 CommandObjectSP(new CommandObjectPluginLoad(interpreter
)));
76 CommandObjectPlugin::~CommandObjectPlugin() = default;