23std::unique_ptr<RegisterContextCorePOSIX_arm64>
26 llvm::ArrayRef<CoreNote> notes) {
74 uint64_t features_enabled;
75 uint64_t features_locked;
81 auto register_info_up =
82 std::make_unique<RegisterInfoPOSIX_arm64>(arch, opt_regsets);
83 return std::unique_ptr<RegisterContextCorePOSIX_arm64>(
89 Thread &thread, std::unique_ptr<RegisterInfoPOSIX_arm64> register_info,
90 const DataExtractor &gpregset, llvm::ArrayRef<CoreNote> notes)
97 if ((os == llvm::Triple::Linux) || (os == llvm::Triple::FreeBSD)) {
99 bool is_freebsd = os == llvm::Triple::FreeBSD;
100 std::optional<uint64_t> auxv_at_hwcap =
103 std::optional<uint64_t> auxv_at_hwcap2 =
105 std::optional<uint64_t> auxv_at_hwcap3 =
106 is_freebsd ? std::nullopt
110 auxv_at_hwcap2.value_or(0),
111 auxv_at_hwcap3.value_or(0));
120 const llvm::Triple &target_triple =
127 uint16_t flags =
m_sve_data.GetU32(&flags_offset);
181 uint64_t sve_header_field_offset = 8;
185 sve_header_field_offset = 12;
186 uint16_t sve_header_flags_field =
212 uint16_t svl =
m_za_data.GetU16(&vlen_offset);
219 uint32_t size =
m_za_data.GetU32(&size_offset);
239 return sve_reg_offset;
251 return error.Success();
266 return error.Success();
300 }
else if (
IsSVE(reg)) {
311 uint64_t byte_size = 1;
313 const uint8_t *src = &zeros;
340 }
else if (
IsTLS(reg)) {
345 }
else if (
IsMTE(reg)) {
350 }
else if (
IsGCS(reg)) {
355 }
else if (
IsSME(reg)) {
366 uint32_t size =
m_za_data.GetU32(&size_offset);
369 size_t za_note_size =
m_za_data.GetByteSize();
376 const uint8_t *src =
nullptr;
377 std::vector<uint8_t> disabled_za_data;
382 disabled_za_data.resize(za_note_size);
383 std::fill(disabled_za_data.begin(), disabled_za_data.end(), 0);
384 src = disabled_za_data.data();
411 return error.Success();
static llvm::raw_ostream & error(Stream &strm)
@ AUXV_FREEBSD_AT_HWCAP
FreeBSD specific AT_HWCAP value.
@ AUXV_AT_HWCAP2
Extension of AT_HWCAP.
@ AUXV_AT_HWCAP3
Extension of AT_HWCAP.
@ AUXV_AT_HWCAP
Machine dependent hints about processor capabilities.
std::optional< uint64_t > GetAuxValue(enum EntryType entry_type) const
lldb_private::DataExtractor GetAuxvData() override
lldb_private::ArchSpec GetArchitecture()
lldb_private::DataExtractor m_gpr_data
struct __attribute__((packed)) sme_pseudo_regs
static std::unique_ptr< RegisterContextCorePOSIX_arm64 > Create(lldb_private::Thread &thread, const lldb_private::ArchSpec &arch, const lldb_private::DataExtractor &gpregset, llvm::ArrayRef< lldb_private::CoreNote > notes)
~RegisterContextCorePOSIX_arm64() override
struct sme_pseudo_regs m_sme_pseudo_regs
RegisterContextCorePOSIX_arm64(lldb_private::Thread &thread, std::unique_ptr< RegisterInfoPOSIX_arm64 > register_info, const lldb_private::DataExtractor &gpregset, llvm::ArrayRef< lldb_private::CoreNote > notes)
bool HardwareSingleStep(bool enable) override
lldb_private::DataExtractor m_pac_data
lldb_private::DataExtractor m_fpr_data
uint32_t CalculateSVEOffset(const lldb_private::RegisterInfo *reg_info)
lldb_private::DataExtractor m_tls_data
lldb_private::Arm64RegisterFlagsDetector m_register_flags_detector
bool ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override
const uint8_t * GetSVEBuffer(uint64_t offset=0)
lldb_private::DataExtractor m_zt_data
bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override
lldb_private::DataExtractor m_za_data
bool WriteRegister(const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value) override
lldb_private::DataExtractor m_gcs_data
lldb_private::DataExtractor m_fpmr_data
uint16_t m_sve_vector_length
lldb_private::DataExtractor m_mte_data
bool ReadRegister(const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value) override
lldb_private::DataExtractor m_sve_data
void ConfigureRegisterContext()
uint32_t GetRegNumFPSR() const
uint32_t GetRegNumSVEZ0() const
bool IsFPMR(unsigned reg) const
virtual const lldb_private::RegisterInfo * GetRegisterInfo()
const lldb_private::RegisterInfo * GetRegisterInfoAtIndex(size_t reg) override
std::unique_ptr< RegisterInfoPOSIX_arm64 > m_register_info_up
bool IsGCS(unsigned reg) const
virtual size_t GetGPRSize()
RegisterContextPOSIX_arm64(lldb_private::Thread &thread, std::unique_ptr< RegisterInfoPOSIX_arm64 > register_info)
bool IsSVEZ(unsigned reg) const
bool IsPAuth(unsigned reg) const
bool IsMTE(unsigned reg) const
bool IsSME(unsigned reg) const
bool IsTLS(unsigned reg) const
size_t GetRegisterCount() override
bool IsSVE(unsigned reg) const
bool IsSVEVG(unsigned reg) const
uint32_t GetRegNumFPCR() const
An architecture specification class.
llvm::Triple & GetTriple()
Architecture triple accessor.
ValueType Set(ValueType mask)
Set one or more flags by logical OR'ing mask with the current flags.
uint32_t SetFromMemoryData(const RegisterInfo ®_info, const void *src, uint32_t src_len, lldb::ByteOrder src_byte_order, Status &error)
#define LLDB_INVALID_INDEX32
#define LLDB_INVALID_REGNUM
lldb::ByteOrder InlHostByteOrder()
uint16_t vq_from_vl(uint16_t vl)
const uint32_t ptrace_fpsimd_offset
uint32_t PTraceFPSROffset(uint16_t vq)
uint32_t PTraceFPCROffset(uint16_t vq)
const uint16_t ptrace_regs_mask
user_sve_header user_za_header
const uint16_t ptrace_regs_sve
uint16_t vl_valid(uint16_t vl)
const uint16_t ptrace_regs_fpsimd
A class that represents a running process on the host machine.
DataExtractor getRegset(llvm::ArrayRef< CoreNote > Notes, const llvm::Triple &Triple, llvm::ArrayRef< RegsetDesc > RegsetDescs)
constexpr RegsetDesc AARCH64_TLS_Desc[]
constexpr RegsetDesc AARCH64_FPMR_Desc[]
constexpr RegsetDesc AARCH64_ZT_Desc[]
constexpr RegsetDesc AARCH64_SSVE_Desc[]
constexpr RegsetDesc FPR_Desc[]
constexpr RegsetDesc AARCH64_GCS_Desc[]
constexpr RegsetDesc AARCH64_MTE_Desc[]
constexpr RegsetDesc AARCH64_SVE_Desc[]
constexpr RegsetDesc AARCH64_PAC_Desc[]
constexpr RegsetDesc AARCH64_ZA_Desc[]
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
std::shared_ptr< lldb_private::WritableDataBuffer > WritableDataBufferSP
@ eRegisterKindLLDB
lldb's internal register numbers
Every register is described in detail including its name, alternate name (optional),...
uint32_t * value_regs
List of registers (terminated with LLDB_INVALID_REGNUM).
uint32_t byte_offset
The byte offset in the register context data where this register's value is found.
uint32_t byte_size
Size in bytes of the register.
uint32_t kinds[lldb::kNumRegisterKinds]
Holds all of the various register numbers for all register kinds.