35 lines
1.9 KiB
Diff
35 lines
1.9 KiB
Diff
--- a/src/app/virtualbox/src/recompiler/VBoxRecompiler.c
|
|
--- b/src/app/virtualbox/src/recompiler/VBoxRecompiler.c
|
|
@@ -2664,13 +2664,14 @@
|
|
#endif
|
|
}
|
|
|
|
+ bool busy_set = ((pCtx->tr.Attr.u & SEL_FLAGS_SMASK) << SEL_FLAGS_SHIFT) & DESC_TSS_BUSY_MASK;
|
|
if ( pCtx->tr.Sel != pVM->rem.s.Env.tr.selector
|
|
|| pCtx->tr.ValidSel != pVM->rem.s.Env.tr.selector
|
|
|| pCtx->tr.u64Base != pVM->rem.s.Env.tr.base
|
|
|| pCtx->tr.u32Limit != pVM->rem.s.Env.tr.limit
|
|
/* Qemu and AMD/Intel have different ideas about the busy flag ... */ /** @todo just fix qemu! */
|
|
|| pCtx->tr.Attr.u != ( (pVM->rem.s.Env.tr.flags >> SEL_FLAGS_SHIFT) & (SEL_FLAGS_SMASK & ~DESC_INTEL_UNUSABLE)
|
|
- ? (pVM->rem.s.Env.tr.flags | DESC_TSS_BUSY_MASK) >> SEL_FLAGS_SHIFT
|
|
+ ? (pVM->rem.s.Env.tr.flags | (busy_set ? DESC_TSS_BUSY_MASK : 0)) >> SEL_FLAGS_SHIFT
|
|
: 0)
|
|
|| !(pCtx->tr.fFlags & CPUMSELREG_FLAGS_VALID)
|
|
)
|
|
@@ -2905,13 +2906,14 @@
|
|
#endif
|
|
}
|
|
|
|
+ bool busy_set = ((pCtx->tr.Attr.u & SEL_FLAGS_SMASK) << SEL_FLAGS_SHIFT) & DESC_TSS_BUSY_MASK;
|
|
if ( pCtx->tr.Sel != pVM->rem.s.Env.tr.selector
|
|
|| pCtx->tr.ValidSel != pVM->rem.s.Env.tr.selector
|
|
|| pCtx->tr.u64Base != pVM->rem.s.Env.tr.base
|
|
|| pCtx->tr.u32Limit != pVM->rem.s.Env.tr.limit
|
|
/* Qemu and AMD/Intel have different ideas about the busy flag ... */
|
|
|| pCtx->tr.Attr.u != ( (pVM->rem.s.Env.tr.flags >> SEL_FLAGS_SHIFT) & (SEL_FLAGS_SMASK & ~DESC_INTEL_UNUSABLE)
|
|
- ? (pVM->rem.s.Env.tr.flags | DESC_TSS_BUSY_MASK) >> SEL_FLAGS_SHIFT
|
|
+ ? (pVM->rem.s.Env.tr.flags | (busy_set ? DESC_TSS_BUSY_MASK : 0)) >> SEL_FLAGS_SHIFT
|
|
: 0)
|
|
|| !(pCtx->tr.fFlags & CPUMSELREG_FLAGS_VALID)
|
|
)
|