about summary refs log tree commit diff stats
path: root/src/wrapped
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-05-07 22:50:37 +0800
committerGitHub <noreply@github.com>2025-05-07 16:50:37 +0200
commit5d14413b89d7bb78023307fc59d2d9da182554a4 (patch)
tree3822c9835ff42632837da6dde40a292e7048247f /src/wrapped
parentec549690944d2768b811340bc999abdfbc60ca2c (diff)
downloadbox64-5d14413b89d7bb78023307fc59d2d9da182554a4.tar.gz
box64-5d14413b89d7bb78023307fc59d2d9da182554a4.zip
[DYNAREC] Use PE volatile metadata in dynarec (#2610)
Diffstat (limited to 'src/wrapped')
-rw-r--r--src/wrapped/wrappedlibc.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 4815f57d..fbfc9b21 100644
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -3033,14 +3033,16 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int f
     #endif
     if(ret!=MAP_FAILED) {
         if(emu && !(flags&MAP_ANONYMOUS) && (fd>0)) {
-            char filename[4096];
-            char buf[128];
-            sprintf(buf, "/proc/self/fd/%d", fd);
-            ssize_t r = readlink(buf, filename, sizeof(filename) - 1);
-            if (r != -1) filename[r] = 0;
-
-            DetectUnityPlayer(filename);
-            // ParseVolatileMetadata(filename, addr);
+            if ((box64_wine && BOX64ENV(dynarec_volatile_metadata)) || BOX64ENV(unityplayer)) {
+                char filename[4096];
+                char buf[128];
+                sprintf(buf, "/proc/self/fd/%d", fd);
+                ssize_t r = readlink(buf, filename, sizeof(filename) - 1);
+                if (r != -1) filename[r] = 0;
+
+                if (BOX64ENV(unityplayer)) DetectUnityPlayer(filename);
+                if (box64_wine && BOX64ENV(dynarec_volatile_metadata)) ParseVolatileMetadata(filename, addr);
+            }
             // the last_mmap will allow mmap created by wine, even those that have hole, to be fully tracked as one single mmap
             if((ret>=last_mmap_addr[0]) && ret+length<(last_mmap_addr[0]+last_mmap_len[0]))
                 RecordEnvMappings((uintptr_t)last_mmap_addr[0], last_mmap_len[0], fd);