@@ -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 user_sve_header 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 {
@@ -917,18 +937,22 @@ void NativeRegisterContextLinux_arm64::ConfigureRegisterContext() {
917
937
if (error.Success ()) {
918
938
// If SVE is enabled thread can switch between SVEState::FPSIMD and
919
939
// SVEState::Full on every stop.
940
+ #if LLDB_HAVE_USER_SVE_HEADER
920
941
if ((m_sve_header.flags & sve::ptrace_regs_mask) ==
921
942
sve::ptrace_regs_fpsimd)
922
943
m_sve_state = SVEState::FPSIMD;
923
944
else if ((m_sve_header.flags & sve::ptrace_regs_mask) ==
924
945
sve::ptrace_regs_sve)
925
946
m_sve_state = SVEState::Full;
947
+ #endif
926
948
927
949
// On every stop we configure SVE vector length by calling
928
950
// ConfigureVectorLength regardless of current SVEState of this thread.
929
951
uint32_t vq = RegisterInfoPOSIX_arm64::eVectorQuadwordAArch64SVE;
952
+ #if LLDB_HAVE_USER_SVE_HEADER
930
953
if (sve_vl_valid (m_sve_header.vl ))
931
954
vq = sve::vq_from_vl (m_sve_header.vl );
955
+ #endif
932
956
933
957
GetRegisterInfo ().ConfigureVectorLength (vq);
934
958
m_sve_ptrace_payload.resize (sve::PTraceSize (vq, sve::ptrace_regs_sve));
0 commit comments