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