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