Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lldb / source / Plugins / Process / Utility / RegisterContextMemory.h
blob2aad99ec9b210a92ec338ea1905695c48b949c42
1 //===-- RegisterContextMemory.h ---------------------------------*- C++ -*-===//
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 //===----------------------------------------------------------------------===//
9 #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTMEMORY_H
10 #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTMEMORY_H
12 #include <vector>
14 #include "lldb/Target/DynamicRegisterInfo.h"
15 #include "lldb/Target/RegisterContext.h"
16 #include "lldb/Utility/DataExtractor.h"
17 #include "lldb/lldb-private.h"
19 class RegisterContextMemory : public lldb_private::RegisterContext {
20 public:
21 RegisterContextMemory(lldb_private::Thread &thread,
22 uint32_t concrete_frame_idx,
23 lldb_private::DynamicRegisterInfo &reg_info,
24 lldb::addr_t reg_data_addr);
26 ~RegisterContextMemory() override;
28 void InvalidateAllRegisters() override;
30 size_t GetRegisterCount() override;
32 const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;
34 size_t GetRegisterSetCount() override;
36 const lldb_private::RegisterSet *GetRegisterSet(size_t reg_set) override;
38 uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind,
39 uint32_t num) override;
41 // If all of the thread register are in a contiguous buffer in
42 // memory, then the default ReadRegister/WriteRegister and
43 // ReadAllRegisterValues/WriteAllRegisterValues will work. If thread
44 // registers are not contiguous, clients will want to subclass this
45 // class and modify the read/write functions as needed.
47 bool ReadRegister(const lldb_private::RegisterInfo *reg_info,
48 lldb_private::RegisterValue &reg_value) override;
50 bool WriteRegister(const lldb_private::RegisterInfo *reg_info,
51 const lldb_private::RegisterValue &reg_value) override;
53 bool ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override;
55 bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
57 void SetAllRegisterData(const lldb::DataBufferSP &data_sp);
59 protected:
60 void SetAllRegisterValid(bool b);
62 lldb_private::DynamicRegisterInfo &m_reg_infos;
63 std::vector<bool> m_reg_valid;
64 lldb::WritableDataBufferSP m_data;
65 lldb_private::DataExtractor m_reg_data;
66 lldb::addr_t m_reg_data_addr; // If this is valid, then we have a register
67 // context that is stored in memmory
69 private:
70 RegisterContextMemory(const RegisterContextMemory &) = delete;
71 const RegisterContextMemory &
72 operator=(const RegisterContextMemory &) = delete;
75 #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTMEMORY_H