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; _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
