Commit a363e34cc51220a31691d54e576fb0e29ec02646

Authored by bellard
1 parent ea041c0e

fixed VM86 support in Virtual Linux - fixed compilation issues with gcc 2.96 - c…

…puid returns now pentium pro in order to avoid F00F bug workaround in Linux kernel


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@277 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 21 additions and 4 deletions
helper-i386.c
... ... @@ -216,7 +216,10 @@ static void do_interrupt_protected(int intno, int is_int, int error_code,
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,13 +575,25 @@ void helper_cpuid(void)
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,7 +766,9 @@ void jmp_seg(int selector, unsigned int new_eip)
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 {
... ...