Skip to content

Commit af0d850

Browse files
authored
Merge pull request #10421 from jasonmolenda/cp/r146886210-save-and-restore-sme-registers-around-function-calls-61
[lldb][debugserver] Save and restore the SVE/SME register state (llvm#134184)
2 parents 901f898 + cb61e99 commit af0d850

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

lldb/tools/debugserver/source/MacOSX/arm64/DNBArchImplARM64.cpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2952,8 +2952,15 @@ kern_return_t DNBArchMachARM64::SetRegisterState(int set) {
29522952
return err;
29532953

29542954
switch (set) {
2955-
case e_regSetALL:
2956-
return SetGPRState() | SetVFPState() | SetEXCState() | SetDBGState(false);
2955+
case e_regSetALL: {
2956+
kern_return_t ret =
2957+
SetGPRState() | SetVFPState() | SetEXCState() | SetDBGState(false);
2958+
if (CPUHasSME()) {
2959+
SetSVEState();
2960+
SetSMEState();
2961+
}
2962+
return ret;
2963+
}
29572964
case e_regSetGPR:
29582965
return SetGPRState();
29592966
case e_regSetVFP:
@@ -3123,6 +3130,12 @@ uint32_t DNBArchMachARM64::SaveRegisterState() {
31233130
"error: %s regs failed to read: %u",
31243131
"VFP", kret);
31253132
} else {
3133+
if (CPUHasSME()) {
3134+
// These can fail when processor is not in streaming SVE mode,
3135+
// and that failure should be ignored.
3136+
GetSVEState(force);
3137+
GetSMEState(force);
3138+
}
31263139
const uint32_t save_id = GetNextRegisterStateSaveID();
31273140
m_saved_register_states[save_id] = m_state.context;
31283141
return save_id;
@@ -3150,6 +3163,12 @@ bool DNBArchMachARM64::RestoreRegisterState(uint32_t save_id) {
31503163
save_id, "VFP", kret);
31513164
success = false;
31523165
}
3166+
if (CPUHasSME()) {
3167+
// These can fail when processor is not in streaming SVE mode,
3168+
// and that failure should be ignored.
3169+
SetSVEState();
3170+
SetSMEState();
3171+
}
31533172
m_saved_register_states.erase(pos);
31543173
return success;
31553174
}

0 commit comments

Comments
 (0)