about summary refs log tree commit diff stats
path: root/src/tools/env.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-06-30 16:36:38 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-06-30 16:36:38 +0200
commit2278438462e6f00e10ce9ace248505a8af0808d1 (patch)
tree6c6f380282c110fced76d307d602faa3d25467b4 /src/tools/env.c
parenta942cef1eed4fba6447303e9f475940a0a4c1ed5 (diff)
downloadbox64-2278438462e6f00e10ce9ace248505a8af0808d1.tar.gz
box64-2278438462e6f00e10ce9ace248505a8af0808d1.zip
[DYNAREC] Refactor hotpage detection and dynarec_dirty 1 & 2. Also adjust some launcher/games flags
Diffstat (limited to 'src/tools/env.c')
-rw-r--r--src/tools/env.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/tools/env.c b/src/tools/env.c
index 4ce600c9..1680fdfe 100644
--- a/src/tools/env.c
+++ b/src/tools/env.c
@@ -815,7 +815,7 @@ done:
 #else
 #error meh!
 #endif
-#define DYNAREC_VERSION SET_VERSION(0, 0, 2)
+#define DYNAREC_VERSION SET_VERSION(0, 0, 3)
 
 typedef struct DynaCacheHeader_s {
     char sign[10];  //"DynaCache\0"
@@ -928,6 +928,11 @@ void SerializeMmaplist(mapping_t* mapping)
         return;
     if((!mapping->env || !mapping->env->is_dynacache_overridden) && box64env.dynacache!=1)
         return;
+    // don't do serialize for program that needs dirty=1
+    if(mapping->env && mapping->env->is_dynarec_dirty_overridden && mapping->env->dynarec_dirty)
+        return;
+    if((!mapping->env || !mapping->env->is_dynarec_dirty_overridden) && box64env.dynarec_dirty)
+        return;
     const char* folder = GetDynacacheFolder(mapping);
     if(!folder) return; // no folder, no serialize...
     const char* name = GetMmaplistName(mapping);
@@ -1395,7 +1400,12 @@ int IsAddrNeedReloc(uintptr_t addr)
     uintptr_t start = env->nodynarec_start?env->nodynarec_start:box64env.nodynarec_start;
     if(end && addr>=start && addr<end)
         return 0;
-    #ifdef HAVE_TRACE
+     // don't do serialize for program that needs dirty=1 or 2 (maybe 1 is ok?)
+    if(env && env->is_dynarec_dirty_overridden && env->dynarec_dirty)
+        return 0;
+    if((!env || !env->is_dynarec_dirty_overridden) && box64env.dynarec_dirty)
+        return 0;
+   #ifdef HAVE_TRACE
     end = env->dynarec_test_end?env->dynarec_test_end:box64env.dynarec_test_end;
     start = env->dynarec_test_start?env->dynarec_test_start:box64env.dynarec_test_start;
     if(end && addr>=start && addr<end)