summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
diff options
context:
space:
mode:
authorTodd Fiala <todd.fiala@gmail.com>2014-08-27 16:05:26 +0000
committerTodd Fiala <todd.fiala@gmail.com>2014-08-27 16:05:26 +0000
commit4207968d33f5dca9205e8b082cc7411baa355040 (patch)
treecaa8fbe051c47892c54e51140e60ea7f156a50ad /lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
parent49d8ce03ce104602740b975f4f2647512ec666fc (diff)
downloadbcm5719-llvm-4207968d33f5dca9205e8b082cc7411baa355040.tar.gz
bcm5719-llvm-4207968d33f5dca9205e8b082cc7411baa355040.zip
Add Linux support for get thread area on ARM64 using ProcessMonitor debugging.
See http://reviews.llvm.org/D5073. Change by Paul Osmialowski. llvm-svn: 216553
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp')
-rw-r--r--lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
index 048a517d4f1..416d6a65da5 100644
--- a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
+++ b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
@@ -15,6 +15,7 @@
#include <string.h>
#include <stdint.h>
#include <unistd.h>
+#include <elf.h>
#include <sys/personality.h>
#include <sys/ptrace.h>
#include <sys/uio.h>
@@ -24,11 +25,6 @@
#include <sys/user.h>
#include <sys/wait.h>
-#if defined (__arm64__) || defined (__aarch64__)
-// NT_PRSTATUS and NT_FPREGSET definition
-#include <elf.h>
-#endif
-
// C++ Includes
// Other libraries and framework includes
#include "lldb/Core/Debugger.h"
@@ -802,6 +798,19 @@ ReadThreadPointerOperation::Execute(ProcessMonitor *monitor)
const ArchSpec& arch = monitor->GetProcess().GetTarget().GetArchitecture();
switch(arch.GetMachine())
{
+ case llvm::Triple::aarch64:
+ {
+ int regset = NT_ARM_TLS;
+ struct iovec ioVec;
+
+ ioVec.iov_base = m_addr;
+ ioVec.iov_len = sizeof(lldb::addr_t);
+ if (PTRACE(PTRACE_GETREGSET, m_tid, &regset, &ioVec, ioVec.iov_len) < 0)
+ m_result = false;
+ else
+ m_result = true;
+ break;
+ }
#if defined(__i386__) || defined(__x86_64__)
// Note that struct user below has a field named i387 which is x86-specific.
// Therefore, this case should be compiled only for x86-based systems.
OpenPOWER on IntegriCloud