From 219ac40a7dffe17a3417dd94910bedf6ea06fe45 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 5 Mar 2023 09:59:26 +0100 Subject: [DYNAREC] Fixed (again) and improved new jmptable memory manager --- src/custommem.c | 24 +++++++++++++----------- src/include/custommem.h | 6 +++--- 2 files changed, 16 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/custommem.c b/src/custommem.c index 6cb011c1..633e15fe 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -581,21 +581,23 @@ static uintptr_t getDBSize(uintptr_t addr, size_t maxsize, dynablock_t** db) uintptr_t idx0 = addr&JMPTABLE_MASK0; *db = *(dynablock_t**)(box64_jmptbl3[idx3][idx2][idx1][idx0]- sizeof(void*)); if(*db) - return 1; + return addr+1; if(box64_jmptbl3[idx3] == box64_jmptbldefault2) - return (addr|((1LL<>JMPTABL_START2)+1)<JMPTABLE_MASK0+1) - maxsize = JMPTABLE_MASK0+1; - while(idx0>JMPTABL_START1)+1)<JMPTABLE_MASK0) + maxsize = JMPTABLE_MASK0; + while(block[idx0]==(uintptr_t)native_next) { ++idx0; - if(idx0maxsize) + return (addr&~JMPTABLE_MASK0)+idx0; + } + *db = *(dynablock_t**)(block[idx0]- sizeof(void*)); + return (addr&~JMPTABLE_MASK0)+idx0+1; } // each dynmap is 64k of size @@ -613,7 +615,7 @@ void cleanDBFromAddressRange(uintptr_t addr, size_t size, int destroy) dynablock_t* db = NULL; uintptr_t end = addr+size; while (start_addr