about summary refs log tree commit diff stats
path: root/src/libtools/signals.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-06-23 14:52:28 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-06-23 14:52:28 +0200
commit0d02532dab06c20a5ea4bed90c2a7f9fbb7eb96d (patch)
treea6ed742a77379545a6054f803b9c222beb163280 /src/libtools/signals.c
parent8ae0b6e1813caae72c66cf70150ce6a55a8a10d4 (diff)
downloadbox64-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.c26
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);