Skip to content

Commit 826e907

Browse files
committed
Work around outdated system header files on Amazon Linux
1 parent 87f3da5 commit 826e907

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

lldb/cmake/modules/LLDBConfig.cmake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,4 +345,19 @@ if ((CMAKE_SYSTEM_NAME MATCHES "Android") AND LLVM_BUILD_STATIC AND
345345
add_definitions(-DANDROID_USE_ACCEPT_WORKAROUND)
346346
endif()
347347

348+
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
349+
check_cxx_source_compiles(
350+
"#include <asm/ptrace.h>
351+
struct user_sve_header hdr;
352+
int main(void){return 0;}
353+
"
354+
user_sve_header_available)
355+
if(user_sve_header_available)
356+
set(LLDB_HAVE_USER_SVE_HEADER ON)
357+
message(STATUS "AArch64 SVE support enabled.")
358+
else()
359+
message(STATUS "AArch64 SVE support disabled.")
360+
endif()
361+
endif()
362+
348363
include(LLDBGenerateConfig)

lldb/include/lldb/Host/Config.h.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252

5353
#cmakedefine01 LLDB_EMBED_PYTHON_HOME
5454

55+
#cmakedefine01 LLDB_HAVE_USER_SVE_HEADER
56+
5557
#cmakedefine LLDB_PYTHON_HOME R"(${LLDB_PYTHON_HOME})"
5658

5759
#define LLDB_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}"

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@ NativeRegisterContextLinux::CreateHostNativeRegisterContextLinux(
6262
case llvm::Triple::aarch64: {
6363
// Configure register sets supported by this AArch64 target.
6464
// Read SVE header to check for SVE support.
65+
#if LLDB_HAVE_USER_SVE_HEADER
6566
struct user_sve_header sve_header;
67+
#else
68+
struct user_sve_header sve_header {};
69+
#endif
6670
struct iovec ioVec;
6771
ioVec.iov_base = &sve_header;
6872
ioVec.iov_len = sizeof(sve_header);
@@ -207,13 +211,21 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
207211
if (reg == GetRegisterInfo().GetRegNumFPSR()) {
208212
sve_reg_num = reg;
209213
if (m_sve_state == SVEState::Full)
214+
#if LLDB_HAVE_USER_SVE_HEADER
210215
offset = sve::PTraceFPSROffset(sve::vq_from_vl(m_sve_header.vl));
216+
#else
217+
offset = 0;
218+
#endif
211219
else if (m_sve_state == SVEState::FPSIMD)
212220
offset = sve::ptrace_fpsimd_offset + (32 * 16);
213221
} else if (reg == GetRegisterInfo().GetRegNumFPCR()) {
214222
sve_reg_num = reg;
215223
if (m_sve_state == SVEState::Full)
224+
#if LLDB_HAVE_USER_SVE_HEADER
216225
offset = sve::PTraceFPCROffset(sve::vq_from_vl(m_sve_header.vl));
226+
#else
227+
offset = 0;
228+
#endif
217229
else if (m_sve_state == SVEState::FPSIMD)
218230
offset = sve::ptrace_fpsimd_offset + (32 * 16) + 4;
219231
} else {
@@ -341,13 +353,21 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
341353
if (reg == GetRegisterInfo().GetRegNumFPSR()) {
342354
sve_reg_num = reg;
343355
if (m_sve_state == SVEState::Full)
356+
#if LLDB_HAVE_USER_SVE_HEADER
344357
offset = sve::PTraceFPSROffset(sve::vq_from_vl(m_sve_header.vl));
358+
#else
359+
offset = 0;
360+
#endif
345361
else if (m_sve_state == SVEState::FPSIMD)
346362
offset = sve::ptrace_fpsimd_offset + (32 * 16);
347363
} else if (reg == GetRegisterInfo().GetRegNumFPCR()) {
348364
sve_reg_num = reg;
349365
if (m_sve_state == SVEState::Full)
366+
#if LLDB_HAVE_USER_SVE_HEADER
350367
offset = sve::PTraceFPCROffset(sve::vq_from_vl(m_sve_header.vl));
368+
#else
369+
offset = 0;
370+
#endif
351371
else if (m_sve_state == SVEState::FPSIMD)
352372
offset = sve::ptrace_fpsimd_offset + (32 * 16) + 4;
353373
} else {
@@ -824,18 +844,22 @@ void NativeRegisterContextLinux_arm64::ConfigureRegisterContext() {
824844
if (error.Success()) {
825845
// If SVE is enabled thread can switch between SVEState::FPSIMD and
826846
// SVEState::Full on every stop.
847+
#if LLDB_HAVE_USER_SVE_HEADER
827848
if ((m_sve_header.flags & sve::ptrace_regs_mask) ==
828849
sve::ptrace_regs_fpsimd)
829850
m_sve_state = SVEState::FPSIMD;
830851
else if ((m_sve_header.flags & sve::ptrace_regs_mask) ==
831852
sve::ptrace_regs_sve)
832853
m_sve_state = SVEState::Full;
854+
#endif
833855

834856
// On every stop we configure SVE vector length by calling
835857
// ConfigureVectorLength regardless of current SVEState of this thread.
836858
uint32_t vq = RegisterInfoPOSIX_arm64::eVectorQuadwordAArch64SVE;
859+
#if LLDB_HAVE_USER_SVE_HEADER
837860
if (sve_vl_valid(m_sve_header.vl))
838861
vq = sve::vq_from_vl(m_sve_header.vl);
862+
#endif
839863

840864
GetRegisterInfo().ConfigureVectorLength(vq);
841865
m_sve_ptrace_payload.resize(sve::PTraceSize(vq, sve::ptrace_regs_sve));

0 commit comments

Comments
 (0)