about summary refs log tree commit diff stats
path: root/src/tools/env.c
diff options
context:
space:
mode:
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)