about summary refs log tree commit diff stats
path: root/src/tools
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-04-04 01:12:33 +0800
committerGitHub <noreply@github.com>2025-04-03 19:12:33 +0200
commitfb955a39752a82c219fa401415892bd4facb5845 (patch)
treea12a9e55015cf900cbbc321f7fb7d4f6e278a0e4 /src/tools
parent8cd3ba8c9e4840541370905b1306ad57e946e288 (diff)
downloadbox64-fb955a39752a82c219fa401415892bd4facb5845.tar.gz
box64-fb955a39752a82c219fa401415892bd4facb5845.zip
Decoupled alternate functions from bridge (#2500)
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/alternate.c47
-rw-r--r--src/tools/bridge.c46
-rw-r--r--src/tools/gtkclass.c1
3 files changed, 49 insertions, 45 deletions
diff --git a/src/tools/alternate.c b/src/tools/alternate.c
new file mode 100644
index 00000000..223a9eb5
--- /dev/null
+++ b/src/tools/alternate.c
@@ -0,0 +1,47 @@
+#include "alternate.h"
+#include "custommem.h"
+#include "khash.h"
+
+// Alternate address handling
+KHASH_MAP_INIT_INT64(alternate, void*)
+static kh_alternate_t *my_alternates = NULL;
+
+int hasAlternate(void* addr) {
+    if(!my_alternates)
+        return 0;
+    khint_t k = kh_get(alternate, my_alternates, (uintptr_t)addr);
+    if(k==kh_end(my_alternates))
+        return 0;
+    return 1;
+}
+
+void* getAlternate(void* addr) {
+    if(!my_alternates)
+        return addr;
+    khint_t k = kh_get(alternate, my_alternates, (uintptr_t)addr);
+    if(k!=kh_end(my_alternates))
+        return kh_value(my_alternates, k);
+    return addr;
+}
+void addAlternate(void* addr, void* alt) {
+    if(!my_alternates) {
+        my_alternates = kh_init(alternate);
+    }
+    int ret;
+    khint_t k = kh_put(alternate, my_alternates, (uintptr_t)addr, &ret);
+    if(!ret)    // already there
+        return;
+    kh_value(my_alternates, k) = alt;
+}
+
+void addCheckAlternate(void* addr, void* alt) {
+    if(!hasAlternate(addr))
+        addAlternate(addr, alt);
+}
+
+void cleanAlternate() {
+    if(my_alternates) {
+        kh_destroy(alternate, my_alternates);
+        my_alternates = NULL;
+    }
+}
diff --git a/src/tools/bridge.c b/src/tools/bridge.c
index 0c7ed4d7..1ad0c3e5 100644
--- a/src/tools/bridge.c
+++ b/src/tools/bridge.c
@@ -17,6 +17,7 @@
 #include "x64emu.h"
 #include "box64context.h"
 #include "elfloader.h"
+#include "alternate.h"
 #ifdef DYNAREC
 #include "dynablock.h"
 #endif
@@ -248,51 +249,6 @@ const char* getBridgeName(void* addr)
     return NULL;
 }
 
-
-// Alternate address handling
-KHASH_MAP_INIT_INT64(alternate, void*)
-static kh_alternate_t *my_alternates = NULL;
-
-int hasAlternate(void* addr) {
-    if(!my_alternates)
-        return 0;
-    khint_t k = kh_get(alternate, my_alternates, (uintptr_t)addr);
-    if(k==kh_end(my_alternates))
-        return 0;
-    return 1;
-}
-
-void* getAlternate(void* addr) {
-    if(!my_alternates)
-        return addr;
-    khint_t k = kh_get(alternate, my_alternates, (uintptr_t)addr);
-    if(k!=kh_end(my_alternates))
-        return kh_value(my_alternates, k);
-    return addr;
-}
-void addAlternate(void* addr, void* alt) {
-    if(!my_alternates) {
-        my_alternates = kh_init(alternate);
-    }
-    int ret;
-    khint_t k = kh_put(alternate, my_alternates, (uintptr_t)addr, &ret);
-    if(!ret)    // already there
-        return;
-    kh_value(my_alternates, k) = alt;
-}
-
-void addCheckAlternate(void* addr, void* alt) {
-    if(!hasAlternate(addr))
-        addAlternate(addr, alt);
-}
-
-void cleanAlternate() {
-    if(my_alternates) {
-        kh_destroy(alternate, my_alternates);
-        my_alternates = NULL;
-    }
-}
-
 void init_bridge_helper()
 {
 }
diff --git a/src/tools/gtkclass.c b/src/tools/gtkclass.c
index 4a24de0b..55cfb99f 100644
--- a/src/tools/gtkclass.c
+++ b/src/tools/gtkclass.c
@@ -7,6 +7,7 @@
 #include "wrappedlibs.h"
 
 #include "bridge.h"
+#include "alternate.h"
 #include "debug.h"
 #include "callback.h"
 #include "librarian.h"