@@ -60,7 +60,11 @@ NativeRegisterContextLinux::CreateHostNativeRegisterContextLinux(
60
60
case llvm::Triple::aarch64: {
61
61
// Configure register sets supported by this AArch64 target.
62
62
// Read SVE header to check for SVE support.
63
+ #if LLDB_HAVE_USER_SVE_HEADER
63
64
struct user_sve_header sve_header;
65
+ #else
66
+ struct {} sve_header;
67
+ #endif
64
68
struct iovec ioVec;
65
69
ioVec.iov_base = &sve_header;
66
70
ioVec.iov_len = sizeof (sve_header);
@@ -205,13 +209,21 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
205
209
if (reg == GetRegisterInfo ().GetRegNumFPSR ()) {
206
210
sve_reg_num = reg;
207
211
if (m_sve_state == SVEState::Full)
212
+ #if LLDB_HAVE_USER_SVE_HEADER
208
213
offset = sve::PTraceFPSROffset (sve::vq_from_vl (m_sve_header.vl ));
214
+ #else
215
+ offset = 0 ;
216
+ #endif
209
217
else if (m_sve_state == SVEState::FPSIMD)
210
218
offset = sve::ptrace_fpsimd_offset + (32 * 16 );
211
219
} else if (reg == GetRegisterInfo ().GetRegNumFPCR ()) {
212
220
sve_reg_num = reg;
213
221
if (m_sve_state == SVEState::Full)
222
+ #if LLDB_HAVE_USER_SVE_HEADER
214
223
offset = sve::PTraceFPCROffset (sve::vq_from_vl (m_sve_header.vl ));
224
+ #else
225
+ offset = 0 ;
226
+ #endif
215
227
else if (m_sve_state == SVEState::FPSIMD)
216
228
offset = sve::ptrace_fpsimd_offset + (32 * 16 ) + 4 ;
217
229
} else {
@@ -339,13 +351,21 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
339
351
if (reg == GetRegisterInfo ().GetRegNumFPSR ()) {
340
352
sve_reg_num = reg;
341
353
if (m_sve_state == SVEState::Full)
354
+ #if LLDB_HAVE_USER_SVE_HEADER
342
355
offset = sve::PTraceFPSROffset (sve::vq_from_vl (m_sve_header.vl ));
356
+ #else
357
+ offset = 0 ;
358
+ #endif
343
359
else if (m_sve_state == SVEState::FPSIMD)
344
360
offset = sve::ptrace_fpsimd_offset + (32 * 16 );
345
361
} else if (reg == GetRegisterInfo ().GetRegNumFPCR ()) {
346
362
sve_reg_num = reg;
347
363
if (m_sve_state == SVEState::Full)
364
+ #if LLDB_HAVE_USER_SVE_HEADER
348
365
offset = sve::PTraceFPCROffset (sve::vq_from_vl (m_sve_header.vl ));
366
+ #else
367
+ offset = 0 ;
368
+ #endif
349
369
else if (m_sve_state == SVEState::FPSIMD)
350
370
offset = sve::ptrace_fpsimd_offset + (32 * 16 ) + 4 ;
351
371
} else {
@@ -373,6 +393,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
373
393
if (GetRegisterInfo ().IsSVERegVG (reg)) {
374
394
uint64_t vg_value = reg_value.GetAsUInt64 ();
375
395
396
+ #if LLDB_HAVE_USER_SVE_HEADER
376
397
if (sve_vl_valid (vg_value * 8 )) {
377
398
if (m_sve_header_is_valid && vg_value == GetSVERegVG ())
378
399
return error;
@@ -386,7 +407,7 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
386
407
if (m_sve_header_is_valid && vg_value == GetSVERegVG ())
387
408
return error;
388
409
}
389
-
410
+ # endif
390
411
return Status (" SVE vector length update failed." );
391
412
}
392
413
@@ -917,18 +938,22 @@ void NativeRegisterContextLinux_arm64::ConfigureRegisterContext() {
917
938
if (error.Success ()) {
918
939
// If SVE is enabled thread can switch between SVEState::FPSIMD and
919
940
// SVEState::Full on every stop.
941
+ #if LLDB_HAVE_USER_SVE_HEADER
920
942
if ((m_sve_header.flags & sve::ptrace_regs_mask) ==
921
943
sve::ptrace_regs_fpsimd)
922
944
m_sve_state = SVEState::FPSIMD;
923
945
else if ((m_sve_header.flags & sve::ptrace_regs_mask) ==
924
946
sve::ptrace_regs_sve)
925
947
m_sve_state = SVEState::Full;
948
+ #endif
926
949
927
950
// On every stop we configure SVE vector length by calling
928
951
// ConfigureVectorLength regardless of current SVEState of this thread.
929
952
uint32_t vq = RegisterInfoPOSIX_arm64::eVectorQuadwordAArch64SVE;
953
+ #if LLDB_HAVE_USER_SVE_HEADER
930
954
if (sve_vl_valid (m_sve_header.vl ))
931
955
vq = sve::vq_from_vl (m_sve_header.vl );
956
+ #endif
932
957
933
958
GetRegisterInfo ().ConfigureVectorLength (vq);
934
959
m_sve_ptrace_payload.resize (sve::PTraceSize (vq, sve::ptrace_regs_sve));
0 commit comments