diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-06-23 14:52:28 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-06-23 14:52:28 +0200 |
| commit | 0d02532dab06c20a5ea4bed90c2a7f9fbb7eb96d (patch) | |
| tree | a6ed742a77379545a6054f803b9c222beb163280 /src/libtools/signals.c | |
| parent | 8ae0b6e1813caae72c66cf70150ce6a55a8a10d4 (diff) | |
| download | box64-0d02532dab06c20a5ea4bed90c2a7f9fbb7eb96d.tar.gz box64-0d02532dab06c20a5ea4bed90c2a7f9fbb7eb96d.zip | |
[DYNACACHE] Added support for unaligned addresses
Diffstat (limited to 'src/libtools/signals.c')
| -rw-r--r-- | src/libtools/signals.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/libtools/signals.c b/src/libtools/signals.c index 1c8247ec..5d932349 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -426,6 +426,32 @@ int is_addr_unaligned(uintptr_t addr) } #ifdef DYNAREC +int nUnalignedRange(uintptr_t start, size_t size) +{ + if(!unaligned) + return 0; + int n = 0; + uintptr_t end = start + size -1; + uintptr_t addr; + kh_foreach_key(unaligned, addr, + if(addr>=start && addr<=end) + ++n; + ); + return n; +} +void getUnalignedRange(uintptr_t start, size_t size, uintptr_t addrs[]) +{ + if(!unaligned) + return; + int n = 0; + uintptr_t end = start + size -1; + uintptr_t addr; + kh_foreach_key(unaligned, addr, + if(addr>=start && addr<=end) + addrs[n++] = addr; + ); +} + int mark_db_unaligned(dynablock_t* db, uintptr_t x64pc) { add_unaligned_address(x64pc); |