diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-06-10 10:41:04 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-06-10 10:41:04 +0200 |
| commit | 64080cea819ab75585570679c5fa91698ee7c218 (patch) | |
| tree | 7cd57cb098fc80eb4a32a938ccaf4ef270411dbe /src | |
| parent | ab5c42f0dcc90d1452103bd2dd763a095c8f0144 (diff) | |
| download | box64-64080cea819ab75585570679c5fa91698ee7c218.tar.gz box64-64080cea819ab75585570679c5fa91698ee7c218.zip | |
[DYNAREC] Improved mmap'd file tracking
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/env.c | 12 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibc.c | 2 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/tools/env.c b/src/tools/env.c index 2a8c40a7..9d84fd5c 100644 --- a/src/tools/env.c +++ b/src/tools/env.c @@ -698,8 +698,16 @@ void RecordEnvMappings(uintptr_t addr, size_t length, int fd) mapping = kh_value(mapping_entries, k); if(mapping && mapping->start>addr) { - dynarec_log(LOG_INFO, "Mapping %s (%s) adjusted start: %p from %p\n", fullname, lowercase_filename, (void*)addr, (void*)(mapping->start)); - mapping->start = addr; + dynarec_log(LOG_INFO, "Ignoring Mapping %s (%s) adjusted start: %p from %p\n", fullname, lowercase_filename, (void*)addr, (void*)(mapping->start)); + box_free(lowercase_filename); + return; + } + if(BOX64ENV(dynarec_log)) { + uintptr_t end; uintptr_t val; + if(rb_get_end_64(envmap, addr, &val, &end)) + if(end<addr+length) { + dynarec_log(LOG_INFO, "Enlarging Mapping %s (%s) %p-%p from %p\n", fullname, lowercase_filename, (void*)(mapping->start), (void*)(addr+length), (void*)end); + } } rb_set_64(envmap, addr, addr + length, (uint64_t)mapping); if(mapping->env) { diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index a0e8361f..515a9b51 100644 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -3056,7 +3056,7 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int f } } // hack to capture full size of the mmap done by wine - if(emu && (fd==-1) && (flags==(MAP_PRIVATE|MAP_ANON))) { + if(emu && (fd==-1) && (flags&(MAP_PRIVATE|MAP_ANON))==(MAP_PRIVATE|MAP_ANON)) { last_mmap_addr[last_mmap_idx] = ret; last_mmap_len[last_mmap_idx] = length; } else { |