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
17#include "lldb/Utility/Log.h"
18
20public:
22 uint32_t concrete_frame_idx,
24
26
27 void Invalidate();
28
29 void InvalidateAllRegisters() override;
30
31 size_t GetRegisterCount() override;
32
33 virtual size_t GetGPRSize();
34
35 virtual size_t GetFXSAVEOffset();
36
37 virtual unsigned GetRegisterSize(unsigned reg);
38
39 virtual unsigned GetRegisterOffset(unsigned reg);
40
41 const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;
42
43 size_t GetRegisterSetCount() override;
44
45 const lldb_private::RegisterSet *GetRegisterSet(size_t set) override;
46
47 const char *GetRegisterName(unsigned reg);
48
49 // Note: prefer kernel definitions over user-land
50 enum FPRType {
52 eFSAVE, // TODO
54 eSOFT, // TODO
56 };
57
58protected:
59 FPRType
60 m_fpr_type; // determines the type of data stored by union FPR, if any.
61 lldb_private::FPR m_fpr; // floating-point registers including extended
62 // register sets.
63 lldb_private::YMM m_ymm_set; // copy of ymmh and xmm register halves.
64 std::unique_ptr<lldb_private::RegisterInfoInterface>
65 m_register_info_up; // Register Info Interface (FreeBSD or Linux)
66
67 // Determines if an extended register set is supported on the processor
68 // running the inferior process.
69 virtual bool IsRegisterSetAvailable(size_t set_index);
70
72
73 bool IsGPR(unsigned reg);
74
75 bool IsFPR(unsigned reg);
76
77 bool IsAVX(unsigned reg);
78
79 bool CopyXSTATEtoYMM(uint32_t reg, lldb::ByteOrder byte_order);
80 bool CopyYMMtoXSTATE(uint32_t reg, lldb::ByteOrder byte_order);
81 bool IsFPR(unsigned reg, FPRType fpr_type);
83
84 virtual bool ReadGPR() = 0;
85 virtual bool ReadFPR() = 0;
86 virtual bool WriteGPR() = 0;
87 virtual bool WriteFPR() = 0;
89};
90
91#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)
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
RegisterContextPOSIX_x86(lldb_private::Thread &thread, uint32_t concrete_frame_idx, lldb_private::RegisterInfoInterface *register_info)
virtual unsigned GetRegisterSize(unsigned reg)
virtual lldb_private::RegInfo & GetRegInfo()
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.
Every register is described in detail including its name, alternate name (optional),...
Registers are grouped into register sets.