#include "lldb/Core/EmulateInstruction.h"
#include "lldb/Core/Address.h"
#include "lldb/Core/DumpRegisterValue.h"
#include "lldb/Core/PluginManager.h"
#include "lldb/Host/StreamFile.h"
#include "lldb/Symbol/UnwindPlan.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/RegisterContext.h"
#include "lldb/Target/StackFrame.h"
#include "lldb/Utility/ConstString.h"
#include "lldb/Utility/DataExtractor.h"
#include "lldb/Utility/RegisterValue.h"
#include "lldb/Utility/Status.h"
#include "lldb/Utility/Stream.h"
#include "lldb/Utility/StreamString.h"
#include "lldb/lldb-forward.h"
#include "lldb/lldb-private-interfaces.h"
#include "llvm/ADT/StringRef.h"
#include <cstring>
#include <memory>
#include <optional>
#include <cinttypes>
#include <cstdio>
namespace lldb_private {
class Target;
}
usingnamespacelldb;
usingnamespacelldb_private;
EmulateInstruction *
EmulateInstruction::FindPlugin(const ArchSpec &arch,
InstructionType supported_inst_type,
const char *plugin_name) { … }
EmulateInstruction::EmulateInstruction(const ArchSpec &arch) : … { … }
std::optional<RegisterValue>
EmulateInstruction::ReadRegister(const RegisterInfo ®_info) { … }
bool EmulateInstruction::ReadRegister(lldb::RegisterKind reg_kind,
uint32_t reg_num,
RegisterValue ®_value) { … }
uint64_t EmulateInstruction::ReadRegisterUnsigned(lldb::RegisterKind reg_kind,
uint32_t reg_num,
uint64_t fail_value,
bool *success_ptr) { … }
uint64_t EmulateInstruction::ReadRegisterUnsigned(const RegisterInfo ®_info,
uint64_t fail_value,
bool *success_ptr) { … }
bool EmulateInstruction::WriteRegister(const Context &context,
const RegisterInfo ®_info,
const RegisterValue ®_value) { … }
bool EmulateInstruction::WriteRegister(const Context &context,
lldb::RegisterKind reg_kind,
uint32_t reg_num,
const RegisterValue ®_value) { … }
bool EmulateInstruction::WriteRegisterUnsigned(const Context &context,
lldb::RegisterKind reg_kind,
uint32_t reg_num,
uint64_t uint_value) { … }
bool EmulateInstruction::WriteRegisterUnsigned(const Context &context,
const RegisterInfo ®_info,
uint64_t uint_value) { … }
size_t EmulateInstruction::ReadMemory(const Context &context, lldb::addr_t addr,
void *dst, size_t dst_len) { … }
uint64_t EmulateInstruction::ReadMemoryUnsigned(const Context &context,
lldb::addr_t addr,
size_t byte_size,
uint64_t fail_value,
bool *success_ptr) { … }
bool EmulateInstruction::WriteMemoryUnsigned(const Context &context,
lldb::addr_t addr, uint64_t uval,
size_t uval_byte_size) { … }
bool EmulateInstruction::WriteMemory(const Context &context, lldb::addr_t addr,
const void *src, size_t src_len) { … }
void EmulateInstruction::SetBaton(void *baton) { … }
void EmulateInstruction::SetCallbacks(
ReadMemoryCallback read_mem_callback,
WriteMemoryCallback write_mem_callback,
ReadRegisterCallback read_reg_callback,
WriteRegisterCallback write_reg_callback) { … }
void EmulateInstruction::SetReadMemCallback(
ReadMemoryCallback read_mem_callback) { … }
void EmulateInstruction::SetWriteMemCallback(
WriteMemoryCallback write_mem_callback) { … }
void EmulateInstruction::SetReadRegCallback(
ReadRegisterCallback read_reg_callback) { … }
void EmulateInstruction::SetWriteRegCallback(
WriteRegisterCallback write_reg_callback) { … }
size_t EmulateInstruction::ReadMemoryFrame(EmulateInstruction *instruction,
void *baton, const Context &context,
lldb::addr_t addr, void *dst,
size_t dst_len) { … }
size_t EmulateInstruction::WriteMemoryFrame(EmulateInstruction *instruction,
void *baton, const Context &context,
lldb::addr_t addr, const void *src,
size_t src_len) { … }
bool EmulateInstruction::ReadRegisterFrame(EmulateInstruction *instruction,
void *baton,
const RegisterInfo *reg_info,
RegisterValue ®_value) { … }
bool EmulateInstruction::WriteRegisterFrame(EmulateInstruction *instruction,
void *baton, const Context &context,
const RegisterInfo *reg_info,
const RegisterValue ®_value) { … }
size_t EmulateInstruction::ReadMemoryDefault(EmulateInstruction *instruction,
void *baton,
const Context &context,
lldb::addr_t addr, void *dst,
size_t length) { … }
size_t EmulateInstruction::WriteMemoryDefault(EmulateInstruction *instruction,
void *baton,
const Context &context,
lldb::addr_t addr,
const void *dst, size_t length) { … }
bool EmulateInstruction::ReadRegisterDefault(EmulateInstruction *instruction,
void *baton,
const RegisterInfo *reg_info,
RegisterValue ®_value) { … }
bool EmulateInstruction::WriteRegisterDefault(EmulateInstruction *instruction,
void *baton,
const Context &context,
const RegisterInfo *reg_info,
const RegisterValue ®_value) { … }
void EmulateInstruction::Context::Dump(Stream &strm,
EmulateInstruction *instruction) const { … }
bool EmulateInstruction::SetInstruction(const Opcode &opcode,
const Address &inst_addr,
Target *target) { … }
bool EmulateInstruction::GetBestRegisterKindAndNumber(
const RegisterInfo *reg_info, lldb::RegisterKind ®_kind,
uint32_t ®_num) { … }
uint32_t
EmulateInstruction::GetInternalRegisterNumber(RegisterContext *reg_ctx,
const RegisterInfo ®_info) { … }
bool EmulateInstruction::CreateFunctionEntryUnwind(UnwindPlan &unwind_plan) { … }