diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-09-04 22:38:20 +0000 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-09-04 22:38:20 +0000 |
commit | 4be6706eb6af66b06e39cd0cfabaa09dd42eb95a (patch) | |
tree | e355894d3790589e02039c16978d47c006d61060 /lldb/source/Core/Disassembler.cpp | |
parent | 71c37a8fdaa8c5abbb3c614576659e5a948781e6 (diff) | |
download | bcm5719-llvm-4be6706eb6af66b06e39cd0cfabaa09dd42eb95a.tar.gz bcm5719-llvm-4be6706eb6af66b06e39cd0cfabaa09dd42eb95a.zip |
[Disassembler] Simplify a few methods (NFC)
Use early returns to highlight preconditions and make the code easier to
follow.
llvm-svn: 370994
Diffstat (limited to 'lldb/source/Core/Disassembler.cpp')
-rw-r--r-- | lldb/source/Core/Disassembler.cpp | 99 |
1 files changed, 53 insertions, 46 deletions
diff --git a/lldb/source/Core/Disassembler.cpp b/lldb/source/Core/Disassembler.cpp index f48f0be0682..07a30a02131 100644 --- a/lldb/source/Core/Disassembler.cpp +++ b/lldb/source/Core/Disassembler.cpp @@ -158,52 +158,59 @@ size_t Disassembler::Disassemble(Debugger &debugger, const ArchSpec &arch, return success_count; } -bool Disassembler::Disassemble(Debugger &debugger, const ArchSpec &arch, - const char *plugin_name, const char *flavor, - const ExecutionContext &exe_ctx, - ConstString name, Module *module, - uint32_t num_instructions, - bool mixed_source_and_assembly, - uint32_t num_mixed_context_lines, - uint32_t options, Stream &strm) { +bool Disassembler::Disassemble( + Debugger &debugger, const ArchSpec &arch, const char *plugin_name, + const char *flavor, const ExecutionContext &exe_ctx, ConstString name, + Module *module, uint32_t num_instructions, bool mixed_source_and_assembly, + uint32_t num_mixed_context_lines, uint32_t options, Stream &strm) { + // If no name is given there's nothing to disassemble. + if (!name) + return false; + + const bool include_symbols = true; + const bool include_inlines = true; + + // Find functions matching the given name. SymbolContextList sc_list; - if (name) { - const bool include_symbols = true; - const bool include_inlines = true; - if (module) { - module->FindFunctions(name, nullptr, eFunctionNameTypeAuto, - include_symbols, include_inlines, true, sc_list); - } else if (exe_ctx.GetTargetPtr()) { - exe_ctx.GetTargetPtr()->GetImages().FindFunctions( - name, eFunctionNameTypeAuto, include_symbols, include_inlines, false, - sc_list); - } + if (module) { + module->FindFunctions(name, nullptr, eFunctionNameTypeAuto, include_symbols, + include_inlines, true, sc_list); + } else if (exe_ctx.GetTargetPtr()) { + exe_ctx.GetTargetPtr()->GetImages().FindFunctions( + name, eFunctionNameTypeAuto, include_symbols, include_inlines, false, + sc_list); } - if (sc_list.GetSize()) { - return Disassemble(debugger, arch, plugin_name, flavor, exe_ctx, sc_list, - num_instructions, mixed_source_and_assembly, - num_mixed_context_lines, options, strm); - } - return false; + // If no functions were found there's nothing to disassemble. + if (sc_list.IsEmpty()) + return false; + + return Disassemble(debugger, arch, plugin_name, flavor, exe_ctx, sc_list, + num_instructions, mixed_source_and_assembly, + num_mixed_context_lines, options, strm); } 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) { - lldb::DisassemblerSP disasm_sp; - if (range.GetByteSize() > 0 && range.GetBaseAddress().IsValid()) { - disasm_sp = Disassembler::FindPluginForTarget(exe_ctx.GetTargetSP(), arch, - flavor, plugin_name); + if (range.GetByteSize() <= 0) + return {}; + + if (!range.GetBaseAddress().IsValid()) + return {}; + + lldb::DisassemblerSP disasm_sp = Disassembler::FindPluginForTarget( + exe_ctx.GetTargetSP(), arch, flavor, plugin_name); + + if (!disasm_sp) + return {}; + + const size_t bytes_disassembled = + disasm_sp->ParseInstructions(&exe_ctx, range, nullptr, prefer_file_cache); + if (bytes_disassembled == 0) + return {}; - if (disasm_sp) { - size_t bytes_disassembled = disasm_sp->ParseInstructions( - &exe_ctx, range, nullptr, prefer_file_cache); - if (bytes_disassembled == 0) - disasm_sp.reset(); - } - } return disasm_sp; } @@ -212,20 +219,20 @@ Disassembler::DisassembleBytes(const ArchSpec &arch, const char *plugin_name, const char *flavor, const Address &start, const void *src, size_t src_len, uint32_t num_instructions, bool data_from_file) { - lldb::DisassemblerSP disasm_sp; + if (!src) + return {}; - if (src) { - disasm_sp = Disassembler::FindPlugin(arch, flavor, plugin_name); + lldb::DisassemblerSP disasm_sp = + Disassembler::FindPlugin(arch, flavor, plugin_name); - if (disasm_sp) { - DataExtractor data(src, src_len, arch.GetByteOrder(), - arch.GetAddressByteSize()); + if (!disasm_sp) + return {}; - (void)disasm_sp->DecodeInstructions(start, data, 0, num_instructions, - false, data_from_file); - } - } + DataExtractor data(src, src_len, arch.GetByteOrder(), + arch.GetAddressByteSize()); + (void)disasm_sp->DecodeInstructions(start, data, 0, num_instructions, false, + data_from_file); return disasm_sp; } |