[lldb] s/ExecutionContext/Target in Disassembler

Some functions in this file only use the "target" component of an
execution context. Adjust the argument lists to reflect that.

This avoids some defensive null checks and simplifies most of the
callers.
This commit is contained in:
Pavel Labath
2020-03-05 13:03:26 +01:00
parent 29693fc125
commit 04592d5b23
10 changed files with 48 additions and 66 deletions

View File

@@ -89,61 +89,56 @@ DisassemblerSP Disassembler::FindPlugin(const ArchSpec &arch,
return DisassemblerSP();
}
DisassemblerSP Disassembler::FindPluginForTarget(const TargetSP target_sp,
DisassemblerSP Disassembler::FindPluginForTarget(const Target &target,
const ArchSpec &arch,
const char *flavor,
const char *plugin_name) {
if (target_sp && flavor == nullptr) {
if (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,
if (arch.GetTriple().getArch() == llvm::Triple::x86 ||
arch.GetTriple().getArch() == llvm::Triple::x86_64)
flavor = target_sp->GetDisassemblyFlavor();
flavor = target.GetDisassemblyFlavor();
}
return FindPlugin(arch, flavor, plugin_name);
}
static void ResolveAddress(const ExecutionContext &exe_ctx, const Address &addr,
static void ResolveAddress(Target &target, const Address &addr,
Address &resolved_addr) {
if (!addr.IsSectionOffset()) {
// If we weren't passed in a section offset address range, try and resolve
// it to something
Target *target = exe_ctx.GetTargetPtr();
if (target) {
bool is_resolved =
target->GetSectionLoadList().IsEmpty() ?
target->GetImages().ResolveFileAddress(addr.GetOffset(),
resolved_addr) :
target->GetSectionLoadList().ResolveLoadAddress(addr.GetOffset(),
resolved_addr);
bool is_resolved = target.GetSectionLoadList().IsEmpty()
? target.GetImages().ResolveFileAddress(
addr.GetOffset(), resolved_addr)
: target.GetSectionLoadList().ResolveLoadAddress(
addr.GetOffset(), resolved_addr);
// We weren't able to resolve the address, just treat it as a raw address
if (is_resolved && resolved_addr.IsValid())
return;
}
// We weren't able to resolve the address, just treat it as a raw address
if (is_resolved && resolved_addr.IsValid())
return;
}
resolved_addr = addr;
}
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) {
if (range.GetByteSize() <= 0 || !exe_ctx.GetTargetPtr())
Target &target, const AddressRange &range, bool prefer_file_cache) {
if (range.GetByteSize() <= 0)
return {};
if (!range.GetBaseAddress().IsValid())
return {};
lldb::DisassemblerSP disasm_sp = Disassembler::FindPluginForTarget(
exe_ctx.GetTargetSP(), arch, flavor, plugin_name);
lldb::DisassemblerSP disasm_sp =
Disassembler::FindPluginForTarget(target, arch, flavor, plugin_name);
if (!disasm_sp)
return {};
const size_t bytes_disassembled = disasm_sp->ParseInstructions(
exe_ctx.GetTargetRef(), range, nullptr, prefer_file_cache);
const size_t bytes_disassembled =
disasm_sp->ParseInstructions(target, range, nullptr, prefer_file_cache);
if (bytes_disassembled == 0)
return {};
@@ -184,13 +179,13 @@ bool Disassembler::Disassemble(Debugger &debugger, const ArchSpec &arch,
return false;
lldb::DisassemblerSP disasm_sp(Disassembler::FindPluginForTarget(
exe_ctx.GetTargetSP(), arch, flavor, plugin_name));
exe_ctx.GetTargetRef(), arch, flavor, plugin_name));
if (!disasm_sp)
return false;
AddressRange range;
ResolveAddress(exe_ctx, disasm_range.GetBaseAddress(),
ResolveAddress(exe_ctx.GetTargetRef(), disasm_range.GetBaseAddress(),
range.GetBaseAddress());
range.SetByteSize(disasm_range.GetByteSize());
const bool prefer_file_cache = false;
@@ -217,12 +212,12 @@ bool Disassembler::Disassemble(Debugger &debugger, const ArchSpec &arch,
return false;
lldb::DisassemblerSP disasm_sp(Disassembler::FindPluginForTarget(
exe_ctx.GetTargetSP(), arch, flavor, plugin_name));
exe_ctx.GetTargetRef(), arch, flavor, plugin_name));
if (!disasm_sp)
return false;
Address addr;
ResolveAddress(exe_ctx, start_address, addr);
ResolveAddress(exe_ctx.GetTargetRef(), start_address, addr);
const bool prefer_file_cache = false;
size_t bytes_disassembled = disasm_sp->ParseInstructions(