diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-04-04 01:12:33 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-03 19:12:33 +0200 |
| commit | fb955a39752a82c219fa401415892bd4facb5845 (patch) | |
| tree | a12a9e55015cf900cbbc321f7fb7d4f6e278a0e4 /src | |
| parent | 8cd3ba8c9e4840541370905b1306ad57e946e288 (diff) | |
| download | box64-fb955a39752a82c219fa401415892bd4facb5845.tar.gz box64-fb955a39752a82c219fa401415892bd4facb5845.zip | |
Decoupled alternate functions from bridge (#2500)
Diffstat (limited to 'src')
| -rw-r--r-- | src/box64context.c | 1 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 1 | ||||
| -rw-r--r-- | src/dynarec/dynablock.c | 2 | ||||
| -rw-r--r-- | src/dynarec/dynarec.c | 1 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_00.c | 1 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_00_3.c | 1 | ||||
| -rw-r--r-- | src/elfs/elfloader.c | 1 | ||||
| -rw-r--r-- | src/elfs/elfloader32.c | 1 | ||||
| -rw-r--r-- | src/emu/x64run.c | 2 | ||||
| -rw-r--r-- | src/emu/x64run64.c | 2 | ||||
| -rw-r--r-- | src/emu/x64run66.c | 2 | ||||
| -rw-r--r-- | src/emu/x64run67.c | 2 | ||||
| -rw-r--r-- | src/include/alternate.h | 10 | ||||
| -rw-r--r-- | src/include/bridge.h | 5 | ||||
| -rw-r--r-- | src/mallochook.c | 1 | ||||
| -rw-r--r-- | src/tools/alternate.c | 47 | ||||
| -rw-r--r-- | src/tools/bridge.c | 46 | ||||
| -rw-r--r-- | src/tools/gtkclass.c | 1 |
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" |