Revision a363e34c
b/helper-i386.c | ||
---|---|---|
216 | 216 |
break; |
217 | 217 |
} |
218 | 218 |
dpl = (e2 >> DESC_DPL_SHIFT) & 3; |
219 |
cpl = env->segs[R_CS].selector & 3; |
|
219 |
if (env->eflags & VM_MASK) |
|
220 |
cpl = 3; |
|
221 |
else |
|
222 |
cpl = env->segs[R_CS].selector & 3; |
|
220 | 223 |
/* check privledge if software int */ |
221 | 224 |
if (is_int && dpl < cpl) |
222 | 225 |
raise_exception_err(EXCP0D_GPF, intno * 8 + 2); |
... | ... | |
572 | 575 |
ECX = 0x6c65746e; |
573 | 576 |
EDX = 0x49656e69; |
574 | 577 |
} else if (EAX == 1) { |
578 |
int family, model, stepping; |
|
575 | 579 |
/* EAX = 1 info */ |
576 |
EAX = 0x52b; |
|
580 |
#if 0 |
|
581 |
/* pentium 75-200 */ |
|
582 |
family = 5; |
|
583 |
model = 2; |
|
584 |
stepping = 11; |
|
585 |
#else |
|
586 |
/* pentium pro */ |
|
587 |
family = 6; |
|
588 |
model = 1; |
|
589 |
stepping = 3; |
|
590 |
#endif |
|
591 |
EAX = (family << 8) | (model << 4) | stepping; |
|
577 | 592 |
EBX = 0; |
578 | 593 |
ECX = 0; |
579 | 594 |
EDX = CPUID_FP87 | CPUID_DE | CPUID_PSE | |
580 | 595 |
CPUID_TSC | CPUID_MSR | CPUID_MCE | |
581 |
CPUID_CX8; |
|
596 |
CPUID_CX8 | CPUID_PGE | CPUID_CMOV;
|
|
582 | 597 |
} |
583 | 598 |
} |
584 | 599 |
|
... | ... | |
751 | 766 |
load_seg_cache(&sc1, e1, e2); |
752 | 767 |
if (new_eip > sc1.limit) |
753 | 768 |
raise_exception_err(EXCP0D_GPF, selector & 0xfffc); |
754 |
env->segs[R_CS] = sc1; |
|
769 |
env->segs[R_CS].base = sc1.base; |
|
770 |
env->segs[R_CS].limit = sc1.limit; |
|
771 |
env->segs[R_CS].flags = sc1.flags; |
|
755 | 772 |
env->segs[R_CS].selector = (selector & 0xfffc) | cpl; |
756 | 773 |
EIP = new_eip; |
757 | 774 |
} else { |
Also available in: Unified diff