Skip to content

Commit 71b648f

Browse files
committed
Revert "[LLDB] Arm64/Linux Add MTE and Pointer Authentication registers"
This reverts commit 1164b4e. Reason: LLDB AArch64 Linux buildbot failure
1 parent feb6f2c commit 71b648f

File tree

7 files changed

+6
-251
lines changed

7 files changed

+6
-251
lines changed

lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp

Lines changed: 1 addition & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,6 @@
3333
#define NT_ARM_SVE 0x405 /* ARM Scalable Vector Extension */
3434
#endif
3535

36-
#ifndef NT_ARM_PAC_MASK
37-
#define NT_ARM_PAC_MASK 0x406 /* Pointer authentication code masks */
38-
#endif
39-
40-
#ifndef NT_ARM_TAGGED_ADDR_CTRL
41-
#define NT_ARM_TAGGED_ADDR_CTRL 0x409 /* Tagged address control register */
42-
#endif
43-
44-
#define HWCAP_PACA (1 << 30)
45-
#define HWCAP2_MTE (1 << 18)
46-
4736
#define REG_CONTEXT_SIZE (GetGPRSize() + GetFPRSize())
4837

4938
using namespace lldb;
@@ -73,18 +62,6 @@ NativeRegisterContextLinux::CreateHostNativeRegisterContextLinux(
7362
.Success())
7463
opt_regsets.Set(RegisterInfoPOSIX_arm64::eRegsetMaskSVE);
7564

76-
NativeProcessLinux &process = native_thread.GetProcess();
77-
78-
llvm::Optional<uint64_t> auxv_at_hwcap =
79-
process.GetAuxValue(AuxVector::AUXV_AT_HWCAP);
80-
if (auxv_at_hwcap && (*auxv_at_hwcap & HWCAP_PACA))
81-
opt_regsets.Set(RegisterInfoPOSIX_arm64::eRegsetMaskPAuth);
82-
83-
llvm::Optional<uint64_t> auxv_at_hwcap2 =
84-
process.GetAuxValue(AuxVector::AUXV_AT_HWCAP2);
85-
if (auxv_at_hwcap && (*auxv_at_hwcap2 & HWCAP2_MTE))
86-
opt_regsets.Set(RegisterInfoPOSIX_arm64::eRegsetMaskMTE);
87-
8865
auto register_info_up =
8966
std::make_unique<RegisterInfoPOSIX_arm64>(target_arch, opt_regsets);
9067
return std::make_unique<NativeRegisterContextLinux_arm64>(
@@ -105,9 +82,6 @@ NativeRegisterContextLinux_arm64::NativeRegisterContextLinux_arm64(
10582
::memset(&m_hwp_regs, 0, sizeof(m_hwp_regs));
10683
::memset(&m_hbp_regs, 0, sizeof(m_hbp_regs));
10784
::memset(&m_sve_header, 0, sizeof(m_sve_header));
108-
::memset(&m_pac_mask, 0, sizeof(m_pac_mask));
109-
110-
m_mte_ctrl_reg = 0;
11185

11286
// 16 is just a maximum value, query hardware for actual watchpoint count
11387
m_max_hwp_supported = 16;
@@ -119,8 +93,6 @@ NativeRegisterContextLinux_arm64::NativeRegisterContextLinux_arm64(
11993
m_fpu_is_valid = false;
12094
m_sve_buffer_is_valid = false;
12195
m_sve_header_is_valid = false;
122-
m_pac_mask_is_valid = false;
123-
m_mte_ctrl_is_valid = false;
12496

12597
if (GetRegisterInfo().IsSVEEnabled())
12698
m_sve_state = SVEState::Unknown;
@@ -257,22 +229,6 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
257229
src = (uint8_t *)GetSVEBuffer() + offset;
258230
}
259231
}
260-
} else if (IsPAuth(reg)) {
261-
error = ReadPAuthMask();
262-
if (error.Fail())
263-
return error;
264-
265-
offset = reg_info->byte_offset - GetRegisterInfo().GetPAuthOffset();
266-
assert(offset < GetPACMaskSize());
267-
src = (uint8_t *)GetPACMask() + offset;
268-
} else if (IsMTE(reg)) {
269-
error = ReadMTEControl();
270-
if (error.Fail())
271-
return error;
272-
273-
offset = reg_info->byte_offset - GetRegisterInfo().GetMTEOffset();
274-
assert(offset < GetMTEControlSize());
275-
src = (uint8_t *)GetMTEControl() + offset;
276232
} else
277233
return Status("failed - register wasn't recognized to be a GPR or an FPR, "
278234
"write strategy unknown");
@@ -431,17 +387,6 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
431387
return WriteAllSVE();
432388
}
433389
}
434-
} else if (IsMTE(reg)) {
435-
error = ReadMTEControl();
436-
if (error.Fail())
437-
return error;
438-
439-
offset = reg_info->byte_offset - GetRegisterInfo().GetMTEOffset();
440-
assert(offset < GetMTEControlSize());
441-
dst = (uint8_t *)GetMTEControl() + offset;
442-
::memcpy(dst, reg_value.GetBytes(), reg_info->byte_size);
443-
444-
return WriteMTEControl();
445390
}
446391

