1 //===-- CommandObjectPlugin.cpp -------------------------------------------===// 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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "CommandObjectPlugin.h" 10 #include "lldb/Interpreter/CommandInterpreter.h" 11 #include "lldb/Interpreter/CommandReturnObject.h" 12 13 using namespace lldb; 14 using namespace lldb_private; 15 16 class CommandObjectPluginLoad : public CommandObjectParsed { 17 public: 18 CommandObjectPluginLoad(CommandInterpreter &interpreter) 19 : CommandObjectParsed(interpreter, "plugin load", 20 "Import a dylib that implements an LLDB plugin.", 21 nullptr) { 22 CommandArgumentEntry arg1; 23 CommandArgumentData cmd_arg; 24 25 // Define the first (and only) variant of this arg. 26 cmd_arg.arg_type = eArgTypeFilename; 27 cmd_arg.arg_repetition = eArgRepeatPlain; 28 29 // There is only one variant this argument could be; put it into the 30 // argument entry. 31 arg1.push_back(cmd_arg); 32 33 // Push the data for the first argument into the m_arguments vector. 34 m_arguments.push_back(arg1); 35 } 36 37 ~CommandObjectPluginLoad() override = default; 38 39 protected: 40 void DoExecute(Args &command, CommandReturnObject &result) override { 41 size_t argc = command.GetArgumentCount(); 42 43 if (argc != 1) { 44 result.AppendError("'plugin load' requires one argument"); 45 return; 46 } 47 48 Status error; 49 50 FileSpec dylib_fspec(command[0].ref()); 51 FileSystem::Instance().Resolve(dylib_fspec); 52 53 if (GetDebugger().LoadPlugin(dylib_fspec, error)) 54 result.SetStatus(eReturnStatusSuccessFinishResult); 55 else { 56 result.AppendError(error.AsCString()); 57 } 58 } 59 }; 60 61 CommandObjectPlugin::CommandObjectPlugin(CommandInterpreter &interpreter) 62 : CommandObjectMultiword(interpreter, "plugin", 63 "Commands for managing LLDB plugins.", 64 "plugin <subcommand> [<subcommand-options>]") { 65 LoadSubCommand("load", 66 CommandObjectSP(new CommandObjectPluginLoad(interpreter))); 67 } 68 69 CommandObjectPlugin::~CommandObjectPlugin() = default; 70