1*99451b44SJordan Rupprecht//===-- plugin.cpp -------------------------------------------*- C++ -*-===//
2*99451b44SJordan Rupprecht//
3*99451b44SJordan Rupprecht// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*99451b44SJordan Rupprecht// See https://llvm.org/LICENSE.txt for license information.
5*99451b44SJordan Rupprecht// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*99451b44SJordan Rupprecht//
7*99451b44SJordan Rupprecht//===----------------------------------------------------------------------===//
8*99451b44SJordan Rupprecht
9*99451b44SJordan Rupprecht/*
10*99451b44SJordan RupprechtAn example plugin for LLDB that provides a new foo command with a child subcommand
11*99451b44SJordan RupprechtCompile this into a dylib foo.dylib and load by placing in appropriate locations on disk or
12*99451b44SJordan Rupprechtby typing plugin load foo.dylib at the LLDB command line
13*99451b44SJordan Rupprecht*/
14*99451b44SJordan Rupprecht
15*99451b44SJordan Rupprecht%include_SB_APIs%
16*99451b44SJordan Rupprecht
17*99451b44SJordan Rupprechtnamespace lldb {
18*99451b44SJordan Rupprecht    bool
19*99451b44SJordan Rupprecht    PluginInitialize (lldb::SBDebugger debugger);
20*99451b44SJordan Rupprecht}
21*99451b44SJordan Rupprecht
22*99451b44SJordan Rupprechtclass ChildCommand : public lldb::SBCommandPluginInterface
23*99451b44SJordan Rupprecht{
24*99451b44SJordan Rupprechtpublic:
25*99451b44SJordan Rupprecht    virtual bool
26*99451b44SJordan Rupprecht    DoExecute (lldb::SBDebugger debugger,
27*99451b44SJordan Rupprecht               char** command,
28*99451b44SJordan Rupprecht               lldb::SBCommandReturnObject &result)
29*99451b44SJordan Rupprecht    {
30*99451b44SJordan Rupprecht        if (command)
31*99451b44SJordan Rupprecht        {
32*99451b44SJordan Rupprecht            const char* arg = *command;
33*99451b44SJordan Rupprecht            while (arg)
34*99451b44SJordan Rupprecht            {
35*99451b44SJordan Rupprecht                result.Printf("%s ",arg);
36*99451b44SJordan Rupprecht                arg = *(++command);
37*99451b44SJordan Rupprecht            }
38*99451b44SJordan Rupprecht            result.Printf("\n");
39*99451b44SJordan Rupprecht            return true;
40*99451b44SJordan Rupprecht        }
41*99451b44SJordan Rupprecht        return false;
42*99451b44SJordan Rupprecht    }
43*99451b44SJordan Rupprecht
44*99451b44SJordan Rupprecht};
45*99451b44SJordan Rupprecht
46*99451b44SJordan Rupprechtbool
47*99451b44SJordan Rupprechtlldb::PluginInitialize (lldb::SBDebugger debugger)
48*99451b44SJordan Rupprecht{
49*99451b44SJordan Rupprecht    lldb::SBCommandInterpreter interpreter = debugger.GetCommandInterpreter();
50*99451b44SJordan Rupprecht    lldb::SBCommand foo = interpreter.AddMultiwordCommand("plugin_loaded_command",NULL);
51*99451b44SJordan Rupprecht    foo.AddCommand("child",new ChildCommand(),"a child of plugin_loaded_command");
52*99451b44SJordan Rupprecht    return true;
53*99451b44SJordan Rupprecht}
54