diff options
author | Swift Kim <swift.kim@samsung.com> | 2019-11-18 16:38:56 +0900 |
---|---|---|
committer | Gleb Balykov <g.balykov@samsung.com> | 2020-03-25 15:29:41 +0300 |
commit | 06a2676689168f5190c29e7638a47a783cb9258b (patch) | |
tree | 757009ddfaf13c8f0658e232c8e8cc4c20c25f17 /src | |
parent | 3da6145eef20b678b5bf8597b566bb0d1b3be7d6 (diff) | |
download | coreclr-06a2676689168f5190c29e7638a47a783cb9258b.tar.gz coreclr-06a2676689168f5190c29e7638a47a783cb9258b.tar.bz2 coreclr-06a2676689168f5190c29e7638a47a783cb9258b.zip |
[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.cpp | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/src/debug/createdump/threadinfo.cpp b/src/debug/createdump/threadinfo.cpp index 8af76477b7..685f9e64c0 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) |