71 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_PROCESS_WASM_REGISTERCONTEXTWASM_H10#define LLDB_SOURCE_PLUGINS_PROCESS_WASM_REGISTERCONTEXTWASM_H11 12#include "Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h"13#include "Plugins/Process/gdb-remote/ThreadGDBRemote.h"14#include "ThreadWasm.h"15#include "Utility/WasmVirtualRegisters.h"16#include "lldb/lldb-private-types.h"17#include <unordered_map>18 19namespace lldb_private {20namespace wasm {21 22class RegisterContextWasm;23 24typedef std::shared_ptr<RegisterContextWasm> RegisterContextWasmSP;25 26struct WasmVirtualRegisterInfo : public RegisterInfo {27 WasmVirtualRegisterKinds kind;28 uint32_t index;29 30 WasmVirtualRegisterInfo(WasmVirtualRegisterKinds kind, uint32_t index)31 : RegisterInfo(), kind(kind), index(index) {}32};33 34class RegisterContextWasm35 : public process_gdb_remote::GDBRemoteRegisterContext {36public:37 RegisterContextWasm(38 process_gdb_remote::ThreadGDBRemote &thread, uint32_t concrete_frame_idx,39 process_gdb_remote::GDBRemoteDynamicRegisterInfoSP reg_info_sp);40 41 ~RegisterContextWasm() override;42 43 uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind,44 uint32_t num) override;45 46 void InvalidateAllRegisters() override;47 48 size_t GetRegisterCount() override;49 50 const RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;51 52 size_t GetRegisterSetCount() override;53 54 const RegisterSet *GetRegisterSet(size_t reg_set) override;55 56 bool ReadRegister(const RegisterInfo *reg_info,57 RegisterValue &value) override;58 59 bool WriteRegister(const RegisterInfo *reg_info,60 const RegisterValue &value) override;61 62private:63 std::unordered_map<size_t, std::unique_ptr<WasmVirtualRegisterInfo>>64 m_register_map;65};66 67} // namespace wasm68} // namespace lldb_private69 70#endif71