/[qemu]/qemu/cpu-exec.c
ViewVC logotype

Diff of /qemu/cpu-exec.c

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

revision 1.1 by bellard, Sun Jun 15 19:51:39 2003 UTC revision 1.2 by bellard, Sat Jun 21 13:09:25 2003 UTC
# Line 178  int cpu_exec(CPUState *env1) Line 178  int cpu_exec(CPUState *env1)
178              /* we compute the CPU state. We assume it will not              /* we compute the CPU state. We assume it will not
179                 change during the whole generated block. */                 change during the whole generated block. */
180  #if defined(TARGET_I386)  #if defined(TARGET_I386)
181              flags = env->seg_cache[R_CS].seg_32bit << GEN_FLAG_CODE32_SHIFT;              flags = env->segs[R_CS].seg_32bit << GEN_FLAG_CODE32_SHIFT;
182              flags |= env->seg_cache[R_SS].seg_32bit << GEN_FLAG_SS32_SHIFT;              flags |= env->segs[R_SS].seg_32bit << GEN_FLAG_SS32_SHIFT;
183              flags |= (((unsigned long)env->seg_cache[R_DS].base |              flags |= (((unsigned long)env->segs[R_DS].base |
184                         (unsigned long)env->seg_cache[R_ES].base |                         (unsigned long)env->segs[R_ES].base |
185                         (unsigned long)env->seg_cache[R_SS].base) != 0) <<                         (unsigned long)env->segs[R_SS].base) != 0) <<
186                  GEN_FLAG_ADDSEG_SHIFT;                  GEN_FLAG_ADDSEG_SHIFT;
187              if (!(env->eflags & VM_MASK)) {              if (!(env->eflags & VM_MASK)) {
188                  flags |= (env->segs[R_CS] & 3) << GEN_FLAG_CPL_SHIFT;                  flags |= (env->segs[R_CS].selector & 3) << GEN_FLAG_CPL_SHIFT;
189              } else {              } else {
190                  /* NOTE: a dummy CPL is kept */                  /* NOTE: a dummy CPL is kept */
191                  flags |= (1 << GEN_FLAG_VM_SHIFT);                  flags |= (1 << GEN_FLAG_VM_SHIFT);
192                  flags |= (3 << GEN_FLAG_CPL_SHIFT);                  flags |= (3 << GEN_FLAG_CPL_SHIFT);
193              }              }
194              flags |= (env->eflags & (IOPL_MASK | TF_MASK));              flags |= (env->eflags & (IOPL_MASK | TF_MASK));
195              cs_base = env->seg_cache[R_CS].base;              cs_base = env->segs[R_CS].base;
196              pc = cs_base + env->eip;              pc = cs_base + env->eip;
197  #elif defined(TARGET_ARM)  #elif defined(TARGET_ARM)
198              flags = 0;              flags = 0;
# Line 347  void cpu_x86_load_seg(CPUX86State *s, in Line 347  void cpu_x86_load_seg(CPUX86State *s, in
347      if (env->eflags & VM_MASK) {      if (env->eflags & VM_MASK) {
348          SegmentCache *sc;          SegmentCache *sc;
349          selector &= 0xffff;          selector &= 0xffff;
350          sc = &env->seg_cache[seg_reg];          sc = &env->segs[seg_reg];
351          /* NOTE: in VM86 mode, limit and seg_32bit are never reloaded,          /* NOTE: in VM86 mode, limit and seg_32bit are never reloaded,
352             so we must load them here */             so we must load them here */
353          sc->base = (void *)(selector << 4);          sc->base = (void *)(selector << 4);
354          sc->limit = 0xffff;          sc->limit = 0xffff;
355          sc->seg_32bit = 0;          sc->seg_32bit = 0;
356          env->segs[seg_reg] = selector;          sc->selector = selector;
357      } else {      } else {
358          load_seg(seg_reg, selector, 0);          load_seg(seg_reg, selector, 0);
359      }      }
# Line 426  static inline int handle_cpu_signal(unsi Line 426  static inline int handle_cpu_signal(unsi
426              return 0;              return 0;
427  #if defined(TARGET_I386)  #if defined(TARGET_I386)
428          env->eip = found_pc - tb->cs_base;          env->eip = found_pc - tb->cs_base;
429          env->cr2 = address;          env->cr[2] = address;
430          /* we restore the process signal mask as the sigreturn should          /* we restore the process signal mask as the sigreturn should
431             do it (XXX: use sigsetjmp) */             do it (XXX: use sigsetjmp) */
432          sigprocmask(SIG_SETMASK, old_set, NULL);          sigprocmask(SIG_SETMASK, old_set, NULL);

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

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