#include "lldb/Core/Disassembler.h"
#include "lldb/Core/AddressRange.h"
#include "lldb/Core/Debugger.h"
#include "lldb/Core/EmulateInstruction.h"
#include "lldb/Core/Mangled.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/ModuleList.h"
#include "lldb/Core/PluginManager.h"
#include "lldb/Core/SourceManager.h"
#include "lldb/Host/FileSystem.h"
#include "lldb/Interpreter/OptionValue.h"
#include "lldb/Interpreter/OptionValueArray.h"
#include "lldb/Interpreter/OptionValueDictionary.h"
#include "lldb/Interpreter/OptionValueRegex.h"
#include "lldb/Interpreter/OptionValueString.h"
#include "lldb/Interpreter/OptionValueUInt64.h"
#include "lldb/Symbol/Function.h"
#include "lldb/Symbol/Symbol.h"
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Target/ExecutionContext.h"
#include "lldb/Target/SectionLoadList.h"
#include "lldb/Target/StackFrame.h"
#include "lldb/Target/Target.h"
#include "lldb/Target/Thread.h"
#include "lldb/Utility/DataBufferHeap.h"
#include "lldb/Utility/DataExtractor.h"
#include "lldb/Utility/RegularExpression.h"
#include "lldb/Utility/Status.h"
#include "lldb/Utility/Stream.h"
#include "lldb/Utility/StreamString.h"
#include "lldb/Utility/Timer.h"
#include "lldb/lldb-private-enumerations.h"
#include "lldb/lldb-private-interfaces.h"
#include "lldb/lldb-private-types.h"
#include "llvm/Support/Compiler.h"
#include "llvm/TargetParser/Triple.h"
#include <cstdint>
#include <cstring>
#include <utility>
#include <cassert>
#define DEFAULT_DISASM_BYTE_SIZE …
usingnamespacelldb;
usingnamespacelldb_private;
DisassemblerSP Disassembler::FindPlugin(const ArchSpec &arch,
const char *flavor,
const char *plugin_name) { … }
DisassemblerSP Disassembler::FindPluginForTarget(const Target &target,
const ArchSpec &arch,
const char *flavor,
const char *plugin_name) { … }
static Address ResolveAddress(Target &target, const Address &addr) { … }
lldb::DisassemblerSP Disassembler::DisassembleRange(
const ArchSpec &arch, const char *plugin_name, const char *flavor,
Target &target, const AddressRange &range, bool force_live_memory) { … }
lldb::DisassemblerSP
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) { … }
bool Disassembler::Disassemble(Debugger &debugger, const ArchSpec &arch,
const char *plugin_name, const char *flavor,
const ExecutionContext &exe_ctx,
const Address &address, Limit limit,
bool mixed_source_and_assembly,
uint32_t num_mixed_context_lines,
uint32_t options, Stream &strm) { … }
Disassembler::SourceLine
Disassembler::GetFunctionDeclLineEntry(const SymbolContext &sc) { … }
void Disassembler::AddLineToSourceLineTables(
SourceLine &line,
std::map<FileSpec, std::set<uint32_t>> &source_lines_seen) { … }
bool Disassembler::ElideMixedSourceAndDisassemblyLine(
const ExecutionContext &exe_ctx, const SymbolContext &sc,
SourceLine &line) { … }
void Disassembler::PrintInstructions(Debugger &debugger, const ArchSpec &arch,
const ExecutionContext &exe_ctx,
bool mixed_source_and_assembly,
uint32_t num_mixed_context_lines,
uint32_t options, Stream &strm) { … }
bool Disassembler::Disassemble(Debugger &debugger, const ArchSpec &arch,
StackFrame &frame, Stream &strm) { … }
Instruction::Instruction(const Address &address, AddressClass addr_class)
: … { … }
Instruction::~Instruction() = default;
AddressClass Instruction::GetAddressClass() { … }
const char *Instruction::GetNameForInstructionControlFlowKind(
lldb::InstructionControlFlowKind instruction_control_flow_kind) { … }
void Instruction::Dump(lldb_private::Stream *s, uint32_t max_opcode_byte_size,
bool show_address, bool show_bytes,
bool show_control_flow_kind,
const ExecutionContext *exe_ctx,
const SymbolContext *sym_ctx,
const SymbolContext *prev_sym_ctx,
const FormatEntity::Entry *disassembly_addr_format,
size_t max_address_text_size) { … }
bool Instruction::DumpEmulation(const ArchSpec &arch) { … }
bool Instruction::CanSetBreakpoint () { … }
bool Instruction::HasDelaySlot() { … }
OptionValueSP Instruction::ReadArray(FILE *in_file, Stream &out_stream,
OptionValue::Type data_type) { … }
OptionValueSP Instruction::ReadDictionary(FILE *in_file, Stream &out_stream) { … }
bool Instruction::TestEmulation(Stream &out_stream, const char *file_name) { … }
bool Instruction::Emulate(
const ArchSpec &arch, uint32_t evaluate_options, void *baton,
EmulateInstruction::ReadMemoryCallback read_mem_callback,
EmulateInstruction::WriteMemoryCallback write_mem_callback,
EmulateInstruction::ReadRegisterCallback read_reg_callback,
EmulateInstruction::WriteRegisterCallback write_reg_callback) { … }
uint32_t Instruction::GetData(DataExtractor &data) { … }
InstructionList::InstructionList() : … { … }
InstructionList::~InstructionList() = default;
size_t InstructionList::GetSize() const { … }
uint32_t InstructionList::GetMaxOpcocdeByteSize() const { … }
InstructionSP InstructionList::GetInstructionAtIndex(size_t idx) const { … }
InstructionSP InstructionList::GetInstructionAtAddress(const Address &address) { … }
void InstructionList::Dump(Stream *s, bool show_address, bool show_bytes,
bool show_control_flow_kind,
const ExecutionContext *exe_ctx) { … }
void InstructionList::Clear() { … }
void InstructionList::Append(lldb::InstructionSP &inst_sp) { … }
uint32_t
InstructionList::GetIndexOfNextBranchInstruction(uint32_t start,
bool ignore_calls,
bool *found_calls) const { … }
uint32_t
InstructionList::GetIndexOfInstructionAtAddress(const Address &address) { … }
uint32_t
InstructionList::GetIndexOfInstructionAtLoadAddress(lldb::addr_t load_addr,
Target &target) { … }
size_t Disassembler::ParseInstructions(Target &target, Address start,
Limit limit, Stream *error_strm_ptr,
bool force_live_memory) { … }
Disassembler::Disassembler(const ArchSpec &arch, const char *flavor)
: … { … }
Disassembler::~Disassembler() = default;
InstructionList &Disassembler::GetInstructionList() { … }
const InstructionList &Disassembler::GetInstructionList() const { … }
PseudoInstruction::PseudoInstruction()
: … { … }
PseudoInstruction::~PseudoInstruction() = default;
bool PseudoInstruction::DoesBranch() { … }
bool PseudoInstruction::HasDelaySlot() { … }
bool PseudoInstruction::IsLoad() { … }
bool PseudoInstruction::IsAuthenticated() { … }
size_t PseudoInstruction::Decode(const lldb_private::Disassembler &disassembler,
const lldb_private::DataExtractor &data,
lldb::offset_t data_offset) { … }
void PseudoInstruction::SetOpcode(size_t opcode_size, void *opcode_data) { … }
void PseudoInstruction::SetDescription(llvm::StringRef description) { … }
Instruction::Operand Instruction::Operand::BuildRegister(ConstString &r) { … }
Instruction::Operand Instruction::Operand::BuildImmediate(lldb::addr_t imm,
bool neg) { … }
Instruction::Operand Instruction::Operand::BuildImmediate(int64_t imm) { … }
Instruction::Operand
Instruction::Operand::BuildDereference(const Operand &ref) { … }
Instruction::Operand Instruction::Operand::BuildSum(const Operand &lhs,
const Operand &rhs) { … }
Instruction::Operand Instruction::Operand::BuildProduct(const Operand &lhs,
const Operand &rhs) { … }
std::function<bool(const Instruction::Operand &)>
lldb_private::OperandMatchers::MatchBinaryOp(
std::function<bool(const Instruction::Operand &)> base,
std::function<bool(const Instruction::Operand &)> left,
std::function<bool(const Instruction::Operand &)> right) { … }
std::function<bool(const Instruction::Operand &)>
lldb_private::OperandMatchers::MatchUnaryOp(
std::function<bool(const Instruction::Operand &)> base,
std::function<bool(const Instruction::Operand &)> child) { … }
std::function<bool(const Instruction::Operand &)>
lldb_private::OperandMatchers::MatchRegOp(const RegisterInfo &info) { … }
std::function<bool(const Instruction::Operand &)>
lldb_private::OperandMatchers::FetchRegOp(ConstString ®) { … }
std::function<bool(const Instruction::Operand &)>
lldb_private::OperandMatchers::MatchImmOp(int64_t imm) { … }
std::function<bool(const Instruction::Operand &)>
lldb_private::OperandMatchers::FetchImmOp(int64_t &imm) { … }
std::function<bool(const Instruction::Operand &)>
lldb_private::OperandMatchers::MatchOpType(Instruction::Operand::Type type) { … }