LLDB mainline
RegisterContextPOSIX_x86.h
Go to the documentation of this file.
1//===-- RegisterContextPOSIX_x86.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//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_X86_H
10#define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_X86_H
11
12#include "RegisterContext_x86.h"
16#include "lldb/Utility/Log.h"
17
19public:
21 uint32_t concrete_frame_idx,
23
25
26 void Invalidate();
27
28 void InvalidateAllRegisters() override;
29
30 size_t GetRegisterCount() override;
31
32 virtual size_t GetGPRSize();
33
34 virtual size_t GetFXSAVEOffset();
35
36 virtual unsigned GetRegisterSize(unsigned reg);
37
38 virtual unsigned GetRegisterOffset(unsigned reg);
39
40 const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;
41
42 size_t GetRegisterSetCount() override;
43
44 const lldb_private::RegisterSet *GetRegisterSet(size_t set) override;
45
46 const char *GetRegisterName(unsigned reg);
47
48 // Note: prefer kernel definitions over user-land
49 enum FPRType {
51 eFSAVE, // TODO
53 eSOFT, // TODO
54 eXSAVE
55 };
56
65
74
91
108
111
114
123
132
141
150
151protected:
152 struct RegInfo {
157
161
170
173 };
174
176 // general
177 // purpose
178 // registers.
180 FPRType
181 m_fpr_type; // determines the type of data stored by union FPR, if any.
182 lldb_private::FPR m_fpr; // floating-point registers including extended
183 // register sets.
184 lldb_private::YMM m_ymm_set; // copy of ymmh and xmm register halves.
185 std::unique_ptr<lldb_private::RegisterInfoInterface>
186 m_register_info_up; // Register Info Interface (FreeBSD or Linux)
187
188 // Determines if an extended register set is supported on the processor
189 // running the inferior process.
190 virtual bool IsRegisterSetAvailable(size_t set_index);
191
192 virtual const lldb_private::RegisterInfo *GetRegisterInfo();
193
194 bool IsGPR(unsigned reg);
195
196 bool IsFPR(unsigned reg);
197
198 bool IsAVX(unsigned reg);
199
200 bool CopyXSTATEtoYMM(uint32_t reg, lldb::ByteOrder byte_order);
201 bool CopyYMMtoXSTATE(uint32_t reg, lldb::ByteOrder byte_order);
202 bool IsFPR(unsigned reg, FPRType fpr_type);
204
205 virtual bool ReadGPR() = 0;
206 virtual bool ReadFPR() = 0;
207 virtual bool WriteGPR() = 0;
208 virtual bool WriteFPR() = 0;
209};
210
211#endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_X86_H
std::unique_ptr< lldb_private::RegisterInfoInterface > m_register_info_up
virtual bool ReadGPR()=0
virtual bool WriteGPR()=0
~RegisterContextPOSIX_x86() override
const lldb_private::RegisterInfo * GetRegisterInfoAtIndex(size_t reg) override
bool CopyXSTATEtoYMM(uint32_t reg, lldb::ByteOrder byte_order)
uint64_t m_gpr_x86_64[lldb_private::k_num_gpr_registers_x86_64]
virtual unsigned GetRegisterOffset(unsigned reg)
virtual bool IsRegisterSetAvailable(size_t set_index)
virtual bool ReadFPR()=0
const lldb_private::RegisterSet * GetRegisterSet(size_t set) override
virtual const lldb_private::RegisterInfo * GetRegisterInfo()
virtual bool WriteFPR()=0
virtual unsigned GetRegisterSize(unsigned reg)
const char * GetRegisterName(unsigned reg)
bool CopyYMMtoXSTATE(uint32_t reg, lldb::ByteOrder byte_order)
RegisterInfo interface to patch RegisterInfo structure for archs.
ByteOrder
Byte ordering definitions.