447392
return Status("Failed to write register value");
@@ -530,14 +475,6 @@ bool NativeRegisterContextLinux_arm64::IsSVE(unsigned reg) const {
530475
return GetRegisterInfo().IsSVEReg(reg);
531476
}
532477

533-
bool NativeRegisterContextLinux_arm64::IsPAuth(unsigned reg) const {
534-
return GetRegisterInfo().IsPAuthReg(reg);
535-
}
536-
537-
bool NativeRegisterContextLinux_arm64::IsMTE(unsigned reg) const {
538-
return GetRegisterInfo().IsMTEReg(reg);
539-
}
540-
541478
llvm::Error NativeRegisterContextLinux_arm64::ReadHardwareDebugInfo() {
542479
if (!m_refresh_hwdebug_info) {
543480
return llvm::Error::success();
@@ -679,8 +616,6 @@ void NativeRegisterContextLinux_arm64::InvalidateAllRegisters() {
679616
m_fpu_is_valid = false;
680617
m_sve_buffer_is_valid = false;
681618
m_sve_header_is_valid = false;
682-
m_pac_mask_is_valid = false;
683-
m_mte_ctrl_is_valid = false;
684619

685620
// Update SVE registers in case there is change in configuration.
686621
ConfigureRegisterContext();
@@ -698,26 +633,7 @@ Status NativeRegisterContextLinux_arm64::ReadSVEHeader() {
698633

699634
error = ReadRegisterSet(&ioVec, GetSVEHeaderSize(), NT_ARM_SVE);
700635

701-
if (error.Success())
702-
m_sve_header_is_valid = true;
703-
704-
return error;
705-
}
706-
707-
Status NativeRegisterContextLinux_arm64::ReadPAuthMask() {
708-
Status error;
709-
710-
if (m_pac_mask_is_valid)
711-
return error;
712-
713-
struct iovec ioVec;
714-
ioVec.iov_base = GetPACMask();
715-
ioVec.iov_len = GetPACMaskSize();
716-
717-
error = ReadRegisterSet(&ioVec, GetPACMaskSize(), NT_ARM_PAC_MASK);
718-
719-
if (error.Success())
720-
m_pac_mask_is_valid = true;
636+
m_sve_header_is_valid = true;
721637

722638
return error;
723639
}
@@ -777,40 +693,6 @@ Status NativeRegisterContextLinux_arm64::WriteAllSVE() {
777693
return WriteRegisterSet(&ioVec, GetSVEBufferSize(), NT_ARM_SVE);
778694
}
779695

780-
Status NativeRegisterContextLinux_arm64::ReadMTEControl() {
781-
Status error;
782-
783-
if (m_mte_ctrl_is_valid)
784-
return error;
785-
786-
struct iovec ioVec;
787-
ioVec.iov_base = GetMTEControl();
788-
ioVec.iov_len = GetMTEControlSize();
789-
790-
error = ReadRegisterSet(&ioVec, GetMTEControlSize(), NT_ARM_TAGGED_ADDR_CTRL);
791-
792-
if (error.Success())
793-
m_mte_ctrl_is_valid = true;
794-
795-
return error;
796-
}
797-
798-
Status NativeRegisterContextLinux_arm64::WriteMTEControl() {
799-
Status error;
800-
801-
error = ReadMTEControl();
802-
if (error.Fail())
803-
return error;
804-
805-
struct iovec ioVec;
806-
ioVec.iov_base = GetMTEControl();
807-
ioVec.iov_len = GetMTEControlSize();
808-
809-
m_mte_ctrl_is_valid = false;
810-
811-
return WriteRegisterSet(&ioVec, GetMTEControlSize(), NT_ARM_TAGGED_ADDR_CTRL);
812-
}
813-
814696
void NativeRegisterContextLinux_arm64::ConfigureRegisterContext() {
815697
// ConfigureRegisterContext gets called from InvalidateAllRegisters
816698
// on every stop and configures SVE vector length.

lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,8 @@ class NativeRegisterContextLinux_arm64
7676
bool m_gpr_is_valid;
7777
bool m_fpu_is_valid;
7878
bool m_sve_buffer_is_valid;
79-
bool m_mte_ctrl_is_valid;
8079

8180
bool m_sve_header_is_valid;
82-
bool m_pac_mask_is_valid;
8381

8482
struct user_pt_regs m_gpr_arm64; // 64-bit general purpose registers.
8583

@@ -92,15 +90,6 @@ class NativeRegisterContextLinux_arm64
9290

9391
bool m_refresh_hwdebug_info;
9492

95-
struct user_pac_mask {
96-
uint64_t data_mask;
97-
uint64_t insn_mask;
98-
};
99-
100-
struct user_pac_mask m_pac_mask;
101-
102-
uint64_t m_mte_ctrl_reg;
103-
10493
bool IsGPR(unsigned reg) const;
10594

10695
bool IsFPR(unsigned reg) const;
@@ -113,36 +102,20 @@ class NativeRegisterContextLinux_arm64
113102

114103
Status WriteSVEHeader();
115104

116-
Status ReadPAuthMask();
117-
118-
Status ReadMTEControl();
119-
120-
Status WriteMTEControl();
121-
122105
bool IsSVE(unsigned reg) const;
123-
bool IsPAuth(unsigned reg) const;
124-
bool IsMTE(unsigned reg) const;
125106

126107
uint64_t GetSVERegVG() { return m_sve_header.vl / 8; }
127108

128109
void SetSVERegVG(uint64_t vg) { m_sve_header.vl = vg * 8; }
129110

130111
void *GetSVEHeader() { return &m_sve_header; }
131112

132-
void *GetPACMask() { return &m_pac_mask; }
133-
134-
void *GetMTEControl() { return &m_mte_ctrl_reg; }
135-
136113
void *GetSVEBuffer();
137114

138115
size_t GetSVEHeaderSize() { return sizeof(m_sve_header); }
139116

140-
size_t GetPACMaskSize() { return sizeof(m_pac_mask); }
141-
142117
size_t GetSVEBufferSize() { return m_sve_ptrace_payload.size(); }
143118

144-
size_t GetMTEControlSize() { return sizeof(m_mte_ctrl_reg); }
145-
146119
llvm::Error ReadHardwareDebugInfo() override;
147120

148121
llvm::Error WriteHardwareDebugRegs(DREGType hwbType) override;

lldb/source/Plugins/Process/Linux/NativeThreadLinux.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ class NativeThreadLinux : public NativeThreadProtocol {
5353

5454
Status RemoveHardwareBreakpoint(lldb::addr_t addr) override;
5555

56-
NativeProcessLinux &GetProcess();
57-
5856
private:
5957
// Interface for friend classes
6058

@@ -96,6 +94,8 @@ class NativeThreadLinux : public NativeThreadProtocol {
9694
// Private interface
9795
void MaybeLogStateChange(lldb::StateType new_state);
9896

97+
NativeProcessLinux &GetProcess();
98+
9999
void SetStopped();
100100

101101
// Member Variables

lldb/source/Plugins/Process/POSIX/NativeProcessELF.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@ namespace lldb_private {
2121
class NativeProcessELF : public NativeProcessProtocol {
2222
using NativeProcessProtocol::NativeProcessProtocol;
2323

24-
public:
25-
llvm::Optional<uint64_t> GetAuxValue(enum AuxVector::EntryType type);
26-
2724
protected:
2825
template <typename T> struct ELFLinkMap {
2926
T l_addr;
@@ -33,6 +30,8 @@ class NativeProcessELF : public NativeProcessProtocol {
3330
T l_prev;
3431
};
3532

33+
llvm::Optional<uint64_t> GetAuxValue(enum AuxVector::EntryType type);
34+
3635
lldb::addr_t GetSharedLibraryInfoAddress() override;
3736

3837
template <typename ELF_EHDR, typename ELF_PHDR, typename ELF_DYN>

lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ enum {
7777
k_num_gpr_registers = gpr_w28 - gpr_x0 + 1,
7878
k_num_fpr_registers = fpu_fpcr - fpu_v0 + 1,
7979
k_num_sve_registers = sve_ffr - sve_vg + 1,
80-
k_num_mte_register = 1,
81-
k_num_pauth_register = 2,
8280
k_num_register_sets_default = 2,
8381
k_num_register_sets = 3
8482
};
@@ -177,12 +175,6 @@ static const lldb_private::RegisterSet g_reg_sets_arm64[k_num_register_sets] = {
177175
{"Scalable Vector Extension Registers", "sve", k_num_sve_registers,
178176
g_sve_regnums_arm64}};
179177

180-
static const lldb_private::RegisterSet g_reg_set_pauth_arm64 = {
181-
"Pointer Authentication Registers", "pauth", k_num_pauth_register, NULL};
182-
183-
static const lldb_private::RegisterSet g_reg_set_mte_arm64 = {
184-
"MTE Control Register", "mte", k_num_mte_register, NULL};
185-
186178
RegisterInfoPOSIX_arm64::RegisterInfoPOSIX_arm64(
187179
const lldb_private::ArchSpec &target_arch, lldb_private::Flags opt_regsets)
188180
: lldb_private::RegisterInfoAndSetInterface(target_arch),
@@ -217,12 +209,6 @@ RegisterInfoPOSIX_arm64::RegisterInfoPOSIX_arm64(
217209
llvm::copy(reg_infos_ref, std::back_inserter(m_dynamic_reg_infos));
218210
llvm::copy(reg_sets_ref, std::back_inserter(m_dynamic_reg_sets));
219211

220-
if (m_opt_regsets.AllSet(eRegsetMaskPAuth))
221-
AddRegSetPAuth();
222-
223-
if (m_opt_regsets.AllSet(eRegsetMaskMTE))
224-
AddRegSetMTE();
225-
226212
m_register_info_count = m_dynamic_reg_infos.size();
227213
m_register_info_p = m_dynamic_reg_infos.data();
228214
m_register_set_p = m_dynamic_reg_sets.data();
@@ -273,39 +259,6 @@ RegisterInfoPOSIX_arm64::GetRegisterSet(size_t set_index) const {
273259
return nullptr;
274260
}
275261

276-
void RegisterInfoPOSIX_arm64::AddRegSetPAuth() {
277-
uint32_t pa_regnum = m_dynamic_reg_infos.size();
278-
for (uint32_t i = 0; i < k_num_pauth_register; i++) {
279-
pauth_regnum_collection.push_back(pa_regnum + i);
280-
m_dynamic_reg_infos.push_back(g_register_infos_pauth[i]);
281-
m_dynamic_reg_infos[pa_regnum + i].byte_offset =
282-
m_dynamic_reg_infos[pa_regnum + i - 1].byte_offset +
283-
m_dynamic_reg_infos[pa_regnum + i - 1].byte_size;
284-
m_dynamic_reg_infos[pa_regnum + i].kinds[lldb::eRegisterKindLLDB] =
285-
pa_regnum + i;
286-
}
287-
288-
m_per_regset_regnum_range[m_register_set_count] =
289-
std::make_pair(pa_regnum, m_dynamic_reg_infos.size());
290-
m_dynamic_reg_sets.push_back(g_reg_set_pauth_arm64);
291-
m_dynamic_reg_sets.back().registers = pauth_regnum_collection.data();
292-
}
293-
294-
void RegisterInfoPOSIX_arm64::AddRegSetMTE() {
295-
uint32_t mte_regnum = m_dynamic_reg_infos.size();
296-
m_mte_regnum_collection.push_back(mte_regnum);
297-
m_dynamic_reg_infos.push_back(g_register_infos_mte[0]);
298-
m_dynamic_reg_infos[mte_regnum].byte_offset =
299-
m_dynamic_reg_infos[mte_regnum - 1].byte_offset +
300-
m_dynamic_reg_infos[mte_regnum - 1].byte_size;
301-
m_dynamic_reg_infos[mte_regnum].kinds[lldb::eRegisterKindLLDB] = mte_regnum;
302-
303-
m_per_regset_regnum_range[m_register_set_count] =
304-
std::make_pair(mte_regnum, mte_regnum + 1);
305-
m_dynamic_reg_sets.push_back(g_reg_set_mte_arm64);
306-
m_dynamic_reg_sets.back().registers = m_mte_regnum_collection.data();
307-
}
308-
309262
uint32_t RegisterInfoPOSIX_arm64::ConfigureVectorLength(uint32_t sve_vq) {
310263
// sve_vq contains SVE Quad vector length in context of AArch64 SVE.
311264
// SVE register infos if enabled cannot be disabled by selecting sve_vq = 0.
@@ -389,18 +342,6 @@ bool RegisterInfoPOSIX_arm64::IsSVERegVG(unsigned reg) const {
389342
return sve_vg == reg;
390343
}
391344

392-
bool RegisterInfoPOSIX_arm64::IsPAuthReg(unsigned reg) const {
393-
return std::find(pauth_regnum_collection.begin(),
394-
pauth_regnum_collection.end(),
395-
reg) != pauth_regnum_collection.end();
396-
}
397-
398-
bool RegisterInfoPOSIX_arm64::IsMTEReg(unsigned reg) const {
399-
return std::find(m_mte_regnum_collection.begin(),
400-
m_mte_regnum_collection.end(),
401-
reg) != m_mte_regnum_collection.end();
402-
}
403-
404345
uint32_t RegisterInfoPOSIX_arm64::GetRegNumSVEZ0() const { return sve_z0; }
405346

406347
uint32_t RegisterInfoPOSIX_arm64::GetRegNumSVEFFR() const { return sve_ffr; }
@@ -410,11 +351,3 @@ uint32_t RegisterInfoPOSIX_arm64::GetRegNumFPCR() const { return fpu_fpcr; }
410351
uint32_t RegisterInfoPOSIX_arm64::GetRegNumFPSR() const { return fpu_fpsr; }
411352

412353
uint32_t RegisterInfoPOSIX_arm64::GetRegNumSVEVG() const { return sve_vg; }
413-
414-
uint32_t RegisterInfoPOSIX_arm64::GetPAuthOffset() const {
415-
return m_register_info_p[pauth_regnum_collection[0]].byte_offset;
416-
}
417-
418-
uint32_t RegisterInfoPOSIX_arm64::GetMTEOffset() const {
419-
return m_register_info_p[m_mte_regnum_collection[0]].byte_offset;
420-
}

0 commit comments

Comments
 (0)