124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandObjectDisassemble.h ------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_CommandObjectDisassemble_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_CommandObjectDisassemble_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1749ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Core/ArchSpec.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandObject.h"
1984cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Options.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectDisassemble
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectDisassemble : public CommandObjectParsed
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    class CommandOptions : public Options
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    public:
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton        CommandOptions (CommandInterpreter &interpreter);
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        ~CommandOptions ();
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual Error
40143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton        SetOptionValue (uint32_t option_idx, const char *option_arg);
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        void
43143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton        OptionParsingStarting ();
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
45b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton        const OptionDefinition*
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        GetDefinitions ();
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton        const char *
49149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton        GetPluginName ()
50149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton        {
5124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton            if (plugin_name.empty())
52149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton                return NULL;
5324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton            return plugin_name.c_str();
54149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton        }
55149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton
567d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham        const char *
577d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham        GetFlavorString ()
587d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham        {
597d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham            if (flavor_string.empty() || flavor_string == "default")
607d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham                return NULL;
617d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham            return flavor_string.c_str();
627d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham        }
637d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham
64d2ad7fd53d12b194eb4f92c80e4ff83c4b892c70Jim Ingham        virtual Error
65d2ad7fd53d12b194eb4f92c80e4ff83c4b892c70Jim Ingham        OptionParsingFinished ();
66149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool show_mixed; // Show mixed source/assembly
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool show_bytes;
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint32_t num_lines_context;
70aa3e3e1f0f3be95c79f902c5331e11878f66b365Jim Ingham        uint32_t num_instructions;
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool raw;
7224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        std::string func_name;
738d646f2613a5858df94ad08dfbfb6a691dfd5540Greg Clayton        bool current_function;
7424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        lldb::addr_t start_addr;
7524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        lldb::addr_t end_addr;
7624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        bool at_pc;
7724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        bool frame_line;
7824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        std::string plugin_name;
797d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham        std::string flavor_string;
8024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        ArchSpec arch;
81d2ad7fd53d12b194eb4f92c80e4ff83c4b892c70Jim Ingham        bool some_location_specified; // If no location was specified, we'll select "at_pc".  This should be set
82d2ad7fd53d12b194eb4f92c80e4ff83c4b892c70Jim Ingham                                      // in SetOptionValue if anything the selects a location is set.
839afae6223a520bcca114eabee46a9fb92a35a471Jason Molenda        lldb::addr_t symbol_containing_addr;
84b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton        static OptionDefinition g_option_table[];
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
87238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObjectDisassemble (CommandInterpreter &interpreter);
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandObjectDisassemble ();
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Options *
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetOptions ()
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return &m_options;
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
99da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected:
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
101da26bd203cbb104291b39891febf7481794f205fJim Ingham    DoExecute (Args& command,
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner             CommandReturnObject &result);
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CommandOptions m_options;
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_CommandObjectDisassemble_h_
111