void helper_enter_level(int level, int data32);
void helper_sysenter(void);
void helper_sysexit(void);
-void helper_syscall(void);
+void helper_syscall(int next_eip_addend);
void helper_sysret(int dflag);
void helper_rdtsc(void);
void helper_rdmsr(void);
env->eflags &= ~(TF_MASK | VM_MASK | RF_MASK | NT_MASK);
}
-void helper_syscall(void)
+void helper_syscall(int next_eip_addend)
{
int selector;
}
selector = (env->star >> 32) & 0xffff;
if (env->hflags & HF_LMA_MASK) {
- ECX = env->eip;
+ ECX = env->eip + next_eip_addend;
env->regs[11] = compute_eflags();
cpu_x86_set_cpl(env, 0);
else
env->eip = env->cstar;
} else {
- ECX = (uint32_t)env->eip;
+ ECX = (uint32_t)(env->eip + next_eip_addend);
cpu_x86_set_cpl(env, 0);
cpu_x86_load_seg_cache(env, R_CS, selector & 0xfffc,
fprintf(logfile, " EAX=" TARGET_FMT_lx, EAX);
}
fprintf(logfile, "\n");
- cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP);
#if 0
+ cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP);
{
int i;
uint8_t *ptr;