diff options
Diffstat (limited to 'source/Core/Disassembler.cpp')
-rw-r--r-- | source/Core/Disassembler.cpp | 333 |
1 files changed, 131 insertions, 202 deletions
diff --git a/source/Core/Disassembler.cpp b/source/Core/Disassembler.cpp index bb5f106ca611..1e6a245261bb 100644 --- a/source/Core/Disassembler.cpp +++ b/source/Core/Disassembler.cpp @@ -11,18 +11,21 @@ // C Includes // C++ Includes +#include <cstdio> +#include <cstring> + // Other libraries and framework includes // Project includes -#include "lldb/lldb-private.h" -#include "lldb/Core/Error.h" #include "lldb/Core/DataBufferHeap.h" #include "lldb/Core/DataExtractor.h" #include "lldb/Core/Debugger.h" #include "lldb/Core/EmulateInstruction.h" +#include "lldb/Core/Error.h" #include "lldb/Core/Module.h" #include "lldb/Core/PluginManager.h" #include "lldb/Core/RegularExpression.h" #include "lldb/Core/Timer.h" +#include "lldb/Host/FileSystem.h" #include "lldb/Interpreter/OptionValue.h" #include "lldb/Interpreter/OptionValueArray.h" #include "lldb/Interpreter/OptionValueDictionary.h" @@ -35,13 +38,13 @@ #include "lldb/Target/SectionLoadList.h" #include "lldb/Target/StackFrame.h" #include "lldb/Target/Target.h" +#include "lldb/lldb-private.h" #define DEFAULT_DISASM_BYTE_SIZE 32 using namespace lldb; using namespace lldb_private; - DisassemblerSP Disassembler::FindPlugin (const ArchSpec &arch, const char *flavor, const char *plugin_name) { @@ -50,7 +53,7 @@ Disassembler::FindPlugin (const ArchSpec &arch, const char *flavor, const char * arch.GetArchitectureName(), plugin_name); - DisassemblerCreateInstance create_callback = NULL; + DisassemblerCreateInstance create_callback = nullptr; if (plugin_name) { @@ -60,17 +63,17 @@ Disassembler::FindPlugin (const ArchSpec &arch, const char *flavor, const char * { DisassemblerSP disassembler_sp(create_callback(arch, flavor)); - if (disassembler_sp.get()) + if (disassembler_sp) return disassembler_sp; } } else { - for (uint32_t idx = 0; (create_callback = PluginManager::GetDisassemblerCreateCallbackAtIndex(idx)) != NULL; ++idx) + for (uint32_t idx = 0; (create_callback = PluginManager::GetDisassemblerCreateCallbackAtIndex(idx)) != nullptr; ++idx) { DisassemblerSP disassembler_sp(create_callback(arch, flavor)); - if (disassembler_sp.get()) + if (disassembler_sp) return disassembler_sp; } } @@ -80,7 +83,7 @@ Disassembler::FindPlugin (const ArchSpec &arch, const char *flavor, const char * DisassemblerSP Disassembler::FindPluginForTarget(const TargetSP target_sp, const ArchSpec &arch, const char *flavor, const char *plugin_name) { - if (target_sp && flavor == NULL) + if (target_sp && flavor == nullptr) { // FIXME - we don't have the mechanism in place to do per-architecture settings. But since we know that for now // we only support flavors on x86 & x86_64, @@ -91,7 +94,6 @@ Disassembler::FindPluginForTarget(const TargetSP target_sp, const ArchSpec &arch return FindPlugin(arch, flavor, plugin_name); } - static void ResolveAddress (const ExecutionContext &exe_ctx, const Address &addr, @@ -122,19 +124,16 @@ ResolveAddress (const ExecutionContext &exe_ctx, } size_t -Disassembler::Disassemble -( - Debugger &debugger, - const ArchSpec &arch, - const char *plugin_name, - const char *flavor, - const ExecutionContext &exe_ctx, - SymbolContextList &sc_list, - uint32_t num_instructions, - uint32_t num_mixed_context_lines, - uint32_t options, - Stream &strm -) +Disassembler::Disassemble(Debugger &debugger, + const ArchSpec &arch, + const char *plugin_name, + const char *flavor, + const ExecutionContext &exe_ctx, + SymbolContextList &sc_list, + uint32_t num_instructions, + uint32_t num_mixed_context_lines, + uint32_t options, + Stream &strm) { size_t success_count = 0; const size_t count = sc_list.GetSize(); @@ -142,9 +141,9 @@ Disassembler::Disassemble AddressRange range; const uint32_t scope = eSymbolContextBlock | eSymbolContextFunction | eSymbolContextSymbol; const bool use_inline_block_range = true; - for (size_t i=0; i<count; ++i) + for (size_t i = 0; i < count; ++i) { - if (sc_list.GetContextAtIndex(i, sc) == false) + if (!sc_list.GetContextAtIndex(i, sc)) break; for (uint32_t range_idx = 0; sc.GetAddressRange(scope, range_idx, use_inline_block_range, range); ++range_idx) { @@ -168,20 +167,17 @@ Disassembler::Disassemble } bool -Disassembler::Disassemble -( - Debugger &debugger, - const ArchSpec &arch, - const char *plugin_name, - const char *flavor, - const ExecutionContext &exe_ctx, - const ConstString &name, - Module *module, - uint32_t num_instructions, - uint32_t num_mixed_context_lines, - uint32_t options, - Stream &strm -) +Disassembler::Disassemble(Debugger &debugger, + const ArchSpec &arch, + const char *plugin_name, + const char *flavor, + const ExecutionContext &exe_ctx, + const ConstString &name, + Module *module, + uint32_t num_instructions, + uint32_t num_mixed_context_lines, + uint32_t options, + Stream &strm) { SymbolContextList sc_list; if (name) @@ -190,13 +186,13 @@ Disassembler::Disassemble const bool include_inlines = true; if (module) { - module->FindFunctions (name, - NULL, - eFunctionNameTypeAuto, - include_symbols, - include_inlines, - true, - sc_list); + module->FindFunctions(name, + nullptr, + eFunctionNameTypeAuto, + include_symbols, + include_inlines, + true, + sc_list); } else if (exe_ctx.GetTargetPtr()) { @@ -225,17 +221,13 @@ Disassembler::Disassemble return false; } - lldb::DisassemblerSP -Disassembler::DisassembleRange -( - const ArchSpec &arch, - const char *plugin_name, - const char *flavor, - const ExecutionContext &exe_ctx, - const AddressRange &range, - bool prefer_file_cache -) +Disassembler::DisassembleRange(const ArchSpec &arch, + const char *plugin_name, + const char *flavor, + const ExecutionContext &exe_ctx, + const AddressRange &range, + bool prefer_file_cache) { lldb::DisassemblerSP disasm_sp; if (range.GetByteSize() > 0 && range.GetBaseAddress().IsValid()) @@ -244,7 +236,7 @@ Disassembler::DisassembleRange if (disasm_sp) { - size_t bytes_disassembled = disasm_sp->ParseInstructions (&exe_ctx, range, NULL, prefer_file_cache); + size_t bytes_disassembled = disasm_sp->ParseInstructions(&exe_ctx, range, nullptr, prefer_file_cache); if (bytes_disassembled == 0) disasm_sp.reset(); } @@ -284,27 +276,23 @@ Disassembler::DisassembleBytes (const ArchSpec &arch, return disasm_sp; } - bool -Disassembler::Disassemble -( - Debugger &debugger, - const ArchSpec &arch, - const char *plugin_name, - const char *flavor, - const ExecutionContext &exe_ctx, - const AddressRange &disasm_range, - uint32_t num_instructions, - uint32_t num_mixed_context_lines, - uint32_t options, - Stream &strm -) +Disassembler::Disassemble(Debugger &debugger, + const ArchSpec &arch, + const char *plugin_name, + const char *flavor, + const ExecutionContext &exe_ctx, + const AddressRange &disasm_range, + uint32_t num_instructions, + uint32_t num_mixed_context_lines, + uint32_t options, + Stream &strm) { if (disasm_range.GetByteSize()) { lldb::DisassemblerSP disasm_sp (Disassembler::FindPluginForTarget(exe_ctx.GetTargetSP(), arch, flavor, plugin_name)); - if (disasm_sp.get()) + if (disasm_sp) { AddressRange range; ResolveAddress (exe_ctx, disasm_range.GetBaseAddress(), range.GetBaseAddress()); @@ -314,38 +302,24 @@ Disassembler::Disassemble if (bytes_disassembled == 0) return false; - bool result = PrintInstructions (disasm_sp.get(), - debugger, - arch, - exe_ctx, - num_instructions, - num_mixed_context_lines, - options, - strm); - - // FIXME: The DisassemblerLLVMC has a reference cycle and won't go away if it has any active instructions. - // I'll fix that but for now, just clear the list and it will go away nicely. - disasm_sp->GetInstructionList().Clear(); - return result; + return PrintInstructions(disasm_sp.get(), debugger, arch, exe_ctx, num_instructions, + num_mixed_context_lines, options, strm); } } return false; } bool -Disassembler::Disassemble -( - Debugger &debugger, - const ArchSpec &arch, - const char *plugin_name, - const char *flavor, - const ExecutionContext &exe_ctx, - const Address &start_address, - uint32_t num_instructions, - uint32_t num_mixed_context_lines, - uint32_t options, - Stream &strm -) +Disassembler::Disassemble(Debugger &debugger, + const ArchSpec &arch, + const char *plugin_name, + const char *flavor, + const ExecutionContext &exe_ctx, + const Address &start_address, + uint32_t num_instructions, + uint32_t num_mixed_context_lines, + uint32_t options, + Stream &strm) { if (num_instructions > 0) { @@ -353,7 +327,7 @@ Disassembler::Disassemble arch, flavor, plugin_name)); - if (disasm_sp.get()) + if (disasm_sp) { Address addr; ResolveAddress (exe_ctx, start_address, addr); @@ -364,36 +338,17 @@ Disassembler::Disassemble prefer_file_cache); if (bytes_disassembled == 0) return false; - bool result = PrintInstructions (disasm_sp.get(), - debugger, - arch, - exe_ctx, - num_instructions, - num_mixed_context_lines, - options, - strm); - - // FIXME: The DisassemblerLLVMC has a reference cycle and won't go away if it has any active instructions. - // I'll fix that but for now, just clear the list and it will go away nicely. - disasm_sp->GetInstructionList().Clear(); - return result; + return PrintInstructions(disasm_sp.get(), debugger, arch, exe_ctx, num_instructions, + num_mixed_context_lines, options, strm); } } return false; } - -bool -Disassembler::PrintInstructions -( - Disassembler *disasm_ptr, - Debugger &debugger, - const ArchSpec &arch, - const ExecutionContext &exe_ctx, - uint32_t num_instructions, - uint32_t num_mixed_context_lines, - uint32_t options, - Stream &strm -) + +bool +Disassembler::PrintInstructions(Disassembler *disasm_ptr, Debugger &debugger, const ArchSpec &arch, + const ExecutionContext &exe_ctx, uint32_t num_instructions, + uint32_t num_mixed_context_lines, uint32_t options, Stream &strm) { // We got some things disassembled... size_t num_instructions_found = disasm_ptr->GetInstructionList().GetSize(); @@ -406,7 +361,7 @@ Disassembler::PrintInstructions SymbolContext sc; SymbolContext prev_sc; AddressRange sc_range; - const Address *pc_addr_ptr = NULL; + const Address *pc_addr_ptr = nullptr; StackFrame *frame = exe_ctx.GetFramePtr(); TargetSP target_sp (exe_ctx.GetTargetSP()); @@ -419,7 +374,7 @@ Disassembler::PrintInstructions const uint32_t scope = eSymbolContextLineEntry | eSymbolContextFunction | eSymbolContextSymbol; const bool use_inline_block_range = false; - const FormatEntity::Entry *disassembly_format = NULL; + const FormatEntity::Entry *disassembly_format = nullptr; FormatEntity::Entry format; if (exe_ctx.HasTargetScope()) { @@ -449,7 +404,7 @@ Disassembler::PrintInstructions if (resolved_mask) { StreamString strmstr; - Debugger::FormatDisassemblerAddress (disassembly_format, &sc, NULL, &exe_ctx, &addr, strmstr); + Debugger::FormatDisassemblerAddress(disassembly_format, &sc, nullptr, &exe_ctx, &addr, strmstr); size_t cur_line = strmstr.GetSizeOfLastLine(); if (cur_line > address_text_size) address_text_size = cur_line; @@ -509,7 +464,7 @@ Disassembler::PrintInstructions } const bool show_bytes = (options & eOptionShowBytes) != 0; - inst->Dump (&strm, max_opcode_byte_size, true, show_bytes, &exe_ctx, &sc, &prev_sc, NULL, address_text_size); + inst->Dump(&strm, max_opcode_byte_size, true, show_bytes, &exe_ctx, &sc, &prev_sc, nullptr, address_text_size); strm.EOL(); } else @@ -521,20 +476,16 @@ Disassembler::PrintInstructions return true; } - bool -Disassembler::Disassemble -( - Debugger &debugger, - const ArchSpec &arch, - const char *plugin_name, - const char *flavor, - const ExecutionContext &exe_ctx, - uint32_t num_instructions, - uint32_t num_mixed_context_lines, - uint32_t options, - Stream &strm -) +Disassembler::Disassemble(Debugger &debugger, + const ArchSpec &arch, + const char *plugin_name, + const char *flavor, + const ExecutionContext &exe_ctx, + uint32_t num_instructions, + uint32_t num_mixed_context_lines, + uint32_t options, + Stream &strm) { AddressRange range; StackFrame *frame = exe_ctx.GetFramePtr(); @@ -579,9 +530,7 @@ Instruction::Instruction(const Address &address, AddressClass addr_class) : { } -Instruction::~Instruction() -{ -} +Instruction::~Instruction() = default; AddressClass Instruction::GetAddressClass () @@ -664,12 +613,12 @@ Instruction::Dump (lldb_private::Stream *s, bool Instruction::DumpEmulation (const ArchSpec &arch) { - std::unique_ptr<EmulateInstruction> insn_emulator_ap (EmulateInstruction::FindPlugin (arch, eInstructionTypeAny, NULL)); - if (insn_emulator_ap.get()) - { - insn_emulator_ap->SetInstruction (GetOpcode(), GetAddress(), NULL); + std::unique_ptr<EmulateInstruction> insn_emulator_ap(EmulateInstruction::FindPlugin(arch, eInstructionTypeAny, nullptr)); + if (insn_emulator_ap) + { + insn_emulator_ap->SetInstruction(GetOpcode(), GetAddress(), nullptr); return insn_emulator_ap->EvaluateInstruction (0); - } + } return false; } @@ -714,7 +663,7 @@ Instruction::ReadArray (FILE *in_file, Stream *out_stream, OptionValue::Type dat line.clear(); } - if (line.size() > 0) + if (!line.empty()) { std::string value; static RegularExpression g_reg_exp ("^[ \t]*([^ \t]+)[ \t]*$"); @@ -784,7 +733,7 @@ Instruction::ReadDictionary (FILE *in_file, Stream *out_stream) } // Try to find a key-value pair in the current line and add it to the dictionary. - if (line.size() > 0) + if (!line.empty()) { static RegularExpression g_reg_exp ("^[ \t]*([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*=[ \t]*(.*)[ \t]*$"); RegularExpression::Match regex_match(2); @@ -816,7 +765,7 @@ Instruction::ReadDictionary (FILE *in_file, Stream *out_stream) assert (value.size() == 1); // value is a dictionary value_sp = ReadDictionary (in_file, out_stream); - if (value_sp.get() == NULL) + if (!value_sp) { option_value_sp.reset (); return option_value_sp; @@ -827,7 +776,7 @@ Instruction::ReadDictionary (FILE *in_file, Stream *out_stream) assert (value.size() == 1); // value is an array value_sp = ReadArray (in_file, out_stream, data_type); - if (value_sp.get() == NULL) + if (!value_sp) { option_value_sp.reset (); return option_value_sp; @@ -848,8 +797,6 @@ Instruction::ReadDictionary (FILE *in_file, Stream *out_stream) value_sp.reset (new OptionValueString (value.c_str(), "")); } - - if (const_key == encoding_key) { // A 'data_encoding=..." is NOT a normal key-value pair; it is meta-data indicating the @@ -876,8 +823,7 @@ Instruction::TestEmulation (Stream *out_stream, const char *file_name) out_stream->Printf ("Instruction::TestEmulation: Missing file_name."); return false; } - - FILE *test_file = fopen (file_name, "r"); + FILE *test_file = FileSystem::Fopen(file_name, "r"); if (!test_file) { out_stream->Printf ("Instruction::TestEmulation: Attempt to open test file failed."); @@ -902,7 +848,7 @@ Instruction::TestEmulation (Stream *out_stream, const char *file_name) // Read all the test information from the test file into an OptionValueDictionary. OptionValueSP data_dictionary_sp (ReadDictionary (test_file, out_stream)); - if (data_dictionary_sp.get() == NULL) + if (!data_dictionary_sp) { out_stream->Printf ("Instruction::TestEmulation: Error reading Dictionary Object.\n"); fclose (test_file); @@ -917,17 +863,16 @@ Instruction::TestEmulation (Stream *out_stream, const char *file_name) OptionValueSP value_sp = data_dictionary->GetValueForKey (description_key); - if (value_sp.get() == NULL) + if (!value_sp) { out_stream->Printf ("Instruction::TestEmulation: Test file does not contain description string.\n"); return false; } SetDescription (value_sp->GetStringValue()); - - + value_sp = data_dictionary->GetValueForKey (triple_key); - if (value_sp.get() == NULL) + if (!value_sp) { out_stream->Printf ("Instruction::TestEmulation: Test file does not contain triple.\n"); return false; @@ -937,8 +882,8 @@ Instruction::TestEmulation (Stream *out_stream, const char *file_name) arch.SetTriple (llvm::Triple (value_sp->GetStringValue())); bool success = false; - std::unique_ptr<EmulateInstruction> insn_emulator_ap (EmulateInstruction::FindPlugin (arch, eInstructionTypeAny, NULL)); - if (insn_emulator_ap.get()) + std::unique_ptr<EmulateInstruction> insn_emulator_ap(EmulateInstruction::FindPlugin(arch, eInstructionTypeAny, nullptr)); + if (insn_emulator_ap) success = insn_emulator_ap->TestEmulation (out_stream, arch, data_dictionary); if (success) @@ -958,19 +903,18 @@ Instruction::Emulate (const ArchSpec &arch, EmulateInstruction::ReadRegisterCallback read_reg_callback, EmulateInstruction::WriteRegisterCallback write_reg_callback) { - std::unique_ptr<EmulateInstruction> insn_emulator_ap (EmulateInstruction::FindPlugin (arch, eInstructionTypeAny, NULL)); - if (insn_emulator_ap.get()) - { - insn_emulator_ap->SetBaton (baton); - insn_emulator_ap->SetCallbacks (read_mem_callback, write_mem_callback, read_reg_callback, write_reg_callback); - insn_emulator_ap->SetInstruction (GetOpcode(), GetAddress(), NULL); - return insn_emulator_ap->EvaluateInstruction (evaluate_options); - } + std::unique_ptr<EmulateInstruction> insn_emulator_ap(EmulateInstruction::FindPlugin(arch, eInstructionTypeAny, nullptr)); + if (insn_emulator_ap) + { + insn_emulator_ap->SetBaton(baton); + insn_emulator_ap->SetCallbacks(read_mem_callback, write_mem_callback, read_reg_callback, write_reg_callback); + insn_emulator_ap->SetInstruction(GetOpcode(), GetAddress(), nullptr); + return insn_emulator_ap->EvaluateInstruction(evaluate_options); + } return false; } - uint32_t Instruction::GetData (DataExtractor &data) { @@ -982,9 +926,7 @@ InstructionList::InstructionList() : { } -InstructionList::~InstructionList() -{ -} +InstructionList::~InstructionList() = default; size_t InstructionList::GetSize() const @@ -1008,8 +950,6 @@ InstructionList::GetMaxOpcocdeByteSize () const return max_inst_size; } - - InstructionSP InstructionList::GetInstructionAtIndex (size_t idx) const { @@ -1028,7 +968,7 @@ InstructionList::Dump (Stream *s, const uint32_t max_opcode_byte_size = GetMaxOpcocdeByteSize(); collection::const_iterator pos, begin, end; - const FormatEntity::Entry *disassembly_format = NULL; + const FormatEntity::Entry *disassembly_format = nullptr; FormatEntity::Entry format; if (exe_ctx && exe_ctx->HasTargetScope()) { @@ -1046,15 +986,14 @@ InstructionList::Dump (Stream *s, { if (pos != begin) s->EOL(); - (*pos)->Dump(s, max_opcode_byte_size, show_address, show_bytes, exe_ctx, NULL, NULL, disassembly_format, 0); + (*pos)->Dump(s, max_opcode_byte_size, show_address, show_bytes, exe_ctx, nullptr, nullptr, disassembly_format, 0); } } - void InstructionList::Clear() { - m_instructions.clear(); + m_instructions.clear(); } void @@ -1144,7 +1083,6 @@ InstructionList::GetIndexOfInstructionAtAddress (const Address &address) return index; } - uint32_t InstructionList::GetIndexOfInstructionAtLoadAddress (lldb::addr_t load_addr, Target &target) { @@ -1163,7 +1101,7 @@ Disassembler::ParseInstructions (const ExecutionContext *exe_ctx, { Target *target = exe_ctx->GetTargetPtr(); const addr_t byte_size = range.GetByteSize(); - if (target == NULL || byte_size == 0 || !range.GetBaseAddress().IsValid()) + if (target == nullptr || byte_size == 0 || !range.GetBaseAddress().IsValid()) return 0; DataBufferHeap *heap_buffer = new DataBufferHeap (byte_size, '\0'); @@ -1186,7 +1124,8 @@ Disassembler::ParseInstructions (const ExecutionContext *exe_ctx, m_arch.GetByteOrder(), m_arch.GetAddressByteSize()); const bool data_from_file = load_addr == LLDB_INVALID_ADDRESS; - return DecodeInstructions (range.GetBaseAddress(), data, 0, UINT32_MAX, false, data_from_file); + return DecodeInstructions(range.GetBaseAddress(), data, 0, UINT32_MAX, false, + data_from_file); } else if (error_strm_ptr) { @@ -1212,14 +1151,14 @@ Disassembler::ParseInstructions (const ExecutionContext *exe_ctx, { m_instruction_list.Clear(); - if (exe_ctx == NULL || num_instructions == 0 || !start.IsValid()) + if (exe_ctx == nullptr || num_instructions == 0 || !start.IsValid()) return 0; Target *target = exe_ctx->GetTargetPtr(); // Calculate the max buffer size we will need in order to disassemble const addr_t byte_size = num_instructions * m_arch.GetMaximumOpcodeByteSize(); - if (target == NULL || byte_size == 0) + if (target == nullptr || byte_size == 0) return 0; DataBufferHeap *heap_buffer = new DataBufferHeap (byte_size, '\0'); @@ -1262,7 +1201,7 @@ Disassembler::Disassembler(const ArchSpec& arch, const char *flavor) : m_base_addr(LLDB_INVALID_ADDRESS), m_flavor () { - if (flavor == NULL) + if (flavor == nullptr) m_flavor.assign("default"); else m_flavor.assign(flavor); @@ -1270,10 +1209,7 @@ Disassembler::Disassembler(const ArchSpec& arch, const char *flavor) : // If this is an arm variant that can only include thumb (T16, T32) // instructions, force the arch triple to be "thumbv.." instead of // "armv..." - if ((arch.GetTriple().getArch() == llvm::Triple::arm || arch.GetTriple().getArch() == llvm::Triple::thumb) - && (arch.GetCore() == ArchSpec::Core::eCore_arm_armv7m - || arch.GetCore() == ArchSpec::Core::eCore_arm_armv7em - || arch.GetCore() == ArchSpec::Core::eCore_arm_armv6m)) + if (arch.IsAlwaysThumbInstructions()) { std::string thumb_arch_name (arch.GetTriple().getArchName().str()); // Replace "arm" with "thumb" so we get all thumb variants correct @@ -1286,12 +1222,7 @@ Disassembler::Disassembler(const ArchSpec& arch, const char *flavor) : } } -//---------------------------------------------------------------------- -// Destructor -//---------------------------------------------------------------------- -Disassembler::~Disassembler() -{ -} +Disassembler::~Disassembler() = default; InstructionList & Disassembler::GetInstructionList () @@ -1308,15 +1239,14 @@ Disassembler::GetInstructionList () const //---------------------------------------------------------------------- // Class PseudoInstruction //---------------------------------------------------------------------- + PseudoInstruction::PseudoInstruction () : Instruction (Address(), eAddressClassUnknown), m_description () { } -PseudoInstruction::~PseudoInstruction () -{ -} +PseudoInstruction::~PseudoInstruction() = default; bool PseudoInstruction::DoesBranch () @@ -1340,7 +1270,6 @@ PseudoInstruction::Decode (const lldb_private::Disassembler &disassembler, return m_opcode.GetByteSize(); } - void PseudoInstruction::SetOpcode (size_t opcode_size, void *opcode_data) { |