================ @@ -18,27 +21,114 @@ #include "lldb/Core/dwarf.h" #include "lldb/Host/HostInfo.h" #include "lldb/Symbol/ObjectFile.h" +#include "lldb/Target/RegisterContext.h" +#include "lldb/Utility/RegisterValue.h" #include "lldb/Utility/StreamString.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Testing/Support/Error.h" #include "gtest/gtest.h" -using namespace lldb_private; using namespace lldb_private::plugin::dwarf; +using namespace lldb_private::wasm; +using namespace lldb_private; using namespace llvm::dwarf; +namespace { +struct MockProcess : Process { + MockProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp) + : Process(target_sp, listener_sp) {} + + llvm::StringRef GetPluginName() override { return "mock process"; } + bool CanDebug(lldb::TargetSP target, bool plugin_specified_by_name) override { + return false; + }; + Status DoDestroy() override { return {}; } + void RefreshStateAfterStop() override {} + bool DoUpdateThreadList(ThreadList &old_thread_list, + ThreadList &new_thread_list) override { + return false; + }; + size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, + Status &error) override { + for (size_t i = 0; i < size; ++i) + ((char *)buf)[i] = (vm_addr + i) & 0xff; + error.Clear(); + return size; + } +}; + +class MockThread : public Thread { +public: + MockThread(Process &process) : Thread(process, 1 /* tid */), m_reg_ctx_sp() {} + ~MockThread() override { DestroyThread(); } + + void RefreshStateAfterStop() override {} + lldb::RegisterContextSP GetRegisterContext() override { return m_reg_ctx_sp; } + lldb::RegisterContextSP + CreateRegisterContextForFrame(StackFrame *frame) override { + return m_reg_ctx_sp; + } + bool CalculateStopInfo() override { return false; } + + void SetRegisterContext(lldb::RegisterContextSP reg_ctx_sp) { + m_reg_ctx_sp = reg_ctx_sp; + } + +private: + lldb::RegisterContextSP m_reg_ctx_sp; +}; + +class MockRegisterContext : public RegisterContext { +public: + MockRegisterContext(Thread &thread, const RegisterValue ®_value) + : RegisterContext(thread, 0 /*concrete_frame_idx*/), + m_reg_value(reg_value) {} + + void InvalidateAllRegisters() override {} + size_t GetRegisterCount() override { return 0; } + const RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override { + if (reg == 0x4000002a) { + return &m_reg_info; + } + return &m_reg_info; /* nullptr; */ + } + size_t GetRegisterSetCount() override { return 0; } + const RegisterSet *GetRegisterSet(size_t reg_set) override { return nullptr; } + lldb::ByteOrder GetByteOrder() override { + return lldb::ByteOrder::eByteOrderLittle; + } + bool ReadRegister(const RegisterInfo *reg_info, + RegisterValue ®_value) override { + reg_value = m_reg_value; + return true; + } + bool WriteRegister(const RegisterInfo *reg_info, + const RegisterValue ®_value) override { + return false; + } + uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, + uint32_t num) override { + return num; + } ---------------- DavidSpickett wrote:
Blank lines between these methods. https://github.com/llvm/llvm-project/pull/151010 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits