LLDB mainline
RegisterContextWasm.h
Go to the documentation of this file.
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SOURCE_PLUGINS_PROCESS_WASM_REGISTERCONTEXTWASM_H
10#define LLDB_SOURCE_PLUGINS_PROCESS_WASM_REGISTERCONTEXTWASM_H
11
14#include "ThreadWasm.h"
17#include <algorithm>
18#include <unordered_map>
19
20namespace lldb_private {
21namespace wasm {
22
24
25typedef std::shared_ptr<RegisterContextWasm> RegisterContextWasmSP;
26
29 uint32_t index;
30
33 // RegisterInfo() zeroes the numbers, and 0 is the generic PC.
34 std::fill(std::begin(kinds), std::end(kinds), LLDB_INVALID_REGNUM);
36 }
37};
38
41public:
43 uint32_t concrete_frame_idx,
44 lldb::DynamicRegisterInfoSP reg_info_sp);
45
47
49 uint32_t num) override;
50
51 void InvalidateAllRegisters() override;
52
53 size_t GetRegisterCount() override;
54
55 const RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;
56
57 size_t GetRegisterSetCount() override;
58
59 const RegisterSet *GetRegisterSet(size_t reg_set) override;
60
61 bool ReadRegister(const RegisterInfo *reg_info,
62 RegisterValue &value) override;
63
64 bool WriteRegister(const RegisterInfo *reg_info,
65 const RegisterValue &value) override;
66
67private:
68 /// The module whose code this context's frame is executing. Resolved on each
69 /// use rather than cached: the innermost frame's register context is the
70 /// thread's own and outlives a stop, so a cached id would go on naming the
71 /// module of a previous stop.
72 uint32_t GetModuleID();
73
74 std::unordered_map<size_t, std::unique_ptr<WasmVirtualRegisterInfo>>
76};
77
78} // namespace wasm
79} // namespace lldb_private
80
81#endif
const RegisterInfo * GetRegisterInfoAtIndex(size_t reg) override
const RegisterSet * GetRegisterSet(size_t reg_set) override
bool WriteRegister(const RegisterInfo *reg_info, const RegisterValue &value) override
RegisterContextWasm(process_gdb_remote::ThreadGDBRemote &thread, uint32_t concrete_frame_idx, lldb::DynamicRegisterInfoSP reg_info_sp)
uint32_t GetModuleID()
The module whose code this context's frame is executing.
uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override
Convert from a given register numbering scheme to the lldb register numbering scheme.
bool ReadRegister(const RegisterInfo *reg_info, RegisterValue &value) override
std::unordered_map< size_t, std::unique_ptr< WasmVirtualRegisterInfo > > m_register_map
#define LLDB_INVALID_REGNUM
std::shared_ptr< RegisterContextWasm > RegisterContextWasmSP
A class that represents a running process on the host machine.
uint32_t GetWasmRegister(uint8_t tag, uint32_t index)
std::shared_ptr< lldb_private::DynamicRegisterInfo > DynamicRegisterInfoSP
RegisterKind
Register numbering types.
@ eRegisterKindLLDB
lldb's internal register numbers
Every register is described in detail including its name, alternate name (optional),...
uint32_t kinds[lldb::kNumRegisterKinds]
Holds all of the various register numbers for all register kinds.
Registers are grouped into register sets.
WasmVirtualRegisterInfo(WasmVirtualRegisterKinds kind, uint32_t index)