mips: advance PC for SYSCALL instruction. this fixes issue #157

This commit is contained in:
Nguyen Anh Quynh
2015-09-28 10:58:43 +08:00
parent 0b971a4413
commit 2b0b4169bc
5 changed files with 13 additions and 1 deletions

View File

@@ -136,6 +136,9 @@ int cpu_exec(struct uc_struct *uc, CPUArchState *env) // qq
// point EIP to the next instruction after INT
env->eip = env->exception_next_eip;
#endif
#if defined(TARGET_MIPS) || defined(TARGET_MIPS64)
env->active_tc.PC = uc->next_pc;
#endif
#endif
}
}

View File

@@ -19348,6 +19348,7 @@ gen_intermediate_code_internal(MIPSCPU *cpu, TranslationBlock *tb,
switch (ctx.bstate) {
case BS_STOP:
gen_goto_tb(&ctx, 0, ctx.pc);
env->uc->next_pc = ctx.pc;
break;
case BS_NONE:
save_cpu_state(&ctx, 0);

View File

@@ -2586,8 +2586,13 @@ int tcg_gen_code(TCGContext *s, tcg_insn_unit *gen_code_buf) // qq
}
#endif
//printf("====== before gen code\n");
//tcg_dump_ops(s);
tcg_gen_code_common(s, gen_code_buf, -1); // qq
//printf("====== after gen code\n");
//tcg_dump_ops(s);
/* flush instruction cache */
flush_icache_range((uintptr_t)s->code_buf, (uintptr_t)s->code_ptr);