Signed-off-by: Mohamed Mediouni <[email protected]>
---
target/i386/whpx/whpx-all.c | 43 +++++++++++++++++++++++++++----------
1 file changed, 32 insertions(+), 11 deletions(-)
diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c
index 26ca879c89..d2cd8e8001 100644
--- a/target/i386/whpx/whpx-all.c
+++ b/target/i386/whpx/whpx-all.c
@@ -101,16 +101,6 @@ static const WHV_REGISTER_NAME whpx_register_names[] = {
WHvX64RegisterCr3,
WHvX64RegisterCr4,
- /* X64 Debug Registers */
- /*
- * WHvX64RegisterDr0,
- * WHvX64RegisterDr1,
- * WHvX64RegisterDr2,
- * WHvX64RegisterDr3,
- * WHvX64RegisterDr6,
- * WHvX64RegisterDr7,
- */
-
/* X64 MSRs */
WHvX64RegisterEfer,
#ifdef TARGET_X86_64
@@ -126,7 +116,12 @@ static const WHV_REGISTER_NAME whpx_register_names[] = {
WHvX64RegisterCstar,
WHvX64RegisterSfmask,
#endif
-
+ WHvX64RegisterDr0,
+ WHvX64RegisterDr1,
+ WHvX64RegisterDr2,
+ WHvX64RegisterDr3,
+ WHvX64RegisterDr6,
+ WHvX64RegisterDr7
/* Interrupt / Event Registers */
/*
* WHvRegisterPendingInterruption,
@@ -686,6 +681,19 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel
level)
vcxt.values[idx++].Reg64 = env->fmask;
#endif
+ assert(whpx_register_names[idx] == WHvX64RegisterDr0);
+ vcxt.values[idx++].Reg64 = env->dr[0];
+ assert(whpx_register_names[idx] == WHvX64RegisterDr1);
+ vcxt.values[idx++].Reg64 = env->dr[1];
+ assert(whpx_register_names[idx] == WHvX64RegisterDr2);
+ vcxt.values[idx++].Reg64 = env->dr[2];
+ assert(whpx_register_names[idx] == WHvX64RegisterDr3);
+ vcxt.values[idx++].Reg64 = env->dr[3];
+ assert(whpx_register_names[idx] == WHvX64RegisterDr6);
+ vcxt.values[idx++].Reg64 = env->dr[6];
+ assert(whpx_register_names[idx] == WHvX64RegisterDr7);
+ vcxt.values[idx++].Reg64 = env->dr[7];
+
/* Interrupt / Event Registers - Skipped */
assert(idx == RTL_NUMBER_OF(whpx_register_names));
@@ -1070,6 +1078,19 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel
level)
env->fmask = vcxt.values[idx++].Reg64;
#endif
+ assert(whpx_register_names[idx] == WHvX64RegisterDr0);
+ env->dr[0] = vcxt.values[idx++].Reg64;
+ assert(whpx_register_names[idx] == WHvX64RegisterDr1);
+ env->dr[1] = vcxt.values[idx++].Reg64;
+ assert(whpx_register_names[idx] == WHvX64RegisterDr2);
+ env->dr[2] = vcxt.values[idx++].Reg64;
+ assert(whpx_register_names[idx] == WHvX64RegisterDr3);
+ env->dr[3] = vcxt.values[idx++].Reg64;
+ assert(whpx_register_names[idx] == WHvX64RegisterDr6);
+ env->dr[6] = vcxt.values[idx++].Reg64;
+ assert(whpx_register_names[idx] == WHvX64RegisterDr7);
+ env->dr[7] = vcxt.values[idx++].Reg64;
+
/* Interrupt / Event Registers - Skipped */
assert(idx == RTL_NUMBER_OF(whpx_register_names));
--
2.54.0 (Apple Git-157)