mirror of
https://github.com/intel/llvm.git
synced 2026-01-16 21:55:39 +08:00
[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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user