Revision c05bab77

b/linux-user/vm86.c
73 73
    ts->target_v86->regs.ebp = tswap32(env->regs[R_EBP]);
74 74
    ts->target_v86->regs.esp = tswap32(env->regs[R_ESP]);
75 75
    ts->target_v86->regs.eip = tswap32(env->eip);
76
    ts->target_v86->regs.cs = tswap16(env->segs[R_CS]);
77
    ts->target_v86->regs.ss = tswap16(env->segs[R_SS]);
78
    ts->target_v86->regs.ds = tswap16(env->segs[R_DS]);
79
    ts->target_v86->regs.es = tswap16(env->segs[R_ES]);
80
    ts->target_v86->regs.fs = tswap16(env->segs[R_FS]);
81
    ts->target_v86->regs.gs = tswap16(env->segs[R_GS]);
76
    ts->target_v86->regs.cs = tswap16(env->segs[R_CS].selector);
77
    ts->target_v86->regs.ss = tswap16(env->segs[R_SS].selector);
78
    ts->target_v86->regs.ds = tswap16(env->segs[R_DS].selector);
79
    ts->target_v86->regs.es = tswap16(env->segs[R_ES].selector);
80
    ts->target_v86->regs.fs = tswap16(env->segs[R_FS].selector);
81
    ts->target_v86->regs.gs = tswap16(env->segs[R_GS].selector);
82 82
    set_flags(env->eflags, ts->v86flags, VIF_MASK | ts->v86mask);
83 83
    ts->target_v86->regs.eflags = tswap32(env->eflags);
84 84
#ifdef DEBUG_VM86
85 85
    fprintf(logfile, "save_v86_state: eflags=%08x cs:ip=%04x:%04x\n", 
86
            env->eflags, env->segs[R_CS], env->eip);
86
            env->eflags, env->segs[R_CS].selector, env->eip);
87 87
#endif
88 88

  
89 89
    /* restore 32 bit registers */
......
180 180
    flags = env->eflags & RETURN_MASK;
181 181
    if (ts->v86flags & VIF_MASK)
182 182
        flags |= IF_MASK;
183
    flags |= IOPL_MASK;
183 184
    return flags | (ts->v86flags & ts->v86mask);
184 185
}
185 186

  
......
194 195
    uint8_t *ssp;
195 196
    unsigned int sp;
196 197

  
197
    if (env->segs[R_CS] == TARGET_BIOSSEG)
198
    if (env->segs[R_CS].selector == TARGET_BIOSSEG)
198 199
        goto cannot_handle;
199 200
    if (is_revectored(intno, &ts->vm86plus.int_revectored))
200 201
        goto cannot_handle;
......
210 211
            intno, segoffs >> 16, segoffs & 0xffff);
211 212
#endif
212 213
    /* save old state */
213
    ssp = (uint8_t *)(env->segs[R_SS] << 4);
214
    ssp = (uint8_t *)(env->segs[R_SS].selector << 4);
214 215
    sp = env->regs[R_ESP] & 0xffff;
215 216
    vm_putw(ssp, sp - 2, get_vflags(env));
216
    vm_putw(ssp, sp - 4, env->segs[R_CS]);
217
    vm_putw(ssp, sp - 4, env->segs[R_CS].selector);
217 218
    vm_putw(ssp, sp - 6, env->eip);
218 219
    ADD16(env->regs[R_ESP], -6);
219 220
    /* goto interrupt handler */
......
257 258
    unsigned int ip, sp, newflags, newip, newcs, opcode, intno;
258 259
    int data32, pref_done;
259 260

  
260
    csp = (uint8_t *)(env->segs[R_CS] << 4);
261
    csp = (uint8_t *)(env->segs[R_CS].selector << 4);
261 262
    ip = env->eip & 0xffff;
262 263
    pc = csp + ip;
263 264
    
264
    ssp = (uint8_t *)(env->segs[R_SS] << 4);
265
    ssp = (uint8_t *)(env->segs[R_SS].selector << 4);
265 266
    sp = env->regs[R_ESP] & 0xffff;
266 267

  
267 268
#if defined(DEBUG_VM86)
268 269
    fprintf(logfile, "VM86 exception %04x:%08x %02x %02x\n",
269
            env->segs[R_CS], env->eip, pc[0], pc[1]);
270
            env->segs[R_CS].selector, env->eip, pc[0], pc[1]);
270 271
#endif
271 272

  
272 273
    data32 = 0;
......
413 414
    ts->vm86_saved_regs.esp = env->regs[R_ESP];
414 415
    ts->vm86_saved_regs.eflags = env->eflags;
415 416
    ts->vm86_saved_regs.eip  = env->eip;
416
    ts->vm86_saved_regs.cs = env->segs[R_CS];
417
    ts->vm86_saved_regs.ss = env->segs[R_SS];
418
    ts->vm86_saved_regs.ds = env->segs[R_DS];
419
    ts->vm86_saved_regs.es = env->segs[R_ES];
420
    ts->vm86_saved_regs.fs = env->segs[R_FS];
421
    ts->vm86_saved_regs.gs = env->segs[R_GS];
417
    ts->vm86_saved_regs.cs = env->segs[R_CS].selector;
418
    ts->vm86_saved_regs.ss = env->segs[R_SS].selector;
419
    ts->vm86_saved_regs.ds = env->segs[R_DS].selector;
420
    ts->vm86_saved_regs.es = env->segs[R_ES].selector;
421
    ts->vm86_saved_regs.fs = env->segs[R_FS].selector;
422
    ts->vm86_saved_regs.gs = env->segs[R_GS].selector;
422 423

  
423 424
    /* build vm86 CPU state */
424 425
    ts->v86flags = tswap32(target_v86->regs.eflags);
......
466 467
           target_v86->vm86plus.vm86dbg_intxxtab, 32);
467 468
    
468 469
#ifdef DEBUG_VM86
469
    fprintf(logfile, "do_vm86: cs:ip=%04x:%04x\n", env->segs[R_CS], env->eip);
470
    fprintf(logfile, "do_vm86: cs:ip=%04x:%04x\n", 
471
            env->segs[R_CS].selector, env->eip);
470 472
#endif
471 473
    /* now the virtual CPU is ready for vm86 execution ! */
472 474
 out:

Also available in: Unified diff