File tree Expand file tree Collapse file tree 1 file changed +21
-2
lines changed
lldb/tools/debugserver/source/MacOSX/arm64 Expand file tree Collapse file tree 1 file changed +21
-2
lines changed Original file line number Diff line number Diff line change @@ -2952,8 +2952,15 @@ kern_return_t DNBArchMachARM64::SetRegisterState(int set) {
2952
2952
return err;
2953
2953
2954
2954
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
+ }
2957
2964
case e_regSetGPR:
2958
2965
return SetGPRState ();
2959
2966
case e_regSetVFP:
@@ -3123,6 +3130,12 @@ uint32_t DNBArchMachARM64::SaveRegisterState() {
3123
3130
" error: %s regs failed to read: %u" ,
3124
3131
" VFP" , kret);
3125
3132
} 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
+ }
3126
3139
const uint32_t save_id = GetNextRegisterStateSaveID ();
3127
3140
m_saved_register_states[save_id] = m_state.context ;
3128
3141
return save_id;
@@ -3150,6 +3163,12 @@ bool DNBArchMachARM64::RestoreRegisterState(uint32_t save_id) {
3150
3163
save_id, " VFP" , kret);
3151
3164
success = false ;
3152
3165
}
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
+ }
3153
3172
m_saved_register_states.erase (pos);
3154
3173
return success;
3155
3174
}
You can’t perform that action at this time.
0 commit comments