diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-03-22 15:23:14 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-03-22 15:23:14 +0000 |
commit | dab2ed991a49678fbd4d45ff1b328340a77057df (patch) | |
tree | 0c587c5ef62faa0c3bf9b39a7ce9281c0a63e2b2 /linux-user/main.c | |
parent | e591824733ec698d92d1f09c2ffb9b86b799d6da (diff) | |
download | qemu-dab2ed991a49678fbd4d45ff1b328340a77057df.zip qemu-dab2ed991a49678fbd4d45ff1b328340a77057df.tar.gz qemu-dab2ed991a49678fbd4d45ff1b328340a77057df.tar.bz2 |
better 16 bit code support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@38 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'linux-user/main.c')
-rw-r--r-- | linux-user/main.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/linux-user/main.c b/linux-user/main.c index 45e81b2..3222629 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -179,7 +179,7 @@ int main(int argc, char **argv) env->regs[R_EDI] = regs->edi; env->regs[R_EBP] = regs->ebp; env->regs[R_ESP] = regs->esp; - env->pc = regs->eip; + env->eip = regs->eip; /* linux segment setup */ env->gdt.base = (void *)gdt_table; @@ -198,12 +198,12 @@ int main(int argc, char **argv) uint8_t *pc; err = cpu_x86_exec(env); + pc = env->seg_cache[R_CS].base + env->eip; switch(err) { case EXCP0D_GPF: - pc = (uint8_t *)env->pc; if (pc[0] == 0xcd && pc[1] == 0x80) { /* syscall */ - env->pc += 2; + env->eip += 2; env->regs[R_EAX] = do_syscall(env, env->regs[R_EAX], env->regs[R_EBX], @@ -219,7 +219,7 @@ int main(int argc, char **argv) default: trap_error: fprintf(stderr, "0x%08lx: Unknown exception %d, aborting\n", - (long)env->pc, err); + (long)pc, err); abort(); } } |