Clear state when exiting from uc_emu_start

This may cause unexpected result when we are in a nested uc_emu_start
This commit is contained in:
2022-02-25 22:23:44 +01:00
parent defb0135fe
commit caf2fe1ddb
2 changed files with 10 additions and 1 deletions

View File

@@ -128,6 +128,9 @@ static int tcg_cpu_exec(struct uc_struct *uc)
} }
} }
uc->exit_request = 0; uc->exit_request = 0;
uc->cpu->exit_request = 0;
uc->cpu->icount_decr_ptr->u16.high = 0;
uc->cpu->tcg_exit_req = 0;
return finish; return finish;
} }

8
uc.c
View File

@@ -709,6 +709,8 @@ UNICORN_EXPORT
uc_err uc_emu_start(uc_engine *uc, uint64_t begin, uint64_t until, uc_err uc_emu_start(uc_engine *uc, uint64_t begin, uint64_t until,
uint64_t timeout, size_t count) uint64_t timeout, size_t count)
{ {
uc_err err;
// reset the counter // reset the counter
uc->emu_counter = 0; uc->emu_counter = 0;
uc->invalid_error = UC_ERR_OK; uc->invalid_error = UC_ERR_OK;
@@ -852,7 +854,11 @@ uc_err uc_emu_start(uc_engine *uc, uint64_t begin, uint64_t until,
qemu_thread_join(&uc->timer); qemu_thread_join(&uc->timer);
} }
return uc->invalid_error; // We may be in a nested uc_emu_start and thus clear invalid_error
// once we are done.
err = uc->invalid_error;
uc->invalid_error = 0;
return err;
} }
UNICORN_EXPORT UNICORN_EXPORT