mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 07:29:02 -05:00 
			
		
		
		
	Implement MapPhysicalMemory/UnmapPhysicalMemory
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.
This commit is contained in:
		| @@ -94,6 +94,10 @@ u64 ProgramMetadata::GetFilesystemPermissions() const { | ||||
|     return aci_file_access.permissions; | ||||
| } | ||||
|  | ||||
| u32 ProgramMetadata::GetSystemResourceSize() const { | ||||
|     return npdm_header.system_resource_size; | ||||
| } | ||||
|  | ||||
| const ProgramMetadata::KernelCapabilityDescriptors& ProgramMetadata::GetKernelCapabilities() const { | ||||
|     return aci_kernel_capabilities; | ||||
| } | ||||
|   | ||||
| @@ -58,6 +58,7 @@ public: | ||||
|     u32 GetMainThreadStackSize() const; | ||||
|     u64 GetTitleID() const; | ||||
|     u64 GetFilesystemPermissions() const; | ||||
|     u32 GetSystemResourceSize() const; | ||||
|     const KernelCapabilityDescriptors& GetKernelCapabilities() const; | ||||
|  | ||||
|     void Print() const; | ||||
| @@ -76,7 +77,8 @@ private: | ||||
|         u8 reserved_3; | ||||
|         u8 main_thread_priority; | ||||
|         u8 main_thread_cpu; | ||||
|         std::array<u8, 8> reserved_4; | ||||
|         std::array<u8, 4> reserved_4; | ||||
|         u32_le system_resource_size; | ||||
|         u32_le process_category; | ||||
|         u32_le main_stack_size; | ||||
|         std::array<u8, 0x10> application_name; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michael Scire
					Michael Scire