mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-11-19 15:04:52 +00:00
This implements svcMapPhysicalMemory/svcUnmapPhysicalMemory for Yuzu, which can be used to map memory at a desired address by games since 3.0.0. It also properly parses SystemResourceSize from NPDM, and makes information available via svcGetInfo. This is needed for games like Super Smash Bros. and Diablo 3 -- this PR's implementation does not run into the "ASCII reads" issue mentioned in the comments of #2626, which was caused by the following bugs in Yuzu's memory management that this PR also addresses: * Yuzu's memory coalescing does not properly merge blocks. This results in a polluted address space/svcQueryMemory results that would be impossible to replicate on hardware, which can lead to game code making the wrong assumptions about memory layout. * This implements better merging for AllocatedMemoryBlocks. * Yuzu's implementation of svcMirrorMemory unprotected the entire virtual memory range containing the range being mirrored. This could lead to games attempting to map data at that unprotected range/attempting to access that range after yuzu improperly unmapped it. * This PR fixes it by simply calling ReprotectRange instead of Reprotect. |
||
|---|---|---|
| .. | ||
| arm | ||
| crypto | ||
| file_sys | ||
| frontend | ||
| gdbstub | ||
| hle | ||
| loader | ||
| tools | ||
| CMakeLists.txt | ||
| constants.cpp | ||
| constants.h | ||
| core.cpp | ||
| core.h | ||
| core_cpu.cpp | ||
| core_cpu.h | ||
| core_timing.cpp | ||
| core_timing.h | ||
| core_timing_util.cpp | ||
| core_timing_util.h | ||
| cpu_core_manager.cpp | ||
| cpu_core_manager.h | ||
| memory.cpp | ||
| memory.h | ||
| memory_setup.h | ||
| perf_stats.cpp | ||
| perf_stats.h | ||
| reporter.cpp | ||
| reporter.h | ||
| settings.cpp | ||
| settings.h | ||
| telemetry_session.cpp | ||
| telemetry_session.h | ||