Commit 93eac243d523b473dd33f6fc84ffa15ed2f018d9
1 parent
a7e6f8ba
32 bit syscall fix (Juergen Keil)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2189 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
5 additions
and
1 deletions
kqemu.c
... | ... | @@ -470,9 +470,13 @@ static int do_syscall(CPUState *env, |
470 | 470 | selector = (env->star >> 32) & 0xffff; |
471 | 471 | #ifdef __x86_64__ |
472 | 472 | if (env->hflags & HF_LMA_MASK) { |
473 | + int code64; | |
474 | + | |
473 | 475 | env->regs[R_ECX] = kenv->next_eip; |
474 | 476 | env->regs[11] = env->eflags; |
475 | 477 | |
478 | + code64 = env->hflags & HF_CS64_MASK; | |
479 | + | |
476 | 480 | cpu_x86_set_cpl(env, 0); |
477 | 481 | cpu_x86_load_seg_cache(env, R_CS, selector & 0xfffc, |
478 | 482 | 0, 0xffffffff, |
... | ... | @@ -485,7 +489,7 @@ static int do_syscall(CPUState *env, |
485 | 489 | DESC_S_MASK | |
486 | 490 | DESC_W_MASK | DESC_A_MASK); |
487 | 491 | env->eflags &= ~env->fmask; |
488 | - if (env->hflags & HF_CS64_MASK) | |
492 | + if (code64) | |
489 | 493 | env->eip = env->lstar; |
490 | 494 | else |
491 | 495 | env->eip = env->cstar; | ... | ... |