1ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata//===-- fooplugin.cpp -------------------------------------------*- C++ -*-===//
2ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata//
3ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata//                     The LLVM Compiler Infrastructure
4ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata//
5ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata// This file is distributed under the University of Illinois Open Source
6ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata// License. See LICENSE.TXT for details.
7ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata//
8ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata//===----------------------------------------------------------------------===//
9ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata
106d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata/*
116d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataAn example plugin for LLDB that provides a new foo command with a child subcommand
126d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataCompile this into a dylib foo.dylib and load by placing in appropriate locations on disk or
136d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granataby typing plugin load foo.dylib at the LLDB command line
146d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata*/
156d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata
166d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata#include <LLDB/SBCommandInterpreter.h>
176d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata#include <LLDB/SBCommandReturnObject.h>
186d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata#include <LLDB/SBDebugger.h>
196d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata
206d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatanamespace lldb {
216d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    bool
226d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    PluginInitialize (lldb::SBDebugger debugger);
236d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata}
246d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata
256d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granataclass ChildCommand : public lldb::SBCommandPluginInterface
266d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{
276d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatapublic:
286d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    virtual bool
296d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    DoExecute (lldb::SBDebugger debugger,
306d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata               char** command,
316d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata               lldb::SBCommandReturnObject &result)
326d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    {
336d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata        if (command)
346d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata        {
356d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata            const char* arg = *command;
366d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata            while (arg)
376d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata            {
3808f7fffad31287d960d1a5daf0f7de636672ff43Enrico Granata                result.Printf("%s\n",arg);
396d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata                arg = *(++command);
406d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata            }
416d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata            return true;
426d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata        }
436d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata        return false;
446d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    }
456d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata
466d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata};
476d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata
486d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatabool
496d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatalldb::PluginInitialize (lldb::SBDebugger debugger)
506d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{
516d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    lldb::SBCommandInterpreter interpreter = debugger.GetCommandInterpreter();
526d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    lldb::SBCommand foo = interpreter.AddMultiwordCommand("foo",NULL);
536d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    foo.AddCommand("child",new ChildCommand(),"a child of foo");
546d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    return true;
556d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata}
566d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata
57