Index: source/Plugins/Process/Linux/NativeProcessLinux.cpp =================================================================== --- source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -19,12 +19,18 @@ #include #include #include +#include #include #include #include #include #include +#if defined (__arm64__) || defined (__aarch64__) +// NT_PRSTATUS and NT_FPREGSET definition +#include +#endif + // C++ Includes #include #include @@ -659,10 +665,22 @@ void ReadGPROperation::Execute(NativeProcessLinux *monitor) { +#if defined (__arm64__) || defined (__aarch64__) + int regset = NT_PRSTATUS; + struct iovec ioVec; + + ioVec.iov_base = m_buf; + ioVec.iov_len = m_buf_size; + if (PTRACE(PTRACE_GETREGSET, m_tid, ®set, &ioVec, m_buf_size) < 0) + m_result = false; + else + m_result = true; +#else if (PTRACE(PTRACE_GETREGS, m_tid, NULL, m_buf, m_buf_size) < 0) m_result = false; else m_result = true; +#endif } //------------------------------------------------------------------------------ @@ -687,10 +705,22 @@ void ReadFPROperation::Execute(NativeProcessLinux *monitor) { +#if defined (__arm64__) || defined (__aarch64__) + int regset = NT_FPREGSET; + struct iovec ioVec; + + ioVec.iov_base = m_buf; + ioVec.iov_len = m_buf_size; + if (PTRACE(PTRACE_GETREGSET, m_tid, ®set, &ioVec, m_buf_size) < 0) + m_result = false; + else + m_result = true; +#else if (PTRACE(PTRACE_GETFPREGS, m_tid, NULL, m_buf, m_buf_size) < 0) m_result = false; else m_result = true; +#endif } //------------------------------------------------------------------------------ @@ -744,10 +774,22 @@ void WriteGPROperation::Execute(NativeProcessLinux *monitor) { +#if defined (__arm64__) || defined (__aarch64__) + int regset = NT_PRSTATUS; + struct iovec ioVec; + + ioVec.iov_base = m_buf; + ioVec.iov_len = m_buf_size; + if (PTRACE(PTRACE_SETREGSET, m_tid, ®set, &ioVec, m_buf_size) < 0) + m_result = false; + else + m_result = true; +#else if (PTRACE(PTRACE_SETREGS, m_tid, NULL, m_buf, m_buf_size) < 0) m_result = false; else m_result = true; +#endif } //------------------------------------------------------------------------------ @@ -772,10 +814,22 @@ void WriteFPROperation::Execute(NativeProcessLinux *monitor) { +#if defined (__arm64__) || defined (__aarch64__) + int regset = NT_FPREGSET; + struct iovec ioVec; + + ioVec.iov_base = m_buf; + ioVec.iov_len = m_buf_size; + if (PTRACE(PTRACE_SETREGSET, m_tid, ®set, &ioVec, m_buf_size) < 0) + m_result = false; + else + m_result = true; +#else if (PTRACE(PTRACE_SETFPREGS, m_tid, NULL, m_buf, m_buf_size) < 0) m_result = false; else m_result = true; +#endif } //------------------------------------------------------------------------------ Index: source/Plugins/Process/Linux/ProcessMonitor.cpp =================================================================== --- source/Plugins/Process/Linux/ProcessMonitor.cpp +++ source/Plugins/Process/Linux/ProcessMonitor.cpp @@ -16,12 +16,18 @@ #include #include #include +#include #include #include #include #include #include +#if defined (__arm64__) || defined (__aarch64__) +// NT_PRSTATUS and NT_FPREGSET definition +#include +#endif + // C++ Includes // Other libraries and framework includes #include "lldb/Core/Debugger.h" @@ -568,6 +574,18 @@ void ReadGPROperation::Execute(ProcessMonitor *monitor) { +#if defined (__arm64__) || defined (__aarch64__) + int regset = NT_PRSTATUS; + struct iovec ioVec; + + ioVec.iov_base = m_buf; + ioVec.iov_len = m_buf_size; + if (PTRACE(PTRACE_GETREGSET, m_tid, ®set, &ioVec, m_buf_size) < 0) + m_result = false; + else + m_result = true; +#else + #ifdef PT_GETREGS if (PTRACE(PTRACE_GETREGS, m_tid, NULL, m_buf, m_buf_size) < 0) m_result = false; @@ -576,6 +594,8 @@ #else m_result = false; #endif + +#endif } //------------------------------------------------------------------------------ @@ -600,6 +620,18 @@ void ReadFPROperation::Execute(ProcessMonitor *monitor) { +#if defined (__arm64__) || defined (__aarch64__) + int regset = NT_FPREGSET; + struct iovec ioVec; + + ioVec.iov_base = m_buf; + ioVec.iov_len = m_buf_size; + if (PTRACE(PTRACE_GETREGSET, m_tid, ®set, &ioVec, m_buf_size) < 0) + m_result = false; + else + m_result = true; +#else + #ifdef PT_GETFPREGS if (PTRACE(PTRACE_GETFPREGS, m_tid, NULL, m_buf, m_buf_size) < 0) m_result = false; @@ -608,6 +640,8 @@ #else m_result = false; #endif + +#endif } //------------------------------------------------------------------------------ @@ -661,6 +695,18 @@ void WriteGPROperation::Execute(ProcessMonitor *monitor) { +#if defined (__arm64__) || defined (__aarch64__) + int regset = NT_PRSTATUS; + struct iovec ioVec; + + ioVec.iov_base = m_buf; + ioVec.iov_len = m_buf_size; + if (PTRACE(PTRACE_SETREGSET, m_tid, ®set, &ioVec, m_buf_size) < 0) + m_result = false; + else + m_result = true; +#else + #ifdef PT_SETREGS if (PTRACE(PTRACE_SETREGS, m_tid, NULL, m_buf, m_buf_size) < 0) m_result = false; @@ -669,6 +715,8 @@ #else m_result = false; #endif + +#endif } //------------------------------------------------------------------------------ @@ -693,6 +741,18 @@ void WriteFPROperation::Execute(ProcessMonitor *monitor) { +#if defined (__arm64__) || defined (__aarch64__) + int regset = NT_FPREGSET; + struct iovec ioVec; + + ioVec.iov_base = m_buf; + ioVec.iov_len = m_buf_size; + if (PTRACE(PTRACE_SETREGSET, m_tid, ®set, &ioVec, m_buf_size) < 0) + m_result = false; + else + m_result = true; +#else + #ifdef PT_SETFPREGS if (PTRACE(PTRACE_SETFPREGS, m_tid, NULL, m_buf, m_buf_size) < 0) m_result = false; @@ -701,6 +761,8 @@ #else m_result = false; #endif + +#endif } //------------------------------------------------------------------------------