From: Mikhail Kurinnoi Date: Tue, 22 Feb 2022 14:58:35 +0000 (-0800) Subject: [Tizen] Add Linux x86 createdump code. X-Git-Tag: accepted/tizen/unified/riscv/20231226.055536~59 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8177f22ac4df22845ece3fda6b360016c592a4ef;p=platform%2Fupstream%2Fdotnet%2Fruntime.git [Tizen] Add Linux x86 createdump code. --- diff --git a/src/coreclr/CMakeLists.txt b/src/coreclr/CMakeLists.txt index 7946ca9..b63bb55 100644 --- a/src/coreclr/CMakeLists.txt +++ b/src/coreclr/CMakeLists.txt @@ -204,9 +204,9 @@ endif(CLR_CMAKE_TARGET_WIN32 AND FEATURE_EVENT_TRACE) add_subdirectory(debug/dbgutil) if(CLR_CMAKE_HOST_UNIX) - if(CLR_CMAKE_HOST_OSX OR (CLR_CMAKE_HOST_LINUX AND NOT CLR_CMAKE_HOST_UNIX_X86 AND NOT CLR_CMAKE_HOST_ANDROID)) + if(CLR_CMAKE_HOST_OSX OR (CLR_CMAKE_HOST_LINUX AND NOT CLR_CMAKE_HOST_ANDROID)) add_subdirectory(debug/createdump) - endif(CLR_CMAKE_HOST_OSX OR (CLR_CMAKE_HOST_LINUX AND NOT CLR_CMAKE_HOST_UNIX_X86 AND NOT CLR_CMAKE_HOST_ANDROID)) + endif(CLR_CMAKE_HOST_OSX OR (CLR_CMAKE_HOST_LINUX AND NOT CLR_CMAKE_HOST_ANDROID)) # Include the dummy c++ include files include_directories("pal/inc/rt/cpp") diff --git a/src/coreclr/debug/createdump/threadinfo.h b/src/coreclr/debug/createdump/threadinfo.h index b973263..84a7dfb 100644 --- a/src/coreclr/debug/createdump/threadinfo.h +++ b/src/coreclr/debug/createdump/threadinfo.h @@ -145,6 +145,9 @@ public: inline const user_fpregs_struct* FPRegisters() const { return &m_fpRegisters; } #if defined(__i386__) inline const user_fpxregs_struct* FPXRegisters() const { return &m_fpxRegisters; } + inline const uint64_t GetInstructionPointer() const { return m_gpRegisters.eip; } + inline const uint64_t GetStackPointer() const { return m_gpRegisters.esp; } + inline const uint64_t GetFramePointer() const { return m_gpRegisters.ebp; } #elif defined(__arm__) && defined(__VFP_FP__) && !defined(__SOFTFP__) inline const user_vfpregs_struct* VFPRegisters() const { return &m_vfpRegisters; } #endif diff --git a/src/coreclr/debug/createdump/threadinfounix.cpp b/src/coreclr/debug/createdump/threadinfounix.cpp index de1495c..93f5bc6 100644 --- a/src/coreclr/debug/createdump/threadinfounix.cpp +++ b/src/coreclr/debug/createdump/threadinfounix.cpp @@ -61,6 +61,8 @@ ThreadInfo::Initialize() TRACE("Thread %04x PC %016llx SP %016llx\n", m_tid, (unsigned long long)m_gpRegisters.csr_era, (unsigned long long)m_gpRegisters.regs[3]); #elif defined(__riscv) TRACE("Thread %04x PC %016llx SP %016llx\n", m_tid, (unsigned long long)m_gpRegisters.pc, (unsigned long long)m_gpRegisters.sp); +#elif defined(__i386__) + TRACE("Thread %04x EIP %08lx ESP %08lx\n", m_tid, (unsigned long)m_gpRegisters.eip, (unsigned long)m_gpRegisters.esp); #else #error "Unsupported architecture" #endif @@ -192,6 +194,29 @@ ThreadInfo::GetThreadContext(uint32_t flags, CONTEXT* context) const context->Fpcr = m_fpRegisters.fpcr; context->Fpsr = m_fpRegisters.fpsr; } +#elif defined(__i386__) + if ((flags & CONTEXT_CONTROL) == CONTEXT_CONTROL) + { + context->Ebp = m_gpRegisters.ebp; + context->Eip = m_gpRegisters.eip; + context->EFlags = m_gpRegisters.eflags; + context->Esp = m_gpRegisters.esp; + context->SegCs = m_gpRegisters.xcs; + context->SegSs = m_gpRegisters.xss; + context->SegGs_PAL_Undefined = m_gpRegisters.xgs; + context->SegFs_PAL_Undefined = m_gpRegisters.xfs; + context->SegEs_PAL_Undefined = m_gpRegisters.xes; + context->SegDs_PAL_Undefined = m_gpRegisters.xds; + } + if ((flags & CONTEXT_INTEGER) == CONTEXT_INTEGER) + { + context->Edi = m_gpRegisters.edi; + context->Esi = m_gpRegisters.esi; + context->Ebx = m_gpRegisters.ebx; + context->Edx = m_gpRegisters.edx; + context->Ecx = m_gpRegisters.ecx; + context->Eax = m_gpRegisters.eax; + } #elif defined(__arm__) if ((flags & CONTEXT_CONTROL) == CONTEXT_CONTROL) {