Index: lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h =================================================================== --- lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h +++ lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h @@ -96,6 +96,8 @@ size_t GetFPRSize() override { return sizeof(m_fpr); } + size_t GetGPRBufferSize() { return sizeof(m_gpr_arm64); } + private: bool m_gpr_is_valid; bool m_fpu_is_valid; @@ -103,7 +105,7 @@ bool m_sve_header_is_valid; - RegisterInfoPOSIX_arm64::GPR m_gpr_arm64; // 64-bit general purpose registers. + struct user_pt_regs m_gpr_arm64; // 64-bit general purpose registers. RegisterInfoPOSIX_arm64::FPU m_fpr; // floating-point registers including extended register sets. Index: lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp =================================================================== --- lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp +++ lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp @@ -936,9 +936,9 @@ struct iovec ioVec; ioVec.iov_base = GetGPRBuffer(); - ioVec.iov_len = GetGPRSize(); + ioVec.iov_len = GetGPRBufferSize(); - error = ReadRegisterSet(&ioVec, GetGPRSize(), NT_PRSTATUS); + error = ReadRegisterSet(&ioVec, GetGPRBufferSize(), NT_PRSTATUS); if (error.Success()) m_gpr_is_valid = true; @@ -953,11 +953,11 @@ struct iovec ioVec; ioVec.iov_base = GetGPRBuffer(); - ioVec.iov_len = GetGPRSize(); + ioVec.iov_len = GetGPRBufferSize(); m_gpr_is_valid = false; - return WriteRegisterSet(&ioVec, GetGPRSize(), NT_PRSTATUS); + return WriteRegisterSet(&ioVec, GetGPRBufferSize(), NT_PRSTATUS); } Status NativeRegisterContextLinux_arm64::ReadFPR() { Index: lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.h =================================================================== --- lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.h +++ lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.h @@ -29,6 +29,7 @@ }; // based on RegisterContextDarwin_arm64.h + LLVM_PACKED_START struct GPR { uint64_t x[29]; // x0-x28 uint64_t fp; // x29 @@ -37,6 +38,7 @@ uint64_t pc; // pc uint32_t cpsr; // cpsr }; + LLVM_PACKED_END // based on RegisterContextDarwin_arm64.h struct VReg {