101458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata//===-- fooplugin.cpp -------------------------------------------*- C++ -*-===// 201458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata// 301458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata// The LLVM Compiler Infrastructure 401458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata// 501458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata// This file is distributed under the University of Illinois Open Source 601458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata// License. See LICENSE.TXT for details. 701458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata// 801458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata//===----------------------------------------------------------------------===// 901458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata 1001458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata/* 1101458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico GranataAn example plugin for LLDB that provides a new foo command with a child subcommand 1201458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico GranataCompile this into a dylib foo.dylib and load by placing in appropriate locations on disk or 1301458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granataby typing plugin load foo.dylib at the LLDB command line 1401458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata*/ 1501458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata 1601458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata#include <LLDB/SBCommandInterpreter.h> 1701458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata#include <LLDB/SBCommandReturnObject.h> 1801458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata#include <LLDB/SBDebugger.h> 1901458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata 2001458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granatanamespace lldb { 2101458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata bool 2201458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata PluginInitialize (lldb::SBDebugger debugger); 2301458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata} 2401458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata 2501458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granataclass ChildCommand : public lldb::SBCommandPluginInterface 2601458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata{ 2701458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granatapublic: 2801458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata virtual bool 2901458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata DoExecute (lldb::SBDebugger debugger, 3001458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata char** command, 3101458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata lldb::SBCommandReturnObject &result) 3201458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata { 3301458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata if (command) 3401458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata { 3501458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata const char* arg = *command; 3601458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata while (arg) 3701458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata { 3801458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata result.Printf("%s ",arg); 3901458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata arg = *(++command); 4001458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata } 4101458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata result.Printf("\n"); 4201458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata return true; 4301458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata } 4401458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata return false; 4501458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata } 4601458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata 4701458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata}; 4801458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata 4901458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granatabool 5001458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granatalldb::PluginInitialize (lldb::SBDebugger debugger) 5101458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata{ 5201458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata lldb::SBCommandInterpreter interpreter = debugger.GetCommandInterpreter(); 5301458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata lldb::SBCommand foo = interpreter.AddMultiwordCommand("plugin_loaded_command",NULL); 5401458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata foo.AddCommand("child",new ChildCommand(),"a child of plugin_loaded_command"); 5501458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata return true; 5601458ca40d79e33ee440e5d48dfdd92503f77dfeEnrico Granata} 57