[Lldb-commits] [lldb] 17930a3 - [lldb][AArch64][Linux] Add function to get register buffers (#213977)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 14 05:32:57 PDT 2026
Author: David Spickett
Date: 2026-08-14T13:32:51+01:00
New Revision: 17930a3c97d8f861a4c69e8b2903524aed84edb8
URL: https://github.com/llvm/llvm-project/commit/17930a3c97d8f861a4c69e8b2903524aed84edb8
DIFF: https://github.com/llvm/llvm-project/commit/17930a3c97d8f861a4c69e8b2903524aed84edb8.diff
LOG: [lldb][AArch64][Linux] Add function to get register buffers (#213977)
Replaces Get<set>Buffer methods.
Added:
Modified:
lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h
Removed:
################################################################################
diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
index 99b93ed82f5e6..97bb2a0f45d14 100644
--- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
+++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
@@ -157,6 +157,38 @@ size_t NativeRegisterContextLinux_arm64::GetSetSize(
}
}
+void *NativeRegisterContextLinux_arm64::GetSetBuffer(
+ NativeRegisterContextLinux_arm64::RegisterSetType set) {
+ switch (set) {
+ case RegisterSetType::GPR:
+ return &m_gpr_arm64;
+ case RegisterSetType::FPR:
+ return &m_fpr;
+ case RegisterSetType::SVE:
+ return m_sve_ptrace_payload.data();
+ case RegisterSetType::SVE_HEADER:
+ return &m_sve_header;
+ case RegisterSetType::PAC:
+ return &m_pac_mask;
+ case RegisterSetType::MTE:
+ return &m_mte_ctrl_reg;
+ case RegisterSetType::TLS:
+ return &m_tls_regs;
+ case RegisterSetType::ZA:
+ return m_za_ptrace_payload.data();
+ case RegisterSetType::ZA_HEADER:
+ return &m_za_header;
+ case RegisterSetType::ZT:
+ return m_zt_reg.data();
+ case RegisterSetType::FPMR:
+ return &m_fpmr_reg;
+ case RegisterSetType::GCS:
+ return &m_gcs_regs;
+ case RegisterSetType::POE:
+ return &m_poe_regs;
+ }
+}
+
// A NativeRegisterContext is constructed per thread, but all threads' registers
// will contain the same fields. Therefore this mutex prevents each instance
// competing with the other, and subsequent instances from having to detect the
@@ -388,7 +420,7 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
}
assert(offset < GetSetSize(RegisterSetType::SVE));
- src = (uint8_t *)GetSVEBuffer() + offset;
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::SVE) + offset;
}
} else if (GetRegisterInfo().IsTLSReg(reg)) {
error = ReadTLS();
@@ -397,7 +429,7 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
offset = reg_info->byte_offset - GetRegisterInfo().GetTLSOffset();
assert(offset < GetSetSize(RegisterSetType::TLS));
- src = (uint8_t *)GetTLSBuffer() + offset;
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::TLS) + offset;
} else if (GetRegisterInfo().IsSVEReg(reg)) {
if (m_sve_state == SVEState::Disabled || m_sve_state == SVEState::Unknown)
return Status::FromErrorString("SVE disabled or not supported");
@@ -467,13 +499,13 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
if (GetRegisterInfo().IsSVEZReg(reg)) {
offset = CalculateSVEOffset(reg_info);
assert(offset < GetSetSize(RegisterSetType::SVE));
- ::memcpy(sve_reg_non_live.data(), (uint8_t *)GetSVEBuffer() + offset,
- 16);
+ ::memcpy(sve_reg_non_live.data(),
+ (uint8_t *)GetSetBuffer(RegisterSetType::SVE) + offset, 16);
}
} else {
offset = CalculateSVEOffset(reg_info);
assert(offset < GetSetSize(RegisterSetType::SVE));
- src = (uint8_t *)GetSVEBuffer() + offset;
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::SVE) + offset;
}
}
} else if (GetRegisterInfo().IsPAuthReg(reg)) {
@@ -483,7 +515,7 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
offset = reg_info->byte_offset - GetRegisterInfo().GetPAuthOffset();
assert(offset < GetSetSize(RegisterSetType::PAC));
- src = (uint8_t *)GetPACMask() + offset;
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::PAC) + offset;
} else if (GetRegisterInfo().IsMTEReg(reg)) {
error = ReadMTEControl();
if (error.Fail())
@@ -491,7 +523,7 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
offset = reg_info->byte_offset - GetRegisterInfo().GetMTEOffset();
assert(offset < GetSetSize(RegisterSetType::MTE));
- src = (uint8_t *)GetMTEControl() + offset;
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::MTE) + offset;
} else if (GetRegisterInfo().IsSMEReg(reg)) {
if (GetRegisterInfo().IsSMERegZA(reg)) {
error = ReadZAHeader();
@@ -517,7 +549,8 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
// ZA is part of the SME set but uses a separate member buffer for
// storage. Therefore its effective byte offset is always 0 even if it
// isn't 0 within the SME register set.
- src = (uint8_t *)GetZABuffer() + GetSetSize(RegisterSetType::ZA_HEADER);
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::ZA) +
+ GetSetSize(RegisterSetType::ZA_HEADER);
} else if (GetRegisterInfo().IsSMERegZT(reg)) {
// Unlike ZA, the kernel will return register data for ZT0 when ZA is not
// enabled. This data will be all 0s so we don't have to invent anything
@@ -526,7 +559,7 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
if (error.Fail())
return error;
- src = (uint8_t *)GetZTBuffer();
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::ZT);
} else {
error = ReadSMESVG();
if (error.Fail())
@@ -546,7 +579,7 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
offset = reg_info->byte_offset - GetRegisterInfo().GetFPMROffset();
assert(offset < GetSetSize(RegisterSetType::FPMR));
- src = (uint8_t *)GetFPMRBuffer() + offset;
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::FPMR) + offset;
} else if (GetRegisterInfo().IsGCSReg(reg)) {
error = ReadGCS();
if (error.Fail())
@@ -554,7 +587,7 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
offset = reg_info->byte_offset - GetRegisterInfo().GetGCSOffset();
assert(offset < GetSetSize(RegisterSetType::GCS));
- src = (uint8_t *)GetGCSBuffer() + offset;
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::GCS) + offset;
} else if (GetRegisterInfo().IsPOEReg(reg)) {
error = ReadPOE();
if (error.Fail())
@@ -562,7 +595,7 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
offset = reg_info->byte_offset - GetRegisterInfo().GetPOEOffset();
assert(offset < GetSetSize(RegisterSetType::POE));
- src = (uint8_t *)GetPOEBuffer() + offset;
+ src = (uint8_t *)GetSetBuffer(RegisterSetType::POE) + offset;
} else
return Status::FromErrorString(
"failed - register wasn't recognized to be a GPR or an FPR, "
@@ -651,7 +684,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
}
assert(offset < GetSetSize(RegisterSetType::SVE));
- dst = (uint8_t *)GetSVEBuffer() + offset;
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::SVE) + offset;
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
return WriteAllSVE();
}
@@ -757,7 +790,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
// first 16 bytes only as SVE payload mirrors legacy fpsimd structure
offset = CalculateSVEOffset(reg_info);
assert(offset < GetSetSize(RegisterSetType::SVE));
- dst = (uint8_t *)GetSVEBuffer() + offset;
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::SVE) + offset;
::memcpy(dst, reg_value.GetBytes(), 16);
return WriteAllSVE();
@@ -767,7 +800,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
} else {
offset = CalculateSVEOffset(reg_info);
assert(offset < GetSetSize(RegisterSetType::SVE));
- dst = (uint8_t *)GetSVEBuffer() + offset;
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::SVE) + offset;
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
return WriteAllSVE();
}
@@ -779,7 +812,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
offset = reg_info->byte_offset - GetRegisterInfo().GetMTEOffset();
assert(offset < GetSetSize(RegisterSetType::MTE));
- dst = (uint8_t *)GetMTEControl() + offset;
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::MTE) + offset;
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
return WriteMTEControl();
@@ -790,7 +823,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
offset = reg_info->byte_offset - GetRegisterInfo().GetTLSOffset();
assert(offset < GetSetSize(RegisterSetType::TLS));
- dst = (uint8_t *)GetTLSBuffer() + offset;
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::TLS) + offset;
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
return WriteTLS();
@@ -802,7 +835,8 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
// ZA is part of the SME set but not stored with the other SME registers.
// So its byte offset is effectively always 0.
- dst = (uint8_t *)GetZABuffer() + GetSetSize(RegisterSetType::ZA_HEADER);
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::ZA) +
+ GetSetSize(RegisterSetType::ZA_HEADER);
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
// While this is writing a header that contains a vector length, the only
@@ -814,7 +848,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
if (error.Fail())
return error;
- dst = (uint8_t *)GetZTBuffer();
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::ZT);
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
return WriteZT();
@@ -828,7 +862,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
offset = reg_info->byte_offset - GetRegisterInfo().GetFPMROffset();
assert(offset < GetSetSize(RegisterSetType::FPMR));
- dst = (uint8_t *)GetFPMRBuffer() + offset;
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::FPMR) + offset;
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
return WriteFPMR();
@@ -839,7 +873,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
offset = reg_info->byte_offset - GetRegisterInfo().GetGCSOffset();
assert(offset < GetSetSize(RegisterSetType::GCS));
- dst = (uint8_t *)GetGCSBuffer() + offset;
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::GCS) + offset;
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
return WriteGCS();
@@ -850,7 +884,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
offset = reg_info->byte_offset - GetRegisterInfo().GetPOEOffset();
assert(offset < GetSetSize(RegisterSetType::POE));
- dst = (uint8_t *)GetPOEBuffer() + offset;
+ dst = (uint8_t *)GetSetBuffer(RegisterSetType::POE) + offset;
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
return WritePOE();
@@ -1025,8 +1059,9 @@ Status NativeRegisterContextLinux_arm64::ReadAllRegisterValues(
// Use the header size not the buffer size, as we may be using the buffer
// for fake data, which we do not want to write out.
assert(m_za_header.size <= GetSetSize(RegisterSetType::ZA));
- dst = AddSavedRegisters(dst, RegisterSetType::ZA, GetZABuffer(),
- m_za_header.size);
+ dst =
+ AddSavedRegisters(dst, RegisterSetType::ZA,
+ GetSetBuffer(RegisterSetType::ZA), m_za_header.size);
}
if ((GetRegisterInfo().IsSVEPresent() || GetRegisterInfo().IsSSVEPresent()) &&
@@ -1034,7 +1069,7 @@ Status NativeRegisterContextLinux_arm64::ReadAllRegisterValues(
dst = AddRegisterSetType(dst, RegisterSetType::SVE);
std::memcpy(dst, &m_sve_state, sizeof(m_sve_state));
dst += sizeof(m_sve_state);
- dst = AddSavedRegistersData(dst, GetSVEBuffer(),
+ dst = AddSavedRegistersData(dst, GetSetBuffer(RegisterSetType::SVE),
GetSetSize(RegisterSetType::SVE));
} else {
dst = AddSavedRegisters(dst, RegisterSetType::FPR, GetFPRBuffer(),
@@ -1043,8 +1078,9 @@ Status NativeRegisterContextLinux_arm64::ReadAllRegisterValues(
if ((m_sve_state == SVEState::Streaming) && GetRegisterInfo().IsZAPresent()) {
assert(m_za_header.size <= GetSetSize(RegisterSetType::ZA));
- dst = AddSavedRegisters(dst, RegisterSetType::ZA, GetZABuffer(),
- m_za_header.size);
+ dst =
+ AddSavedRegisters(dst, RegisterSetType::ZA,
+ GetSetBuffer(RegisterSetType::ZA), m_za_header.size);
}
// If ZT0 is present and we are going to be restoring an active ZA (which
@@ -1057,30 +1093,36 @@ Status NativeRegisterContextLinux_arm64::ReadAllRegisterValues(
GetRegisterInfo().IsZTPresent() &&
// And ZA is enabled.
m_za_header.size > sizeof(m_za_header))
- dst = AddSavedRegisters(dst, RegisterSetType::ZT, GetZTBuffer(),
+ dst = AddSavedRegisters(dst, RegisterSetType::ZT,
+ GetSetBuffer(RegisterSetType::ZT),
GetSetSize(RegisterSetType::ZT));
if (GetRegisterInfo().IsMTEPresent()) {
- dst = AddSavedRegisters(dst, RegisterSetType::MTE, GetMTEControl(),
+ dst = AddSavedRegisters(dst, RegisterSetType::MTE,
+ GetSetBuffer(RegisterSetType::MTE),
GetSetSize(RegisterSetType::MTE));
}
if (GetRegisterInfo().IsFPMRPresent()) {
- dst = AddSavedRegisters(dst, RegisterSetType::FPMR, GetFPMRBuffer(),
+ dst = AddSavedRegisters(dst, RegisterSetType::FPMR,
+ GetSetBuffer(RegisterSetType::FPMR),
GetSetSize(RegisterSetType::FPMR));
}
if (GetRegisterInfo().IsGCSPresent()) {
- dst = AddSavedRegisters(dst, RegisterSetType::GCS, GetGCSBuffer(),
+ dst = AddSavedRegisters(dst, RegisterSetType::GCS,
+ GetSetBuffer(RegisterSetType::GCS),
GetSetSize(RegisterSetType::GCS));
}
if (GetRegisterInfo().IsPOEPresent()) {
- dst = AddSavedRegisters(dst, RegisterSetType::POE, GetPOEBuffer(),
+ dst = AddSavedRegisters(dst, RegisterSetType::POE,
+ GetSetBuffer(RegisterSetType::POE),
GetSetSize(RegisterSetType::POE));
}
- dst = AddSavedRegisters(dst, RegisterSetType::TLS, GetTLSBuffer(),
+ dst = AddSavedRegisters(dst, RegisterSetType::TLS,
+ GetSetBuffer(RegisterSetType::TLS),
GetSetSize(RegisterSetType::TLS));
return error;
@@ -1156,7 +1198,8 @@ Status NativeRegisterContextLinux_arm64::WriteAllRegisterValues(
// First write SVE header. We do not use RestoreRegisters because we do
// not want src to be modified yet.
- ::memcpy(GetSVEHeader(), src, GetSetSize(RegisterSetType::SVE_HEADER));
+ ::memcpy(GetSetBuffer(RegisterSetType::SVE_HEADER), src,
+ GetSetSize(RegisterSetType::SVE_HEADER));
if (!sve::vl_valid(m_sve_header.vl)) {
Invalidate(RegisterSetType::SVE_HEADER);
error = Status::FromErrorStringWithFormat(
@@ -1177,7 +1220,8 @@ Status NativeRegisterContextLinux_arm64::WriteAllRegisterValues(
// Write header and register data, incrementing src this time.
error = RestoreRegisters(
- GetSVEBuffer(), &src, GetSetSize(RegisterSetType::SVE), kind,
+ GetSetBuffer(RegisterSetType::SVE), &src,
+ GetSetSize(RegisterSetType::SVE), kind,
std::bind(&NativeRegisterContextLinux_arm64::WriteAllSVE, this));
break;
case RegisterSetType::FPR: {
@@ -1246,12 +1290,14 @@ Status NativeRegisterContextLinux_arm64::WriteAllRegisterValues(
}
case RegisterSetType::MTE:
error = RestoreRegisters(
- GetMTEControl(), &src, GetSetSize(RegisterSetType::MTE), kind,
+ GetSetBuffer(RegisterSetType::MTE), &src,
+ GetSetSize(RegisterSetType::MTE), kind,
std::bind(&NativeRegisterContextLinux_arm64::WriteMTEControl, this));
break;
case RegisterSetType::TLS:
error = RestoreRegisters(
- GetTLSBuffer(), &src, GetSetSize(RegisterSetType::TLS), kind,
+ GetSetBuffer(RegisterSetType::TLS), &src,
+ GetSetSize(RegisterSetType::TLS), kind,
std::bind(&NativeRegisterContextLinux_arm64::WriteTLS, this));
break;
case RegisterSetType::ZA:
@@ -1260,12 +1306,14 @@ Status NativeRegisterContextLinux_arm64::WriteAllRegisterValues(
// ZA header size you pass in. Therefore we must write header and register
// data (if present) in one go every time. Read the header only first just
// to get the size.
- ::memcpy(GetZAHeader(), src, GetSetSize(RegisterSetType::ZA_HEADER));
+ ::memcpy(GetSetBuffer(RegisterSetType::ZA_HEADER), src,
+ GetSetSize(RegisterSetType::ZA_HEADER));
// Read the header and register data. Can't use the buffer size here, it
// may be incorrect due to being filled with dummy data previously. Resize
// this so WriteZA uses the correct size.
m_za_ptrace_payload.resize(m_za_header.size);
- ::memcpy(GetZABuffer(), src, GetSetSize(RegisterSetType::ZA));
+ ::memcpy(GetSetBuffer(RegisterSetType::ZA), src,
+ GetSetSize(RegisterSetType::ZA));
MakeValid(RegisterSetType::ZA);
error = WriteZA();
@@ -1286,12 +1334,14 @@ Status NativeRegisterContextLinux_arm64::WriteAllRegisterValues(
// if the state we are restoring had an active ZA. Restoring ZT0 will
// always come after restoring ZA.
error = RestoreRegisters(
- GetZTBuffer(), &src, GetSetSize(RegisterSetType::ZT), kind,
+ GetSetBuffer(RegisterSetType::ZT), &src,
+ GetSetSize(RegisterSetType::ZT), kind,
std::bind(&NativeRegisterContextLinux_arm64::WriteZT, this));
break;
case RegisterSetType::FPMR:
error = RestoreRegisters(
- GetFPMRBuffer(), &src, GetSetSize(RegisterSetType::FPMR), kind,
+ GetSetBuffer(RegisterSetType::FPMR), &src,
+ GetSetSize(RegisterSetType::FPMR), kind,
std::bind(&NativeRegisterContextLinux_arm64::WriteFPMR, this));
break;
case RegisterSetType::GCS: {
@@ -1313,7 +1363,8 @@ Status NativeRegisterContextLinux_arm64::WriteAllRegisterValues(
const uint8_t *new_gcs_src =
reinterpret_cast<const uint8_t *>(&new_gcs_regs);
error = RestoreRegisters(
- GetGCSBuffer(), &new_gcs_src, GetSetSize(RegisterSetType::GCS), kind,
+ GetSetBuffer(RegisterSetType::GCS), &new_gcs_src,
+ GetSetSize(RegisterSetType::GCS), kind,
std::bind(&NativeRegisterContextLinux_arm64::WriteGCS, this));
src += GetSetSize(RegisterSetType::GCS);
@@ -1321,7 +1372,8 @@ Status NativeRegisterContextLinux_arm64::WriteAllRegisterValues(
}
case RegisterSetType::POE:
error = RestoreRegisters(
- GetPOEBuffer(), &src, GetSetSize(RegisterSetType::POE), kind,
+ GetSetBuffer(RegisterSetType::POE), &src,
+ GetSetSize(RegisterSetType::POE), kind,
std::bind(&NativeRegisterContextLinux_arm64::WritePOE, this));
break;
case RegisterSetType::PAC:
@@ -1446,7 +1498,7 @@ Status NativeRegisterContextLinux_arm64::ReadSVEHeader() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetSVEHeader();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::SVE_HEADER);
ioVec.iov_len = GetSetSize(RegisterSetType::SVE_HEADER);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::SVE_HEADER),
@@ -1465,7 +1517,7 @@ Status NativeRegisterContextLinux_arm64::ReadPAuthMask() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetPACMask();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::PAC);
ioVec.iov_len = GetSetSize(RegisterSetType::PAC);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::PAC),
@@ -1485,7 +1537,7 @@ Status NativeRegisterContextLinux_arm64::WriteSVEHeader() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetSVEHeader();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::SVE_HEADER);
ioVec.iov_len = GetSetSize(RegisterSetType::SVE_HEADER);
Invalidate(RegisterSetType::SVE_HEADER);
@@ -1500,7 +1552,7 @@ Status NativeRegisterContextLinux_arm64::ReadAllSVE() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetSVEBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::SVE);
ioVec.iov_len = GetSetSize(RegisterSetType::SVE);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::SVE),
@@ -1521,7 +1573,7 @@ Status NativeRegisterContextLinux_arm64::WriteAllSVE() {
struct iovec ioVec;
- ioVec.iov_base = GetSVEBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::SVE);
ioVec.iov_len = GetSetSize(RegisterSetType::SVE);
Invalidate(RegisterSetType::SVE);
@@ -1555,7 +1607,7 @@ Status NativeRegisterContextLinux_arm64::ReadMTEControl() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetMTEControl();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::MTE);
ioVec.iov_len = GetSetSize(RegisterSetType::MTE);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::MTE),
@@ -1575,7 +1627,7 @@ Status NativeRegisterContextLinux_arm64::WriteMTEControl() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetMTEControl();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::MTE);
ioVec.iov_len = GetSetSize(RegisterSetType::MTE);
Invalidate(RegisterSetType::MTE);
@@ -1591,7 +1643,7 @@ Status NativeRegisterContextLinux_arm64::ReadTLS() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetTLSBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::TLS);
ioVec.iov_len = GetSetSize(RegisterSetType::TLS);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::TLS),
@@ -1611,7 +1663,7 @@ Status NativeRegisterContextLinux_arm64::WriteTLS() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetTLSBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::TLS);
ioVec.iov_len = GetSetSize(RegisterSetType::TLS);
Invalidate(RegisterSetType::TLS);
@@ -1627,7 +1679,7 @@ Status NativeRegisterContextLinux_arm64::ReadGCS() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetGCSBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::GCS);
ioVec.iov_len = GetSetSize(RegisterSetType::GCS);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::GCS),
@@ -1647,7 +1699,7 @@ Status NativeRegisterContextLinux_arm64::WriteGCS() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetGCSBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::GCS);
ioVec.iov_len = GetSetSize(RegisterSetType::GCS);
Invalidate(RegisterSetType::GCS);
@@ -1663,7 +1715,7 @@ Status NativeRegisterContextLinux_arm64::ReadZAHeader() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetZAHeader();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::ZA_HEADER);
ioVec.iov_len = GetSetSize(RegisterSetType::ZA_HEADER);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::ZA_HEADER),
@@ -1682,7 +1734,7 @@ Status NativeRegisterContextLinux_arm64::ReadZA() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetZABuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::ZA);
ioVec.iov_len = GetSetSize(RegisterSetType::ZA);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::ZA),
@@ -1705,7 +1757,7 @@ Status NativeRegisterContextLinux_arm64::WriteZA() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetZABuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::ZA);
ioVec.iov_len = GetSetSize(RegisterSetType::ZA);
Invalidate(RegisterSetType::ZA);
@@ -1721,7 +1773,7 @@ Status NativeRegisterContextLinux_arm64::ReadZT() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetZTBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::ZT);
ioVec.iov_len = GetSetSize(RegisterSetType::ZT);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::ZT),
@@ -1740,7 +1792,7 @@ Status NativeRegisterContextLinux_arm64::WriteZT() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetZTBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::ZT);
ioVec.iov_len = GetSetSize(RegisterSetType::ZT);
Invalidate(RegisterSetType::ZT);
@@ -1756,7 +1808,7 @@ Status NativeRegisterContextLinux_arm64::ReadFPMR() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetFPMRBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::FPMR);
ioVec.iov_len = GetSetSize(RegisterSetType::FPMR);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::FPMR),
@@ -1776,7 +1828,7 @@ Status NativeRegisterContextLinux_arm64::WriteFPMR() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetFPMRBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::FPMR);
ioVec.iov_len = GetSetSize(RegisterSetType::FPMR);
Invalidate(RegisterSetType::FPMR);
@@ -1792,7 +1844,7 @@ Status NativeRegisterContextLinux_arm64::ReadPOE() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetPOEBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::POE);
ioVec.iov_len = GetSetSize(RegisterSetType::POE);
error = ReadRegisterSet(&ioVec, GetSetSize(RegisterSetType::POE),
@@ -1812,7 +1864,7 @@ Status NativeRegisterContextLinux_arm64::WritePOE() {
return error;
struct iovec ioVec;
- ioVec.iov_base = GetPOEBuffer();
+ ioVec.iov_base = GetSetBuffer(RegisterSetType::POE);
ioVec.iov_len = GetSetSize(RegisterSetType::POE);
Invalidate(RegisterSetType::POE);
diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h
index f9e7de073da6d..86a317c11505a 100644
--- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h
+++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h
@@ -122,6 +122,8 @@ class NativeRegisterContextLinux_arm64
size_t GetSetSize(RegisterSetType set) const;
+ void *GetSetBuffer(RegisterSetType set);
+
void MakeValid(RegisterSetType set) { m_validity |= set; }
[[nodiscard]] bool IsValid(RegisterSetType set) const {
@@ -250,30 +252,8 @@ class NativeRegisterContextLinux_arm64
void SetSVERegVG(uint64_t vg) { m_sve_header.vl = vg * 8; }
- void *GetSVEHeader() { return &m_sve_header; }
-
- void *GetZAHeader() { return &m_za_header; }
-
- void *GetPACMask() { return &m_pac_mask; }
-
- void *GetMTEControl() { return &m_mte_ctrl_reg; }
-
- void *GetTLSBuffer() { return &m_tls_regs; }
-
void *GetSMEPseudoBuffer() { return &m_sme_pseudo_regs; }
- void *GetZTBuffer() { return m_zt_reg.data(); }
-
- void *GetSVEBuffer() { return m_sve_ptrace_payload.data(); }
-
- void *GetFPMRBuffer() { return &m_fpmr_reg; }
-
- void *GetGCSBuffer() { return &m_gcs_regs; }
-
- void *GetPOEBuffer() { return &m_poe_regs; }
-
- void *GetZABuffer() { return m_za_ptrace_payload.data(); };
-
size_t GetSMEPseudoBufferSize() { return sizeof(m_sme_pseudo_regs); }
llvm::Error ReadHardwareDebugInfo() override;
More information about the lldb-commits
mailing list