diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-17 16:21:38 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-17 16:21:38 +0100 |
| commit | 54be0c0dec8ad3c81caa0366f84c056717792cb2 (patch) | |
| tree | ec3f895739734aba1a0b73eb622634cf39c1e8c4 /src/tools/callback.c | |
| parent | 20df2789b542b5c280d71b4ae0fa797a24f6d130 (diff) | |
| download | box64-54be0c0dec8ad3c81caa0366f84c056717792cb2.tar.gz box64-54be0c0dec8ad3c81caa0366f84c056717792cb2.zip | |
Saved defered flag status when processing signal / foreign function
Diffstat (limited to 'src/tools/callback.c')
| -rw-r--r-- | src/tools/callback.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/tools/callback.c b/src/tools/callback.c index 162c801f..341a554d 100644 --- a/src/tools/callback.c +++ b/src/tools/callback.c @@ -164,6 +164,13 @@ uint64_t RunSafeFunction(uintptr_t fnc, int nargs, ...) Push64(emu, R_R10); Push64(emu, R_R11); Push64(emu, R_RAX); + deferred_flags_t old_df = emu->df; + multiuint_t old_op1 = emu->op1; + multiuint_t old_op2 = emu->op2; + multiuint_t old_res = emu->res; + multiuint_t old_op1_sav= emu->op1_sav; + multiuint_t old_res_sav= emu->res_sav; + deferred_flags_t old_df_sav= emu->df_sav; R_RSP -= stackn*sizeof(void*); // need to push in reverse order @@ -200,7 +207,14 @@ uint64_t RunSafeFunction(uintptr_t fnc, int nargs, ...) R_RSP = old_rbp; // mov rsp, rbp R_RBP = Pop64(emu); // pop rbp - + + emu->df = old_df; + emu->op1 = old_op1; + emu->op2 = old_op2; + emu->res = old_res; + emu->op1_sav = old_op1_sav; + emu->res_sav = old_res_sav; + emu->df_sav = old_df_sav; return ret; } |