diff options
Diffstat (limited to 'src/Ryujinx.HLE/Loaders/Processes')
9 files changed, 75 insertions, 77 deletions
diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs index b619a713..040d1143 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs @@ -86,7 +86,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions bool enablePtc = device.System.EnablePtc && !modLoadResult.Modified; if (!enablePtc) { - Logger.Warning?.Print(LogClass.Ptc, $"Detected unsupported ExeFs modifications. PTC disabled."); + Logger.Warning?.Print(LogClass.Ptc, "Detected unsupported ExeFs modifications. PTC disabled."); } // We allow it for nx-hbloader because it can be used to launch homebrew. @@ -131,4 +131,4 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions return processResult; } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs index fb85329d..2b7e8473 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs @@ -1,10 +1,10 @@ using LibHac.Common; using LibHac.FsSystem; using LibHac.Loader; +using LibHac.Ncm; using LibHac.Ns; using Ryujinx.HLE.HOS; using Ryujinx.HLE.Loaders.Processes.Extensions; -using ApplicationId = LibHac.Ncm.ApplicationId; namespace Ryujinx.HLE.Loaders.Processes { @@ -13,8 +13,8 @@ namespace Ryujinx.HLE.Loaders.Processes public static ProcessResult Load(this LocalFileSystem exeFs, Switch device, string romFsPath = "") { MetaLoader metaLoader = exeFs.GetNpdm(); - var nacpData = new BlitStruct<ApplicationControlProperty>(1); - ulong programId = metaLoader.GetProgramId(); + var nacpData = new BlitStruct<ApplicationControlProperty>(1); + ulong programId = metaLoader.GetProgramId(); device.Configuration.VirtualFileSystem.ModLoader.CollectMods( new[] { programId }, @@ -37,4 +37,4 @@ namespace Ryujinx.HLE.Loaders.Processes return processResult; } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs index c639ee52..88f43759 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs @@ -58,4 +58,4 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions metaLoader.Load(npdmBuffer).ThrowIfFailure(); } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs index e11b81d7..4568b44d 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs @@ -20,7 +20,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions public static ProcessResult Load(this Nca nca, Switch device, Nca patchNca, Nca controlNca) { // Extract RomFs and ExeFs from NCA. - IStorage romFs = nca.GetRomFs(device, patchNca); + IStorage romFs = nca.GetRomFs(device, patchNca); IFileSystem exeFs = nca.GetExeFs(device, patchNca); if (exeFs == null) @@ -173,4 +173,4 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions return nacpData; } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs index e93802ae..6de99131 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs @@ -17,16 +17,16 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions { public static class PartitionFileSystemExtensions { - private static readonly DownloadableContentJsonSerializerContext ContentSerializerContext = new(JsonHelper.GetDefaultSerializerOptions()); - private static readonly TitleUpdateMetadataJsonSerializerContext TitleSerializerContext = new(JsonHelper.GetDefaultSerializerOptions()); + private static readonly DownloadableContentJsonSerializerContext _contentSerializerContext = new(JsonHelper.GetDefaultSerializerOptions()); + private static readonly TitleUpdateMetadataJsonSerializerContext _titleSerializerContext = new(JsonHelper.GetDefaultSerializerOptions()); internal static (bool, ProcessResult) TryLoad(this PartitionFileSystem partitionFileSystem, Switch device, string path, out string errorMessage) { errorMessage = null; // Load required NCAs. - Nca mainNca = null; - Nca patchNca = null; + Nca mainNca = null; + Nca patchNca = null; Nca controlNca = null; try @@ -88,7 +88,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions string titleUpdateMetadataPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, titleIdBase.ToString("x16"), "updates.json"); if (File.Exists(titleUpdateMetadataPath)) { - string updatePath = JsonHelper.DeserializeFromFile(titleUpdateMetadataPath, TitleSerializerContext.TitleUpdateMetadata).Selected; + string updatePath = JsonHelper.DeserializeFromFile(titleUpdateMetadataPath, _titleSerializerContext.TitleUpdateMetadata).Selected; if (File.Exists(updatePath)) { PartitionFileSystem updatePartitionFileSystem = new(new FileStream(updatePath, FileMode.Open, FileAccess.Read).AsStorage()); @@ -142,7 +142,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions string addOnContentMetadataPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, mainNca.Header.TitleId.ToString("x16"), "dlc.json"); if (File.Exists(addOnContentMetadataPath)) { - List<DownloadableContentContainer> dlcContainerList = JsonHelper.DeserializeFromFile(addOnContentMetadataPath, ContentSerializerContext.ListDownloadableContentContainer); + List<DownloadableContentContainer> dlcContainerList = JsonHelper.DeserializeFromFile(addOnContentMetadataPath, _contentSerializerContext.ListDownloadableContentContainer); foreach (DownloadableContentContainer downloadableContentContainer in dlcContainerList) { @@ -177,4 +177,4 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions return new Nca(device.Configuration.VirtualFileSystem.KeySet, ncaFile.Release().AsStorage()); } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessConst.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessConst.cs index 42ae2e89..5df7be29 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessConst.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessConst.cs @@ -17,7 +17,7 @@ "subsdk7", "subsdk8", "subsdk9", - "sdk" + "sdk", }; public static readonly string MainNpdmPath = "/main.npdm"; @@ -27,7 +27,7 @@ public const bool AslrEnabled = true; public const int NsoArgsHeaderSize = 8; - public const int NsoArgsDataSize = 0x9000; - public const int NsoArgsTotalSize = NsoArgsHeaderSize + NsoArgsDataSize; + public const int NsoArgsDataSize = 0x9000; + public const int NsoArgsTotalSize = NsoArgsHeaderSize + NsoArgsDataSize; } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs index f391f965..51cbb6f9 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs @@ -12,7 +12,6 @@ using Ryujinx.HLE.Loaders.Processes.Extensions; using System; using System.Collections.Concurrent; using System.IO; -using System.Linq; using Path = System.IO.Path; namespace Ryujinx.HLE.Loaders.Processes @@ -29,14 +28,14 @@ namespace Ryujinx.HLE.Loaders.Processes public ProcessLoader(Switch device) { - _device = device; + _device = device; _processesByPid = new ConcurrentDictionary<ulong, ProcessResult>(); } public bool LoadXci(string path) { FileStream stream = new(path, FileMode.Open, FileAccess.Read); - Xci xci = new(_device.Configuration.VirtualFileSystem.KeySet, stream.AsStorage()); + Xci xci = new(_device.Configuration.VirtualFileSystem.KeySet, stream.AsStorage()); if (!xci.HasPartition(XciPartitionType.Secure)) { @@ -69,7 +68,7 @@ namespace Ryujinx.HLE.Loaders.Processes public bool LoadNsp(string path) { - FileStream file = new(path, FileMode.Open, FileAccess.Read); + FileStream file = new(path, FileMode.Open, FileAccess.Read); PartitionFileSystem partitionFileSystem = new(file.AsStorage()); (bool success, ProcessResult processResult) = partitionFileSystem.TryLoad(_device, path, out string errorMessage); @@ -101,7 +100,7 @@ namespace Ryujinx.HLE.Loaders.Processes public bool LoadNca(string path) { FileStream file = new(path, FileMode.Open, FileAccess.Read); - Nca nca = new(_device.Configuration.VirtualFileSystem.KeySet, file.AsStorage(false)); + Nca nca = new(_device.Configuration.VirtualFileSystem.KeySet, file.AsStorage(false)); ProcessResult processResult = nca.Load(_device, null, null); @@ -141,20 +140,20 @@ namespace Ryujinx.HLE.Loaders.Processes public bool LoadNxo(string path) { - var nacpData = new BlitStruct<ApplicationControlProperty>(1); - IFileSystem dummyExeFs = null; - Stream romfsStream = null; + var nacpData = new BlitStruct<ApplicationControlProperty>(1); + IFileSystem dummyExeFs = null; + Stream romfsStream = null; string programName = ""; - ulong programId = 0000000000000000; + ulong programId = 0000000000000000; // Load executable. IExecutable executable; if (Path.GetExtension(path).ToLower() == ".nro") { - FileStream input = new(path, FileMode.Open); - NroExecutable nro = new(input.AsStorage()); + FileStream input = new(path, FileMode.Open); + NroExecutable nro = new(input.AsStorage()); executable = nro; @@ -242,4 +241,4 @@ namespace Ryujinx.HLE.Loaders.Processes return false; } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs index d1c60f16..d14a013a 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs @@ -31,7 +31,7 @@ namespace Ryujinx.HLE.Loaders.Processes public static LibHac.Result RegisterProgramMapInfo(Switch device, PartitionFileSystem partitionFileSystem) { ulong applicationId = 0; - int programCount = 0; + int programCount = 0; Span<bool> hasIndex = stackalloc bool[0x10]; @@ -44,7 +44,7 @@ namespace Ryujinx.HLE.Loaders.Processes continue; } - ulong currentProgramId = nca.Header.TitleId; + ulong currentProgramId = nca.Header.TitleId; ulong currentMainProgramId = currentProgramId & ~0xFFFul; if (applicationId == 0 && currentMainProgramId != 0) @@ -82,9 +82,9 @@ namespace Ryujinx.HLE.Loaders.Processes for (int i = 0; i < programCount; i++) { - mapInfo[i].ProgramId = new ProgramId(applicationId + (uint)i); + mapInfo[i].ProgramId = new ProgramId(applicationId + (uint)i); mapInfo[i].MainProgramId = new ApplicationId(applicationId); - mapInfo[i].ProgramIndex = (byte)i; + mapInfo[i].ProgramIndex = (byte)i; } return device.System.LibHacHorizonManager.NsClient.Fs.RegisterProgramIndexMapInfo(mapInfo[..programCount]); @@ -102,9 +102,9 @@ namespace Ryujinx.HLE.Loaders.Processes control = ref new BlitStruct<ApplicationControlProperty>(1).Value; // The set sizes don't actually matter as long as they're non-zero because we use directory savedata. - control.UserAccountSaveDataSize = 0x4000; + control.UserAccountSaveDataSize = 0x4000; control.UserAccountSaveDataJournalSize = 0x4000; - control.SaveDataOwnerId = applicationId.Value; + control.SaveDataOwnerId = applicationId.Value; Logger.Warning?.Print(LogClass.Application, "No control file was found for this game. Using a dummy one instead. This may cause inaccuracies in some games."); } @@ -137,10 +137,10 @@ namespace Ryujinx.HLE.Loaders.Processes endOffset = kip.BssOffset + kip.BssSize; } - uint codeSize = BitUtils.AlignUp<uint>(kip.TextOffset + endOffset, KPageTableBase.PageSize); - int codePagesCount = (int)(codeSize / KPageTableBase.PageSize); + uint codeSize = BitUtils.AlignUp<uint>(kip.TextOffset + endOffset, KPageTableBase.PageSize); + int codePagesCount = (int)(codeSize / KPageTableBase.PageSize); ulong codeBaseAddress = kip.Is64BitAddressSpace ? 0x8000000UL : 0x200000UL; - ulong codeAddress = codeBaseAddress + kip.TextOffset; + ulong codeAddress = codeBaseAddress + kip.TextOffset; ProcessCreationFlags flags = 0; @@ -161,9 +161,9 @@ namespace Ryujinx.HLE.Loaders.Processes flags |= ProcessCreationFlags.Is64Bit; } - ProcessCreationInfo creationInfo = new(kip.Name, kip.Version, kip.ProgramId, codeAddress, codePagesCount, flags, 0, 0); - MemoryRegion memoryRegion = kip.UsesSecureMemory ? MemoryRegion.Service : MemoryRegion.Application; - KMemoryRegionManager region = context.MemoryManager.MemoryRegions[(int)memoryRegion]; + ProcessCreationInfo creationInfo = new(kip.Name, kip.Version, kip.ProgramId, codeAddress, codePagesCount, flags, 0, 0); + MemoryRegion memoryRegion = kip.UsesSecureMemory ? MemoryRegion.Service : MemoryRegion.Application; + KMemoryRegionManager region = context.MemoryManager.MemoryRegions[(int)memoryRegion]; Result result = region.AllocatePages(out KPageList pageList, (ulong)codePagesCount); if (result != Result.Success) @@ -241,15 +241,15 @@ namespace Ryujinx.HLE.Loaders.Processes ref readonly var meta = ref npdm.Meta; ulong argsStart = 0; - uint argsSize = 0; + uint argsSize = 0; ulong codeStart = (meta.Flags & 1) != 0 ? 0x8000000UL : 0x200000UL; - uint codeSize = 0; + uint codeSize = 0; var buildIds = executables.Select(e => (e switch { NsoExecutable nso => Convert.ToHexString(nso.BuildId.ItemsRo.ToArray()), NroExecutable nro => Convert.ToHexString(nro.Header.BuildId), - _ => "" + _ => "", }).ToUpper()); ulong[] nsoBase = new ulong[executables.Length]; @@ -259,7 +259,7 @@ namespace Ryujinx.HLE.Loaders.Processes IExecutable nso = executables[index]; uint textEnd = nso.TextOffset + (uint)nso.Text.Length; - uint roEnd = nso.RoOffset + (uint)nso.Ro.Length; + uint roEnd = nso.RoOffset + (uint)nso.Ro.Length; uint dataEnd = nso.DataOffset + (uint)nso.Data.Length + nso.BssSize; uint nsoSize = textEnd; @@ -290,7 +290,7 @@ namespace Ryujinx.HLE.Loaders.Processes } } - int codePagesCount = (int)(codeSize / KPageTableBase.PageSize); + int codePagesCount = (int)(codeSize / KPageTableBase.PageSize); int personalMmHeapPagesCount = (int)(meta.SystemResourceSize / KPageTableBase.PageSize); ProcessCreationInfo creationInfo = new( @@ -335,7 +335,7 @@ namespace Ryujinx.HLE.Loaders.Processes if (result != Result.Success) { - Logger.Error?.Print(LogClass.Loader, $"Process initialization failed setting resource limit values."); + Logger.Error?.Print(LogClass.Loader, "Process initialization failed setting resource limit values."); return ProcessResult.Failed; } @@ -346,7 +346,7 @@ namespace Ryujinx.HLE.Loaders.Processes MemoryRegion memoryRegion = (MemoryRegion)(npdm.Acid.Flags >> 2 & 0xf); if (memoryRegion > MemoryRegion.NvServices) { - Logger.Error?.Print(LogClass.Loader, $"Process initialization failed due to invalid ACID flags."); + Logger.Error?.Print(LogClass.Loader, "Process initialization failed due to invalid ACID flags."); return ProcessResult.Failed; } @@ -420,9 +420,9 @@ namespace Ryujinx.HLE.Loaders.Processes public static Result LoadIntoMemory(KProcess process, IExecutable image, ulong baseAddress) { ulong textStart = baseAddress + image.TextOffset; - ulong roStart = baseAddress + image.RoOffset; + ulong roStart = baseAddress + image.RoOffset; ulong dataStart = baseAddress + image.DataOffset; - ulong bssStart = baseAddress + image.BssOffset; + ulong bssStart = baseAddress + image.BssOffset; ulong end = dataStart + (ulong)image.Data.Length; @@ -432,7 +432,7 @@ namespace Ryujinx.HLE.Loaders.Processes } process.CpuMemory.Write(textStart, image.Text); - process.CpuMemory.Write(roStart, image.Ro); + process.CpuMemory.Write(roStart, image.Ro); process.CpuMemory.Write(dataStart, image.Data); process.CpuMemory.Fill(bssStart, image.BssSize, 0); @@ -464,4 +464,4 @@ namespace Ryujinx.HLE.Loaders.Processes return SetProcessMemoryPermission(dataStart, end - dataStart, KMemoryPermission.ReadAndWrite); } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs index 40b516cc..9a7b3cd0 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs @@ -7,7 +7,6 @@ using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.Horizon.Common; using System; -using System.Linq; namespace Ryujinx.HLE.Loaders.Processes { @@ -20,36 +19,36 @@ namespace Ryujinx.HLE.Loaders.Processes public readonly IDiskCacheLoadState DiskCacheLoadState; - public readonly MetaLoader MetaLoader; + public readonly MetaLoader MetaLoader; public readonly ApplicationControlProperty ApplicationControlProperties; - public readonly ulong ProcessId; + public readonly ulong ProcessId; public readonly string Name; public readonly string DisplayVersion; - public readonly ulong ProgramId; + public readonly ulong ProgramId; public readonly string ProgramIdText; - public readonly bool Is64Bit; - public readonly bool DiskCacheEnabled; - public readonly bool AllowCodeMemoryForJit; + public readonly bool Is64Bit; + public readonly bool DiskCacheEnabled; + public readonly bool AllowCodeMemoryForJit; public ProcessResult( - MetaLoader metaLoader, + MetaLoader metaLoader, BlitStruct<ApplicationControlProperty> applicationControlProperties, - bool diskCacheEnabled, - bool allowCodeMemoryForJit, - IDiskCacheLoadState diskCacheLoadState, - ulong pid, - byte mainThreadPriority, - uint mainThreadStackSize, - TitleLanguage titleLanguage) + bool diskCacheEnabled, + bool allowCodeMemoryForJit, + IDiskCacheLoadState diskCacheLoadState, + ulong pid, + byte mainThreadPriority, + uint mainThreadStackSize, + TitleLanguage titleLanguage) { - _mainThreadPriority = mainThreadPriority; + _mainThreadPriority = mainThreadPriority; _mainThreadStackSize = mainThreadStackSize; DiskCacheLoadState = diskCacheLoadState; - ProcessId = pid; + ProcessId = pid; - MetaLoader = metaLoader; + MetaLoader = metaLoader; ApplicationControlProperties = applicationControlProperties.Value; if (metaLoader is not null) @@ -64,12 +63,12 @@ namespace Ryujinx.HLE.Loaders.Processes } DisplayVersion = ApplicationControlProperties.DisplayVersionString.ToString(); - ProgramId = programId; - ProgramIdText = $"{programId:x16}"; - Is64Bit = metaLoader.IsProgram64Bit(); + ProgramId = programId; + ProgramIdText = $"{programId:x16}"; + Is64Bit = metaLoader.IsProgram64Bit(); } - DiskCacheEnabled = diskCacheEnabled; + DiskCacheEnabled = diskCacheEnabled; AllowCodeMemoryForJit = allowCodeMemoryForJit; } |