diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-06-13 13:44:05 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-06-13 13:44:05 +0200 |
| commit | 2d740c91d23f8d9d317c0bfad38abbf74fc41f7d (patch) | |
| tree | 9965054eed1e95c4e40171f484cd2b57e43e9951 /src/dynarec | |
| parent | 926a59803d53c4e7d8ba3266c7b8ffd4aef3465d (diff) | |
| download | box64-2d740c91d23f8d9d317c0bfad38abbf74fc41f7d.tar.gz box64-2d740c91d23f8d9d317c0bfad38abbf74fc41f7d.zip | |
[DYNACACHE] More preparation work for internal relocations
Diffstat (limited to 'src/dynarec')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 4 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_helper.c | 3 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index c78e4f74..443d497d 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -2602,7 +2602,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin x87_purgecache(dyn, ninst, 0, x3, x1, x4); if ((BOX64ENV(log)<2 && !BOX64ENV(rolling_log) && !BOX64ENV(dynarec_test)) && tmp) { //GETIP(ip+3+8+8); // read the 0xCC - call_n(dyn, ninst, *(void**)(addr+8), tmp); + call_n(dyn, ninst, (void*)(addr+8), tmp); addr+=8+8; } else { GETIP(ip+1); // read the 0xCC @@ -3395,7 +3395,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin x87_purgecache(dyn, ninst, 0, x3, x1, x4); if ((BOX64ENV(log)<2 && !BOX64ENV(rolling_log)) && dyn->insts[ninst].natcall && tmp) { //GETIP(ip+3+8+8); // read the 0xCC - call_n(dyn, ninst, *(void**)(dyn->insts[ninst].natcall+2+8), tmp); + call_n(dyn, ninst, (void*)(dyn->insts[ninst].natcall+2+8), tmp); SMWRITE2(); POP1(xRIP); // pop the return address dyn->last_ip = addr; diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c index 12274e44..092452d2 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.c +++ b/src/dynarec/arm64/dynarec_arm64_helper.c @@ -879,7 +879,8 @@ void call_n(dynarec_arm_t* dyn, int ninst, void* fnc, int w) MOVx_REG(x4, xR8); MOVx_REG(x5, xR9); // native call - TABLE64(16, (uintptr_t)fnc); // using x16 as scratch regs for call address + // fnc is indirect, to help with relocation (but PltResolver might be an issue here) + TABLE64(16, *(uintptr_t*)fnc); // using x16 as scratch regs for call address BLR(16); // put return value in x64 regs if(w>0) { |