Skip to content

Commit c5e626c

Browse files
committed
Work around outdated system header files on Amazon Linux
1 parent 43fabc9 commit c5e626c

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
@@ -47,6 +47,8 @@
4747

4848
#cmakedefine01 LLDB_EMBED_PYTHON_HOME
4949

50+
#cmakedefine01 LLDB_HAVE_USER_SVE_HEADER
51+
5052
#cmakedefine LLDB_PYTHON_HOME R"(${LLDB_PYTHON_HOME})"
5153

5254
#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
@@ -60,7 +60,11 @@ NativeRegisterContextLinux::CreateHostNativeRegisterContextLinux(
6060
case llvm::Triple::aarch64: {
6161
// Configure register sets supported by this AArch64 target.
6262
// Read SVE header to check for SVE support.
63+
#if LLDB_HAVE_USER_SVE_HEADER
6364
struct user_sve_header sve_header;
65+
#else
66+
struct user_sve_header sve_header {};
67+
#endif
6468
struct iovec ioVec;
6569
ioVec.iov_base = &sve_header;
6670
ioVec.iov_len = sizeof(sve_header);
@@ -205,13 +209,21 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info,
205209
if (reg == GetRegisterInfo().GetRegNumFPSR()) {
206210
sve_reg_num = reg;
207211
if (m_sve_state == SVEState::Full)
212+
#if LLDB_HAVE_USER_SVE_HEADER
208213
offset = sve::PTraceFPSROffset(sve::vq_from_vl(m_sve_header.vl));
214+
#else
215+
offset = 0;
216+
#endif
209217
else if (m_sve_state == SVEState::FPSIMD)
210218
offset = sve::ptrace_fpsimd_offset + (32 * 16);
211219
} else if (reg == GetRegisterInfo().GetRegNumFPCR()) {
212220
sve_reg_num = reg;
213221
if (m_sve_state == SVEState::Full)
222+
#if LLDB_HAVE_USER_SVE_HEADER
214223
offset = sve::PTraceFPCROffset(sve::vq_from_vl(m_sve_header.vl));
224+
#else
225+
offset = 0;
226+
#endif
215227
else if (m_sve_state == SVEState::FPSIMD)
216228
offset = sve::ptrace_fpsimd_offset + (32 * 16) + 4;
217229
} else {
@@ -339,13 +351,21 @@ Status NativeRegisterContextLinux_arm64::WriteRegister(
339351
if (reg == GetRegisterInfo().GetRegNumFPSR()) {
340352
sve_reg_num = reg;
341353
if (m_sve_state == SVEState::Full)
354+
#if LLDB_HAVE_USER_SVE_HEADER
342355
offset = sve::PTraceFPSROffset(sve::vq_from_vl(m_sve_header.vl));
356+
#else
357+
offset = 0;
358+
#endif
343359
else if (m_sve_state == SVEState::FPSIMD)
344360
offset = sve::ptrace_fpsimd_offset + (32 * 16);
345361
} else if (reg == GetRegisterInfo().GetRegNumFPCR()) {
346362
sve_reg_num = reg;
347363
if (m_sve_state == SVEState::Full)
364+
#if LLDB_HAVE_USER_SVE_HEADER
348365
offset = sve::PTraceFPCROffset(sve::vq_from_vl(m_sve_header.vl));
366+
#else
367+
offset = 0;
368+
#endif
349369
else if (m_sve_state == SVEState::FPSIMD)
350370
offset = sve::ptrace_fpsimd_offset + (32 * 16) + 4;
351371
} else {
@@ -917,18 +937,22 @@ void NativeRegisterContextLinux_arm64::ConfigureRegisterContext() {
917937
if (error.Success()) {
918938
// If SVE is enabled thread can switch between SVEState::FPSIMD and
919939
// SVEState::Full on every stop.
940+
#if LLDB_HAVE_USER_SVE_HEADER
920941
if ((m_sve_header.flags & sve::ptrace_regs_mask) ==
921942
sve::ptrace_regs_fpsimd)
922943
m_sve_state = SVEState::FPSIMD;
923944
else if ((m_sve_header.flags & sve::ptrace_regs_mask) ==
924945
sve::ptrace_regs_sve)
925946
m_sve_state = SVEState::Full;
947+
#endif
926948

927949
// On every stop we configure SVE vector length by calling
928950
// ConfigureVectorLength regardless of current SVEState of this thread.
929951
uint32_t vq = RegisterInfoPOSIX_arm64::eVectorQuadwordAArch64SVE;
952+
#if LLDB_HAVE_USER_SVE_HEADER
930953
if (sve_vl_valid(m_sve_header.vl))
931954
vq = sve::vq_from_vl(m_sve_header.vl);
955+
#endif
932956

933957
GetRegisterInfo().ConfigureVectorLength(vq);
934958
m_sve_ptrace_payload.resize(sve::PTraceSize(vq, sve::ptrace_regs_sve));

0 commit comments

Comments
 (0)