From 6d4183934128e58bcfe27d419a41a89ed073e0b7 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 27 Feb 2022 18:58:31 +0800 Subject: [DYNAREC] More work on multi-arch --- src/dynarec/dynarec_arch.h | 3 ++- src/dynarec/dynarec_native.c | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/dynarec/dynarec_arch.h b/src/dynarec/dynarec_arch.h index ba059a90..ba054697 100755 --- a/src/dynarec/dynarec_arch.h +++ b/src/dynarec/dynarec_arch.h @@ -6,6 +6,7 @@ #include "arm64/dynarec_arm64_functions.h" #define instruction_native_t instruction_arm64_t +#define dynarec_native_t dynarec_arm_t uintptr_t arm_pass0(dynarec_arm_t* dyn, uintptr_t addr); uintptr_t arm_pass1(dynarec_arm_t* dyn, uintptr_t addr); @@ -21,4 +22,4 @@ uintptr_t arm_pass3(dynarec_arm_t* dyn, uintptr_t addr); #error Unsupported platform #endif -#endif //__DYNAREC_ARCH__H_ \ No newline at end of file +#endif //__DYNAREC_ARCH__H_ diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index 2424e5ca..c2a451df 100755 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -57,7 +57,7 @@ void printf_x64_instruction(zydis_dec_t* dec, instruction_x64_t* inst, const cha } } -void add_next(dynarec_arm_t *dyn, uintptr_t addr) { +void add_next(dynarec_native_t *dyn, uintptr_t addr) { if(!box64_dynarec_bigblock) return; for(int i=0; inext_sz; ++i) @@ -69,7 +69,7 @@ void add_next(dynarec_arm_t *dyn, uintptr_t addr) { } dyn->next[dyn->next_sz++] = addr; } -uintptr_t get_closest_next(dynarec_arm_t *dyn, uintptr_t addr) { +uintptr_t get_closest_next(dynarec_native_t *dyn, uintptr_t addr) { // get closest, but no addresses befores uintptr_t best = 0; int i = 0; @@ -86,7 +86,7 @@ uintptr_t get_closest_next(dynarec_arm_t *dyn, uintptr_t addr) { return best; } #define PK(A) (*((uint8_t*)(addr+(A)))) -int is_nops(dynarec_arm_t *dyn, uintptr_t addr, int n) +int is_nops(dynarec_native_t *dyn, uintptr_t addr, int n) { if(!n) return 1; @@ -117,7 +117,7 @@ int is_nops(dynarec_arm_t *dyn, uintptr_t addr, int n) // return size of next instuciton, -1 is unknown // not all instrction are setup -int next_instruction(dynarec_arm_t *dyn, uintptr_t addr) +int next_instruction(dynarec_native_t *dyn, uintptr_t addr) { uint8_t opcode = PK(0); uint8_t nextop; @@ -220,7 +220,7 @@ int next_instruction(dynarec_arm_t *dyn, uintptr_t addr) } #undef PK -int is_instructions(dynarec_arm_t *dyn, uintptr_t addr, int n) +int is_instructions(dynarec_native_t *dyn, uintptr_t addr, int n) { int i = 0; while(i1)?"\e[01;36m":"", GetTID(), helper.native_size, helper.isize); printFunctionAddr(helper.start, " => "); dynarec_log(LOG_NONE, "%s\n", (box64_dynarec_dump>1)?"\e[m":""); } int oldtable64size = helper.table64size; - size_t oldarmsize = helper.native_size; + size_t oldnativesize = helper.native_size; helper.native_size = 0; helper.table64size = 0; // reset table64 (but not the cap) native_pass3(&helper, addr); - if((oldarmsize!=helper.native_size) || (oldtable64sizeblock = helper.sons_native[i]; son->x64_addr = (void*)helper.sons_x64[i]; son->x64_size = end-helper.sons_x64[i]; - if(!son->x64_size) {printf_log(LOG_NONE, "Warning, son with null x64 size! (@%p / ARM=%p)", son->x64_addr, son->block);} + if(!son->x64_size) {printf_log(LOG_NONE, "Warning, son with null x64 size! (@%p / Native=%p)", son->x64_addr, son->block);} son->father = block; son->size = sz + son->block - block->block; // update size count, for debugging //son->done = 1; -- cgit 1.4.1