/[qemu]/qemu/helper-i386.c
ViewVC logotype

Diff of /qemu/helper-i386.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5 by bellard, Tue Jun 24 13:27:18 2003 UTC revision 1.6 by bellard, Wed Jun 25 16:18:05 2003 UTC
# Line 216  static void do_interrupt_protected(int i Line 216  static void do_interrupt_protected(int i
216          break;          break;
217      }      }
218      dpl = (e2 >> DESC_DPL_SHIFT) & 3;      dpl = (e2 >> DESC_DPL_SHIFT) & 3;
219      cpl = env->segs[R_CS].selector & 3;      if (env->eflags & VM_MASK)
220            cpl = 3;
221        else
222            cpl = env->segs[R_CS].selector & 3;
223      /* check privledge if software int */      /* check privledge if software int */
224      if (is_int && dpl < cpl)      if (is_int && dpl < cpl)
225          raise_exception_err(EXCP0D_GPF, intno * 8 + 2);          raise_exception_err(EXCP0D_GPF, intno * 8 + 2);
# Line 572  void helper_cpuid(void) Line 575  void helper_cpuid(void)
575          ECX = 0x6c65746e;          ECX = 0x6c65746e;
576          EDX = 0x49656e69;          EDX = 0x49656e69;
577      } else if (EAX == 1) {      } else if (EAX == 1) {
578            int family, model, stepping;
579          /* EAX = 1 info */          /* EAX = 1 info */
580          EAX = 0x52b;  #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;
592          EBX = 0;          EBX = 0;
593          ECX = 0;          ECX = 0;
594          EDX = CPUID_FP87 | CPUID_DE | CPUID_PSE |          EDX = CPUID_FP87 | CPUID_DE | CPUID_PSE |
595              CPUID_TSC | CPUID_MSR | CPUID_MCE |              CPUID_TSC | CPUID_MSR | CPUID_MCE |
596              CPUID_CX8;              CPUID_CX8 | CPUID_PGE | CPUID_CMOV;
597      }      }
598  }  }
599    
# Line 751  void jmp_seg(int selector, unsigned int Line 766  void jmp_seg(int selector, unsigned int
766          load_seg_cache(&sc1, e1, e2);          load_seg_cache(&sc1, e1, e2);
767          if (new_eip > sc1.limit)          if (new_eip > sc1.limit)
768              raise_exception_err(EXCP0D_GPF, selector & 0xfffc);              raise_exception_err(EXCP0D_GPF, selector & 0xfffc);
769          env->segs[R_CS] = sc1;          env->segs[R_CS].base = sc1.base;
770            env->segs[R_CS].limit = sc1.limit;
771            env->segs[R_CS].flags = sc1.flags;
772          env->segs[R_CS].selector = (selector & 0xfffc) | cpl;          env->segs[R_CS].selector = (selector & 0xfffc) | cpl;
773          EIP = new_eip;          EIP = new_eip;
774      } else {      } else {

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26