Debugger: Fill in missing piece of CpuState.
CpuStateX86{-64}:
- Fully implement the BVariant version of SetRegisterValue().
Also fixes CID 1296160.
This commit is contained in:
@@ -227,10 +227,31 @@ bool
|
|||||||
CpuStateX86::SetRegisterValue(const Register* reg, const BVariant& value)
|
CpuStateX86::SetRegisterValue(const Register* reg, const BVariant& value)
|
||||||
{
|
{
|
||||||
int32 index = reg->Index();
|
int32 index = reg->Index();
|
||||||
if (index >= X86_INT_REGISTER_END)
|
if (index >= X86_XMM_REGISTER_END)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (index < X86_INT_REGISTER_END)
|
||||||
|
fIntRegisters[index] = value.ToUInt32();
|
||||||
|
else if (index >= X86_REGISTER_ST0 && index < X86_FP_REGISTER_END)
|
||||||
|
fFloatRegisters[index - X86_REGISTER_ST0] = value.ToDouble();
|
||||||
|
else if (index >= X86_REGISTER_MM0 && index < X86_MMX_REGISTER_END) {
|
||||||
|
if (value.Size() > sizeof(int64))
|
||||||
|
return false;
|
||||||
|
memset(&fMMXRegisters[index - X86_REGISTER_MM0], 0,
|
||||||
|
sizeof(x86_fp_register));
|
||||||
|
memcpy(fMMXRegisters[index - X86_REGISTER_MM0].value,
|
||||||
|
value.ToPointer(), value.Size());
|
||||||
|
} else if (index >= X86_REGISTER_XMM0 && index < X86_XMM_REGISTER_END) {
|
||||||
|
if (value.Size() > sizeof(x86_xmm_register))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
memset(&fXMMRegisters[index - X86_REGISTER_XMM0], 0,
|
||||||
|
sizeof(x86_xmm_register));
|
||||||
|
memcpy(fXMMRegisters[index - X86_REGISTER_XMM0].value,
|
||||||
|
value.ToPointer(), value.Size());
|
||||||
|
} else
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
fIntRegisters[index] = value.ToUInt32();
|
|
||||||
fSetRegisters[index] = 1;
|
fSetRegisters[index] = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -256,7 +256,29 @@ CpuStateX8664::SetRegisterValue(const Register* reg, const BVariant& value)
|
|||||||
if (index >= X86_64_XMM_REGISTER_END)
|
if (index >= X86_64_XMM_REGISTER_END)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
fIntRegisters[index] = value.ToUInt64();
|
if (index < X86_64_INT_REGISTER_END)
|
||||||
|
fIntRegisters[index] = value.ToUInt64();
|
||||||
|
else if (index >= X86_64_REGISTER_ST0 && index < X86_64_FP_REGISTER_END)
|
||||||
|
fFloatRegisters[index - X86_64_REGISTER_ST0] = value.ToDouble();
|
||||||
|
else if (index >= X86_64_REGISTER_MM0 && index < X86_64_MMX_REGISTER_END) {
|
||||||
|
if (value.Size() > sizeof(int64))
|
||||||
|
return false;
|
||||||
|
memset(&fMMXRegisters[index - X86_64_REGISTER_MM0], 0,
|
||||||
|
sizeof(x86_64_fp_register));
|
||||||
|
memcpy(fMMXRegisters[index - X86_64_REGISTER_MM0].value,
|
||||||
|
value.ToPointer(), value.Size());
|
||||||
|
} else if (index >= X86_64_REGISTER_XMM0
|
||||||
|
&& index < X86_64_XMM_REGISTER_END) {
|
||||||
|
if (value.Size() > sizeof(x86_64_xmm_register))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
memset(&fXMMRegisters[index - X86_64_REGISTER_XMM0], 0,
|
||||||
|
sizeof(x86_64_xmm_register));
|
||||||
|
memcpy(fXMMRegisters[index - X86_64_REGISTER_XMM0].value,
|
||||||
|
value.ToPointer(), value.Size());
|
||||||
|
} else
|
||||||
|
return false;
|
||||||
|
|
||||||
fSetRegisters[index] = 1;
|
fSetRegisters[index] = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user