1061da546Spatrick //===-- CommandObjectDisassemble.h ------------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9dda28197Spatrick #ifndef LLDB_SOURCE_COMMANDS_COMMANDOBJECTDISASSEMBLE_H 10dda28197Spatrick #define LLDB_SOURCE_COMMANDS_COMMANDOBJECTDISASSEMBLE_H 11061da546Spatrick 12061da546Spatrick #include "lldb/Interpreter/CommandObject.h" 13061da546Spatrick #include "lldb/Interpreter/Options.h" 14061da546Spatrick #include "lldb/Utility/ArchSpec.h" 15061da546Spatrick 16061da546Spatrick namespace lldb_private { 17061da546Spatrick 18061da546Spatrick // CommandObjectDisassemble 19061da546Spatrick 20061da546Spatrick class CommandObjectDisassemble : public CommandObjectParsed { 21061da546Spatrick public: 22061da546Spatrick class CommandOptions : public Options { 23061da546Spatrick public: 24061da546Spatrick CommandOptions(); 25061da546Spatrick 26061da546Spatrick ~CommandOptions() override; 27061da546Spatrick 28061da546Spatrick Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, 29061da546Spatrick ExecutionContext *execution_context) override; 30061da546Spatrick 31061da546Spatrick void OptionParsingStarting(ExecutionContext *execution_context) override; 32061da546Spatrick 33061da546Spatrick llvm::ArrayRef<OptionDefinition> GetDefinitions() override; 34061da546Spatrick GetPluginName()35061da546Spatrick const char *GetPluginName() { 36061da546Spatrick return (plugin_name.empty() ? nullptr : plugin_name.c_str()); 37061da546Spatrick } 38061da546Spatrick GetFlavorString()39061da546Spatrick const char *GetFlavorString() { 40061da546Spatrick if (flavor_string.empty() || flavor_string == "default") 41061da546Spatrick return nullptr; 42061da546Spatrick return flavor_string.c_str(); 43061da546Spatrick } 44061da546Spatrick 45061da546Spatrick Status OptionParsingFinished(ExecutionContext *execution_context) override; 46061da546Spatrick 47061da546Spatrick bool show_mixed; // Show mixed source/assembly 48061da546Spatrick bool show_bytes; 49*f6aab3d8Srobert bool show_control_flow_kind; 50be691f3bSpatrick uint32_t num_lines_context = 0; 51be691f3bSpatrick uint32_t num_instructions = 0; 52061da546Spatrick bool raw; 53061da546Spatrick std::string func_name; 54be691f3bSpatrick bool current_function = false; 55be691f3bSpatrick lldb::addr_t start_addr = 0; 56be691f3bSpatrick lldb::addr_t end_addr = 0; 57be691f3bSpatrick bool at_pc = false; 58be691f3bSpatrick bool frame_line = false; 59061da546Spatrick std::string plugin_name; 60061da546Spatrick std::string flavor_string; 61061da546Spatrick ArchSpec arch; 62be691f3bSpatrick bool some_location_specified = false; // If no location was specified, we'll 63be691f3bSpatrick // select "at_pc". This should be set 64061da546Spatrick // in SetOptionValue if anything the selects a location is set. 65be691f3bSpatrick lldb::addr_t symbol_containing_addr = 0; 66dda28197Spatrick bool force = false; 67061da546Spatrick }; 68061da546Spatrick 69061da546Spatrick CommandObjectDisassemble(CommandInterpreter &interpreter); 70061da546Spatrick 71061da546Spatrick ~CommandObjectDisassemble() override; 72061da546Spatrick GetOptions()73061da546Spatrick Options *GetOptions() override { return &m_options; } 74061da546Spatrick 75061da546Spatrick protected: 76061da546Spatrick bool DoExecute(Args &command, CommandReturnObject &result) override; 77061da546Spatrick 78dda28197Spatrick llvm::Expected<std::vector<AddressRange>> 79dda28197Spatrick GetRangesForSelectedMode(CommandReturnObject &result); 80dda28197Spatrick 81dda28197Spatrick llvm::Expected<std::vector<AddressRange>> GetContainingAddressRanges(); 82dda28197Spatrick llvm::Expected<std::vector<AddressRange>> GetCurrentFunctionRanges(); 83dda28197Spatrick llvm::Expected<std::vector<AddressRange>> GetCurrentLineRanges(); 84dda28197Spatrick llvm::Expected<std::vector<AddressRange>> 85dda28197Spatrick GetNameRanges(CommandReturnObject &result); 86dda28197Spatrick llvm::Expected<std::vector<AddressRange>> GetPCRanges(); 87dda28197Spatrick llvm::Expected<std::vector<AddressRange>> GetStartEndAddressRanges(); 88dda28197Spatrick 89dda28197Spatrick llvm::Error CheckRangeSize(const AddressRange &range, llvm::StringRef what); 90dda28197Spatrick 91061da546Spatrick CommandOptions m_options; 92061da546Spatrick }; 93061da546Spatrick 94061da546Spatrick } // namespace lldb_private 95061da546Spatrick 96dda28197Spatrick #endif // LLDB_SOURCE_COMMANDS_COMMANDOBJECTDISASSEMBLE_H 97