diff options
author | Greg Clayton <gclayton@apple.com> | 2011-09-17 05:59:37 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2011-09-17 05:59:37 +0000 |
commit | 5631ebce5e09cec5c1b6929f70847d3d2554728d (patch) | |
tree | 4fb33fe5f250caf0203228935bfd8ef3ad413228 | |
parent | 5299cc58cb04d541278807e4e9f6978d120f5e0e (diff) | |
download | bcm5719-llvm-5631ebce5e09cec5c1b6929f70847d3d2554728d.tar.gz bcm5719-llvm-5631ebce5e09cec5c1b6929f70847d3d2554728d.zip |
Added more logging, and renamed FPR to FPU in a the register set/flavor enum.
llvm-svn: 139982
4 files changed, 77 insertions, 19 deletions
diff --git a/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp b/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp index 5554b06908f..6ab93b37f43 100644 --- a/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp +++ b/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp @@ -463,12 +463,18 @@ DNBArchImplI386::GetFPUState(bool force) if (CPUHasAVX() || FORCE_AVX_REGS) { mach_msg_type_number_t count = e_regSetWordSizeAVX; - m_state.SetError(e_regSetFPU, Read, ::thread_get_state(m_thread->ThreadID(), __i386_AVX_STATE, (thread_state_t)&m_state.context.fpu.avx, &count)); + m_state.SetError (e_regSetFPU, Read, ::thread_get_state(m_thread->ThreadID(), __i386_AVX_STATE, (thread_state_t)&m_state.context.fpu.avx, &count)); + DNBLogThreadedIf (LOG_THREAD, "::thread_get_state (0x%4.4x, %u, &avx, %u (%u passed in)) => 0x%8.8x", + m_thread->ThreadID(), __i386_AVX_STATE, count, e_regSetWordSizeAVX, + m_state.GetError(e_regSetFPU, Read)); } else { - mach_msg_type_number_t count = e_regSetWordSizeFPR; + mach_msg_type_number_t count = e_regSetWordSizeFPU; m_state.SetError(e_regSetFPU, Read, ::thread_get_state(m_thread->ThreadID(), __i386_FLOAT_STATE, (thread_state_t)&m_state.context.fpu.no_avx, &count)); + DNBLogThreadedIf (LOG_THREAD, "::thread_get_state (0x%4.4x, %u, &fpu, %u (%u passed in) => 0x%8.8x", + m_thread->ThreadID(), __i386_FLOAT_STATE, count, e_regSetWordSizeFPU, + m_state.GetError(e_regSetFPU, Read)); } } } @@ -506,7 +512,7 @@ DNBArchImplI386::SetFPUState() if (CPUHasAVX() || FORCE_AVX_REGS) m_state.SetError(e_regSetFPU, Write, ::thread_set_state(m_thread->ThreadID(), __i386_AVX_STATE, (thread_state_t)&m_state.context.fpu.avx, e_regSetWordSizeAVX)); else - m_state.SetError(e_regSetFPU, Write, ::thread_set_state(m_thread->ThreadID(), __i386_FLOAT_STATE, (thread_state_t)&m_state.context.fpu.no_avx, e_regSetWordSizeFPR)); + m_state.SetError(e_regSetFPU, Write, ::thread_set_state(m_thread->ThreadID(), __i386_FLOAT_STATE, (thread_state_t)&m_state.context.fpu.no_avx, e_regSetWordSizeFPU)); return m_state.GetError(e_regSetFPU, Write); } } @@ -1448,9 +1454,27 @@ DNBArchImplI386::GetRegisterContext (void *buf, nub_size_t buf_len) size = buf_len; bool force = false; - if (GetGPRState(force) | GetFPUState(force) | GetEXCState(force)) - return 0; - ::memcpy (buf, &m_state.context, size); + kern_return_t kret; + if ((kret = GetGPRState(force)) != KERN_SUCCESS) + { + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplI386::GetRegisterContext (buf = %p, len = %zu) error: GPR regs failed to read: %u ", buf, buf_len, kret); + size = 0; + } + else if ((kret = GetFPUState(force)) != KERN_SUCCESS) + { + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplI386::GetRegisterContext (buf = %p, len = %zu) error: %s regs failed to read: %u", buf, buf_len, CPUHasAVX() ? "AVX" : "FPU", kret); + size = 0; + } + else if ((kret = GetEXCState(force)) != KERN_SUCCESS) + { + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplI386::GetRegisterContext (buf = %p, len = %zu) error: EXC regs failed to read: %u", buf, buf_len, kret); + size = 0; + } + else + { + // Success + ::memcpy (buf, &m_state.context, size); + } } DNBLogThreadedIf (LOG_THREAD, "DNBArchImplI386::GetRegisterContext (buf = %p, len = %zu) => %zu", buf, buf_len, size); // Return the size of the register context even if NULL was passed in @@ -1470,9 +1494,13 @@ DNBArchImplI386::SetRegisterContext (const void *buf, nub_size_t buf_len) size = buf_len; ::memcpy (&m_state.context, buf, size); - SetGPRState(); - SetFPUState(); - SetEXCState(); + kern_return_t kret; + if ((kret = SetGPRState()) != KERN_SUCCESS) + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplI386::SetRegisterContext (buf = %p, len = %zu) error: GPR regs failed to write: %u", buf, buf_len, kret); + if ((kret = SetFPUState()) != KERN_SUCCESS) + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplI386::SetRegisterContext (buf = %p, len = %zu) error: %s regs failed to write: %u", buf, buf_len, CPUHasAVX() ? "AVX" : "FPU", kret); + if ((kret = SetEXCState()) != KERN_SUCCESS) + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplI386::SetRegisterContext (buf = %p, len = %zu) error: EXP regs failed to write: %u", buf, buf_len, kret); } DNBLogThreadedIf (LOG_THREAD, "DNBArchImplI386::SetRegisterContext (buf = %p, len = %zu) => %zu", buf, buf_len, size); return size; diff --git a/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h b/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h index bbe3643ecab..b4c4c11c233 100644 --- a/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h +++ b/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h @@ -92,7 +92,7 @@ protected: typedef enum RegisterSetWordSizeTag { e_regSetWordSizeGPR = sizeof(GPR) / sizeof(int), - e_regSetWordSizeFPR = sizeof(FPU) / sizeof(int), + e_regSetWordSizeFPU = sizeof(FPU) / sizeof(int), e_regSetWordSizeEXC = sizeof(EXC) / sizeof(int), e_regSetWordSizeAVX = sizeof(AVX) / sizeof(int), e_regSetWordSizeDBG = sizeof(DBG) / sizeof(int) diff --git a/lldb/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp b/lldb/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp index 875ed9dde06..6fc19dba182 100644 --- a/lldb/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp +++ b/lldb/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp @@ -369,11 +369,17 @@ DNBArchImplX86_64::GetFPUState(bool force) { mach_msg_type_number_t count = e_regSetWordSizeAVX; m_state.SetError(e_regSetFPU, Read, ::thread_get_state(m_thread->ThreadID(), __x86_64_AVX_STATE, (thread_state_t)&m_state.context.fpu.avx, &count)); + DNBLogThreadedIf (LOG_THREAD, "::thread_get_state (0x%4.4x, %u, &avx, %u (%u passed in) carp) => 0x%8.8x", + m_thread->ThreadID(), x86_AVX_STATE64, (uint32_t)count, + e_regSetWordSizeAVX, m_state.GetError(e_regSetFPU, Read)); } else { - mach_msg_type_number_t count = e_regSetWordSizeFPR; + mach_msg_type_number_t count = e_regSetWordSizeFPU; m_state.SetError(e_regSetFPU, Read, ::thread_get_state(m_thread->ThreadID(), __x86_64_FLOAT_STATE, (thread_state_t)&m_state.context.fpu.no_avx, &count)); + DNBLogThreadedIf (LOG_THREAD, "::thread_get_state (0x%4.4x, %u, &fpu, %u (%u passed in) => 0x%8.8x", + m_thread->ThreadID(), __x86_64_FLOAT_STATE, (uint32_t)count, + e_regSetWordSizeFPU, m_state.GetError(e_regSetFPU, Read)); } } } @@ -434,7 +440,7 @@ DNBArchImplX86_64::SetFPUState() } else { - m_state.SetError(e_regSetFPU, Write, ::thread_set_state(m_thread->ThreadID(), __x86_64_FLOAT_STATE, (thread_state_t)&m_state.context.fpu.no_avx, e_regSetWordSizeFPR)); + m_state.SetError(e_regSetFPU, Write, ::thread_set_state(m_thread->ThreadID(), __x86_64_FLOAT_STATE, (thread_state_t)&m_state.context.fpu.no_avx, e_regSetWordSizeFPU)); return m_state.GetError(e_regSetFPU, Write); } } @@ -1714,9 +1720,29 @@ DNBArchImplX86_64::GetRegisterContext (void *buf, nub_size_t buf_len) size = buf_len; bool force = false; - if (GetGPRState(force) | GetFPUState(force) | GetEXCState(force)) - return 0; - ::memcpy (buf, &m_state.context, size); + kern_return_t kret; + if ((kret = GetGPRState(force)) != KERN_SUCCESS) + { + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplX86_64::GetRegisterContext (buf = %p, len = %zu) error: GPR regs failed to read: %u ", buf, buf_len, kret); + size = 0; + } + else + if ((kret = GetFPUState(force)) != KERN_SUCCESS) + { + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplX86_64::GetRegisterContext (buf = %p, len = %zu) error: %s regs failed to read: %u", buf, buf_len, CPUHasAVX() ? "AVX" : "FPU", kret); + size = 0; + } + else + if ((kret = GetEXCState(force)) != KERN_SUCCESS) + { + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplX86_64::GetRegisterContext (buf = %p, len = %zu) error: EXC regs failed to read: %u", buf, buf_len, kret); + size = 0; + } + else + { + // Success + ::memcpy (buf, &m_state.context, size); + } } DNBLogThreadedIf (LOG_THREAD, "DNBArchImplX86_64::GetRegisterContext (buf = %p, len = %zu) => %zu", buf, buf_len, size); // Return the size of the register context even if NULL was passed in @@ -1736,9 +1762,13 @@ DNBArchImplX86_64::SetRegisterContext (const void *buf, nub_size_t buf_len) size = buf_len; ::memcpy (&m_state.context, buf, size); - SetGPRState(); - SetFPUState(); - SetEXCState(); + kern_return_t kret; + if ((kret = SetGPRState()) != KERN_SUCCESS) + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplX86_64::SetRegisterContext (buf = %p, len = %zu) error: GPR regs failed to write: %u", buf, buf_len, kret); + if ((kret = SetFPUState()) != KERN_SUCCESS) + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplX86_64::SetRegisterContext (buf = %p, len = %zu) error: %s regs failed to write: %u", buf, buf_len, CPUHasAVX() ? "AVX" : "FPU", kret); + if ((kret = SetEXCState()) != KERN_SUCCESS) + DNBLogThreadedIf (LOG_THREAD, "DNBArchImplX86_64::SetRegisterContext (buf = %p, len = %zu) error: EXP regs failed to write: %u", buf, buf_len, kret); } DNBLogThreadedIf (LOG_THREAD, "DNBArchImplX86_64::SetRegisterContext (buf = %p, len = %zu) => %zu", buf, buf_len, size); return size; diff --git a/lldb/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h b/lldb/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h index 661a9d894a6..f4f4809c5ac 100644 --- a/lldb/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h +++ b/lldb/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h @@ -91,7 +91,7 @@ protected: typedef enum RegisterSetWordSizeTag { e_regSetWordSizeGPR = sizeof(GPR) / sizeof(int), - e_regSetWordSizeFPR = sizeof(FPU) / sizeof(int), + e_regSetWordSizeFPU = sizeof(FPU) / sizeof(int), e_regSetWordSizeEXC = sizeof(EXC) / sizeof(int), e_regSetWordSizeAVX = sizeof(AVX) / sizeof(int), e_regSetWordSizeDBG = sizeof(DBG) / sizeof(int) |