about summary refs log tree commit diff stats
path: root/src
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
parent8cd3ba8c9e4840541370905b1306ad57e946e288 (diff)
downloadbox64-fb955a39752a82c219fa401415892bd4facb5845.tar.gz
box64-fb955a39752a82c219fa401415892bd4facb5845.zip
Decoupled alternate functions from bridge (#2500)
Diffstat (limited to 'src')
-rw-r--r--src/box64context.c1
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c1
-rw-r--r--src/dynarec/dynablock.c2
-rw-r--r--src/dynarec/dynarec.c1
-rw-r--r--src/dynarec/la64/dynarec_la64_00.c1
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00_3.c1
-rw-r--r--src/elfs/elfloader.c1
-rw-r--r--src/elfs/elfloader32.c1
-rw-r--r--src/emu/x64run.c2
-rw-r--r--src/emu/x64run64.c2
-rw-r--r--src/emu/x64run66.c2
-rw-r--r--src/emu/x64run67.c2
-rw-r--r--src/include/alternate.h10
-rw-r--r--src/include/bridge.h5
-rw-r--r--src/mallochook.c1
-rw-r--r--src/tools/alternate.c47
-rw-r--r--src/tools/bridge.c46
-rw-r--r--src/tools/gtkclass.c1
18 files changed, 72 insertions, 55 deletions
diff --git a/src/box64context.c b/src/box64context.c
index 2235fd57..74e86c83 100644
--- a/src/box64context.c
+++ b/src/box64context.c
@@ -15,6 +15,7 @@
 #include "threads.h"
 #include "x64trace.h"
 #include "bridge.h"
+#include "alternate.h"
 #include "librarian.h"
 #include "library.h"
 #include "wrapper.h"
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index 5abb40cb..0b828704 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -17,6 +17,7 @@
 #include "x64trace.h"
 #include "dynarec_native.h"
 #include "custommem.h"
+#include "alternate.h"
 
 #include "arm64_printer.h"
 #include "dynarec_arm64_private.h"
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c
index 3e7707a6..28f726f1 100644
--- a/src/dynarec/dynablock.c
+++ b/src/dynarec/dynablock.c
@@ -16,8 +16,8 @@
 #include "dynablock_private.h"
 #include "dynarec_private.h"
 #include "elfloader.h"
-#include "bridge.h"
 #include "signals.h"
+#include "alternate.h"
 
 #include "dynarec_native.h"
 #include "dynarec_arch.h"
diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c
index cf55eee1..8c246f70 100644
--- a/src/dynarec/dynarec.c
+++ b/src/dynarec/dynarec.c
@@ -18,6 +18,7 @@
 #include "dynablock.h"
 #include "dynablock_private.h"
 #include "bridge.h"
+#include "alternate.h"
 #include "dynarec_next.h"
 #include "custommem.h"
 #include "x64test.h"
diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c
index ee25fb7e..b44b3e75 100644
--- a/src/dynarec/la64/dynarec_la64_00.c
+++ b/src/dynarec/la64/dynarec_la64_00.c
@@ -18,6 +18,7 @@
 #include "x64trace.h"
 #include "dynarec_native.h"
 #include "custommem.h"
+#include "alternate.h"
 
 #include "la64_printer.h"
 #include "dynarec_la64_private.h"
diff --git a/src/dynarec/rv64/dynarec_rv64_00_3.c b/src/dynarec/rv64/dynarec_rv64_00_3.c
index 9a01d71b..2dfa119e 100644
--- a/src/dynarec/rv64/dynarec_rv64_00_3.c
+++ b/src/dynarec/rv64/dynarec_rv64_00_3.c
@@ -18,6 +18,7 @@
 #include "x64trace.h"
 #include "dynarec_native.h"
 #include "custommem.h"
+#include "alternate.h"
 
 #include "rv64_printer.h"
 #include "dynarec_rv64_private.h"
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 6001b226..4302f275 100644
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -23,6 +23,7 @@
 #include "elfloader_private.h"
 #include "librarian.h"
 #include "bridge.h"
+#include "alternate.h"
 #include "wrapper.h"
 #include "box64context.h"
 #include "library.h"
diff --git a/src/elfs/elfloader32.c b/src/elfs/elfloader32.c
index 42478d8e..5b94912c 100644
--- a/src/elfs/elfloader32.c
+++ b/src/elfs/elfloader32.c
@@ -22,6 +22,7 @@
 #include "elfloader_private.h"
 #include "librarian.h"
 #include "bridge.h"
+#include "alternate.h"
 #include "wrapper.h"
 #include "box64context.h"
 #include "library.h"
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 59b3a9ea..7694ec13 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -19,7 +19,7 @@
 #include "x64trace.h"
 #include "x87emu_private.h"
 #include "box64context.h"
-#include "bridge.h"
+#include "alternate.h"
 #include "signals.h"
 #ifdef DYNAREC
 #include "../dynarec/native_lock.h"
diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c
index d70d7c75..79ad60ae 100644
--- a/src/emu/x64run64.c
+++ b/src/emu/x64run64.c
@@ -18,7 +18,7 @@
 #include "x64trace.h"

 #include "x87emu_private.h"

 #include "box64context.h"

-#include "bridge.h"

+#include "alternate.h"

 #include "signals.h"

 

 #include "modrm.h"

diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c
index 5a1b377f..b196758f 100644
--- a/src/emu/x64run66.c
+++ b/src/emu/x64run66.c
@@ -18,7 +18,7 @@
 #include "x64trace.h"

 #include "x87emu_private.h"

 #include "box64context.h"

-#include "bridge.h"

+#include "alternate.h"

 #ifdef DYNAREC

 #include "../dynarec/native_lock.h"

 #endif

diff --git a/src/emu/x64run67.c b/src/emu/x64run67.c
index c64bf630..6de9c6af 100644
--- a/src/emu/x64run67.c
+++ b/src/emu/x64run67.c
@@ -18,7 +18,7 @@
 #include "x64trace.h"

 #include "x87emu_private.h"

 #include "box64context.h"

-#include "bridge.h"

+#include "alternate.h"

 

 #include "modrm.h"

 

diff --git a/src/include/alternate.h b/src/include/alternate.h
new file mode 100644
index 00000000..e0f62b1a
--- /dev/null
+++ b/src/include/alternate.h
@@ -0,0 +1,10 @@
+#ifndef __ALTERNATE_H__
+#define __ALTERNATE_H__
+
+int hasAlternate(void* addr);
+void* getAlternate(void* addr);
+void addAlternate(void* addr, void* alt);
+void addCheckAlternate(void* addr, void* alt);
+void cleanAlternate(void);
+
+#endif //__ALTERNATE_H__
diff --git a/src/include/bridge.h b/src/include/bridge.h
index a4797bce..ed839d94 100644
--- a/src/include/bridge.h
+++ b/src/include/bridge.h
@@ -20,11 +20,6 @@ void* GetNativeOrAlt(void* fnc, void* alt);
 
 uintptr_t AddVSyscall(bridge_t* bridge, int num);
 
-int hasAlternate(void* addr);
-void* getAlternate(void* addr);
-void addAlternate(void* addr, void* alt);
-void addCheckAlternate(void* addr, void* alt);
-void cleanAlternate(void);
 const char* getBridgeName(void* addr);
 
 void init_bridge_helper(void);
diff --git a/src/mallochook.c b/src/mallochook.c
index 1e8b8361..cf4c6486 100644
--- a/src/mallochook.c
+++ b/src/mallochook.c
@@ -15,6 +15,7 @@
 #include "elfs/elfloader_private.h"
 #include "custommem.h"
 #include "symbols.h"
+#include "alternate.h"
 
 /*
     This file here is for handling overriding of malloc functions
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"