forked from OSchip/llvm-project
Added more logging, and renamed FPR to FPU in a the register set/flavor enum.
llvm-svn: 139982
This commit is contained in:
parent
5299cc58cb
commit
5631ebce5e
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue