diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2021-06-01 15:36:00 +0200 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2021-06-04 13:47:08 +0200 |
| commit | 1b627f389f9da48aa8f28808770a731c1e09c338 (patch) | |
| tree | fa5b9c2a700584425e7f0d7d5dfd22c22db6f1bf | |
| parent | a5505f6b5b6f72eb21be7567fc1ef3ae2d5b3281 (diff) | |
| download | focaccia-qemu-1b627f389f9da48aa8f28808770a731c1e09c338.tar.gz focaccia-qemu-1b627f389f9da48aa8f28808770a731c1e09c338.zip | |
target/i386: tcg: fix switching from 16-bit to 32-bit tasks or vice versa
The format of the task state segment is governed by bit 3 in the descriptor type field. On a task switch, the format for saving is given by the current value of TR's type field, while the format for loading is given by the new descriptor. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| -rw-r--r-- | target/i386/tcg/seg_helper.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/target/i386/tcg/seg_helper.c b/target/i386/tcg/seg_helper.c index 2112c5fc51..3ed20ca31d 100644 --- a/target/i386/tcg/seg_helper.c +++ b/target/i386/tcg/seg_helper.c @@ -319,7 +319,7 @@ static void switch_tss_ra(CPUX86State *env, int tss_selector, } /* save the current state in the old TSS */ - if (type & 8) { + if (old_type & 8) { /* 32 bit */ cpu_stl_kernel_ra(env, env->tr.base + 0x20, next_eip, retaddr); cpu_stl_kernel_ra(env, env->tr.base + 0x24, old_eflags, retaddr); |