summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSwift Kim <swift.kim@samsung.com>2019-11-18 07:38:56 (GMT)
committerGleb Balykov <g.balykov@samsung.com>2020-03-25 12:29:41 (GMT)
commit06a2676689168f5190c29e7638a47a783cb9258b (patch)
tree757009ddfaf13c8f0658e232c8e8cc4c20c25f17 /src
parent3da6145eef20b678b5bf8597b566bb0d1b3be7d6 (diff)
downloadcoreclr-06a2676689168f5190c29e7638a47a783cb9258b.zip
coreclr-06a2676689168f5190c29e7638a47a783cb9258b.tar.gz
coreclr-06a2676689168f5190c29e7638a47a783cb9258b.tar.bz2
[Tizen] Use PTRACE_GETREGSET for any arch when creating dump
Also ignore ptrace NT_FPREGSET failures for arm processes on aarch64 kernels. Fixes #25707.
Diffstat (limited to 'src')
-rw-r--r--src/debug/createdump/threadinfo.cpp18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/debug/createdump/threadinfo.cpp b/src/debug/createdump/threadinfo.cpp
index 8af7647..685f9e6 100644
--- a/src/debug/createdump/threadinfo.cpp
+++ b/src/debug/createdump/threadinfo.cpp
@@ -198,7 +198,6 @@ ThreadInfo::UnwindThread(CrashInfo& crashInfo, IXCLRDataProcess* pClrDataProcess
bool
ThreadInfo::GetRegistersWithPTrace()
{
-#if defined(__aarch64__)
struct iovec gpRegsVec = { &m_gpRegisters, sizeof(m_gpRegisters) };
if (ptrace((__ptrace_request)PTRACE_GETREGSET, m_tid, NT_PRSTATUS, &gpRegsVec) == -1)
{
@@ -210,21 +209,15 @@ ThreadInfo::GetRegistersWithPTrace()
struct iovec fpRegsVec = { &m_fpRegisters, sizeof(m_fpRegisters) };
if (ptrace((__ptrace_request)PTRACE_GETREGSET, m_tid, NT_FPREGSET, &fpRegsVec) == -1)
{
+#if defined(__arm__)
+ // Some aarch64 kernels may not support NT_FPREGSET for arm processes. We treat this failure as non-fatal.
+#else
fprintf(stderr, "ptrace(PTRACE_GETREGSET, %d, NT_FPREGSET) FAILED %d (%s)\n", m_tid, errno, strerror(errno));
return false;
+#endif
}
assert(sizeof(m_fpRegisters) == fpRegsVec.iov_len);
-#else
- if (ptrace((__ptrace_request)PTRACE_GETREGS, m_tid, nullptr, &m_gpRegisters) == -1)
- {
- fprintf(stderr, "ptrace(GETREGS, %d) FAILED %d (%s)\n", m_tid, errno, strerror(errno));
- return false;
- }
- if (ptrace((__ptrace_request)PTRACE_GETFPREGS, m_tid, nullptr, &m_fpRegisters) == -1)
- {
- fprintf(stderr, "ptrace(GETFPREGS, %d) FAILED %d (%s)\n", m_tid, errno, strerror(errno));
- return false;
- }
+
#if defined(__i386__)
if (ptrace((__ptrace_request)PTRACE_GETFPXREGS, m_tid, nullptr, &m_fpxRegisters) == -1)
{
@@ -243,7 +236,6 @@ ThreadInfo::GetRegistersWithPTrace()
return false;
}
#endif
-#endif
return true;
}
void ThreadInfo::SetRegisters(elf_prstatus *prstatus)