diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-05-28 14:19:46 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-28 08:19:46 +0200 |
| commit | c835881a7750f00bebc0272a9fdd65563992f660 (patch) | |
| tree | 898deda887bcab66f28aaa3dedbaf860cc7de902 /src | |
| parent | a9f4e72c4b4f15289c8eef0b9be0359e2acf50dc (diff) | |
| download | box64-c835881a7750f00bebc0272a9fdd65563992f660.tar.gz box64-c835881a7750f00bebc0272a9fdd65563992f660.zip | |
[DYNAREC] Fixed expected return address in bridged native call (#2677)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 2 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_00_3.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 3ab1e5c4..856b107b 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -2607,7 +2607,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { GETIP(ip+1); // read the 0xCC STORE_XEMU_CALL(xRIP); - ADDx_U12(x3, xRIP, 8+8); // expected return address + ADDx_U12(x3, xRIP, 8+8+2); // expected return address ADDx_U12(x1, xEmu, (uint32_t)offsetof(x64emu_t, ip)); // setup addr as &emu->ip CALL_(EmuInt3, -1, x3); SMWRITE2(); diff --git a/src/dynarec/rv64/dynarec_rv64_00_3.c b/src/dynarec/rv64/dynarec_rv64_00_3.c index 868e55bb..9287f442 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_3.c +++ b/src/dynarec/rv64/dynarec_rv64_00_3.c @@ -465,7 +465,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } else { GETIP(ip + 1, x7); // read the 0xCC STORE_XEMU_CALL(x3); - ADDI(x3, xRIP, 8 + 8); // expected return address + ADDI(x3, xRIP, 8 + 8 + 2); // expected return address ADDI(x1, xEmu, (uint32_t)offsetof(x64emu_t, ip)); // setup addr as &emu->ip CALL_(EmuInt3, -1, x3, x1, 0); LOAD_XEMU_CALL(); |