diff options
| author | Mary-nyan <mary@mary.zone> | 2022-11-09 20:22:43 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-09 20:22:43 +0100 |
| commit | c6d05301aae7509ea6a1ec29d39a72bac94d80b0 (patch) | |
| tree | a1e593a9fd180fbc467beae29907c37cb6e902e5 /Ryujinx.HLE/HOS | |
| parent | 647de4cd31a82f39d23f92ea4377eeae5817b6c2 (diff) | |
infra: Migrate to .NET 7 (#3795)
* Update readme to mention .NET 7
* infra: Migrate to .NET 7
.NET 7 is still in preview but this prepare for the release coming up
next month.
* Use Random.Shared in CreateRandom
* Move UInt128Utils.cs to Ryujinx.Common project
* Fix inverted parameters in System.UInt128 constructor
* Fix Visual Studio complains on Ryujinx.Graphics.Vic
* time: Fix missing alignment enforcement in SystemClockContext
Fixes at least Smash
* time: Fix missing alignment enforcement in SteadyClockContext
Fix games (like recent version of Smash) using time shared memory
* Switch to .NET 7.0.100 release
* Enable Tiered PGO
* Ensure CreateId validity requirements are meet when doing random generation
Also enforce correct packing layout for other Mii structures.
This fix a Mario Kart 8 crashes related to the default Miis.
Diffstat (limited to 'Ryujinx.HLE/HOS')
19 files changed, 46 insertions, 45 deletions
diff --git a/Ryujinx.HLE/HOS/Horizon.cs b/Ryujinx.HLE/HOS/Horizon.cs index b93ebc03..d2716beb 100644 --- a/Ryujinx.HLE/HOS/Horizon.cs +++ b/Ryujinx.HLE/HOS/Horizon.cs @@ -10,6 +10,7 @@ using Ryujinx.Audio.Integration; using Ryujinx.Audio.Output; using Ryujinx.Audio.Renderer.Device; using Ryujinx.Audio.Renderer.Server; +using Ryujinx.Common.Utilities; using Ryujinx.Cpu; using Ryujinx.Cpu.Jit; using Ryujinx.HLE.FileSystem; @@ -35,7 +36,6 @@ using Ryujinx.HLE.HOS.Services.SurfaceFlinger; using Ryujinx.HLE.HOS.Services.Time.Clock; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.Loaders.Executables; -using Ryujinx.HLE.Utilities; using System; using System.Collections.Generic; using System.IO; @@ -201,7 +201,7 @@ namespace Ryujinx.HLE.HOS // TODO: use set:sys (and get external clock source id from settings) // TODO: use "time!standard_steady_clock_rtc_update_interval_minutes" and implement a worker thread to be accurate. - UInt128 clockSourceId = new UInt128(Guid.NewGuid().ToByteArray()); + UInt128 clockSourceId = UInt128Utils.CreateRandom(); IRtcManager.GetExternalRtcValue(out ulong rtcValue); // We assume the rtc is system time. diff --git a/Ryujinx.HLE/HOS/Services/Account/Acc/Types/UserId.cs b/Ryujinx.HLE/HOS/Services/Account/Acc/Types/UserId.cs index 85ddb439..8cf4bff1 100644 --- a/Ryujinx.HLE/HOS/Services/Account/Acc/Types/UserId.cs +++ b/Ryujinx.HLE/HOS/Services/Account/Acc/Types/UserId.cs @@ -1,5 +1,4 @@ using LibHac.Account; -using Ryujinx.HLE.Utilities; using System; using System.IO; using System.Linq; @@ -83,7 +82,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc public readonly UInt128 ToUInt128() { - return new UInt128(Low, High); + return new UInt128((ulong)High, (ulong)Low); } } }
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Mii/Helper.cs b/Ryujinx.HLE/HOS/Services/Mii/Helper.cs index 47debd59..b02bbfd1 100644 --- a/Ryujinx.HLE/HOS/Services/Mii/Helper.cs +++ b/Ryujinx.HLE/HOS/Services/Mii/Helper.cs @@ -1,4 +1,4 @@ -using Ryujinx.HLE.Utilities; +using Ryujinx.Common.Utilities; using System; using System.Buffers.Binary; @@ -36,7 +36,7 @@ namespace Ryujinx.HLE.HOS.Services.Mii public static UInt128 GetDeviceId() { // FIXME: call set:sys GetMiiAuthorId - return new UInt128("5279754d69694e780000000000000000"); // RyuMiiNx + return UInt128Utils.FromHex("5279754d69694e780000000000000000"); // RyuMiiNx } public static ReadOnlySpan<byte> Ver3FacelineColorTable => new byte[] { 0, 1, 2, 3, 4, 5 }; diff --git a/Ryujinx.HLE/HOS/Services/Mii/Types/CharInfo.cs b/Ryujinx.HLE/HOS/Services/Mii/Types/CharInfo.cs index 98e0f307..256ec9e0 100644 --- a/Ryujinx.HLE/HOS/Services/Mii/Types/CharInfo.cs +++ b/Ryujinx.HLE/HOS/Services/Mii/Types/CharInfo.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Mii.Types { - [StructLayout(LayoutKind.Sequential, Size = 0x58)] + [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x58)] struct CharInfo : IStoredData<CharInfo> { public CreateId CreateId; diff --git a/Ryujinx.HLE/HOS/Services/Mii/Types/CreateId.cs b/Ryujinx.HLE/HOS/Services/Mii/Types/CreateId.cs index 630a8c9d..c1a97f52 100644 --- a/Ryujinx.HLE/HOS/Services/Mii/Types/CreateId.cs +++ b/Ryujinx.HLE/HOS/Services/Mii/Types/CreateId.cs @@ -1,20 +1,19 @@ -using Ryujinx.HLE.Utilities; -using System; +using System; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Mii.Types { - [StructLayout(LayoutKind.Sequential, Size = 0x10)] + [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x10)] struct CreateId : IEquatable<CreateId> { public UInt128 Raw; - public bool IsNull => Raw.IsNull; - public bool IsValid => !IsNull && (Raw.High & 0xC0) == 0x80; + public bool IsNull => Raw == UInt128.Zero; + public bool IsValid => !IsNull && ((Raw >> 64) & 0xC0) == 0x80; - public CreateId(byte[] data) + public CreateId(UInt128 raw) { - Raw = new UInt128(data); + Raw = raw; } public static bool operator ==(CreateId x, CreateId y) diff --git a/Ryujinx.HLE/HOS/Services/Mii/Types/StoreData.cs b/Ryujinx.HLE/HOS/Services/Mii/Types/StoreData.cs index 6b7e3e5a..31c46bc0 100644 --- a/Ryujinx.HLE/HOS/Services/Mii/Types/StoreData.cs +++ b/Ryujinx.HLE/HOS/Services/Mii/Types/StoreData.cs @@ -1,11 +1,12 @@ using LibHac.Common; using Ryujinx.HLE.Utilities; using System; +using System.Diagnostics; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Mii.Types { - [StructLayout(LayoutKind.Sequential, Pack = 4, Size = Size)] + [StructLayout(LayoutKind.Sequential, Pack = 1, Size = Size)] struct StoreData : IStoredData<StoreData> { public const int Size = 0x44; diff --git a/Ryujinx.HLE/HOS/Services/Mii/UtilityImpl.cs b/Ryujinx.HLE/HOS/Services/Mii/UtilityImpl.cs index 8b7f3313..30b201f6 100644 --- a/Ryujinx.HLE/HOS/Services/Mii/UtilityImpl.cs +++ b/Ryujinx.HLE/HOS/Services/Mii/UtilityImpl.cs @@ -1,4 +1,5 @@ -using Ryujinx.Cpu; +using Ryujinx.Common.Utilities; +using Ryujinx.Cpu; using Ryujinx.HLE.HOS.Services.Mii.Types; using Ryujinx.HLE.HOS.Services.Time; using Ryujinx.HLE.HOS.Services.Time.Clock; @@ -62,7 +63,13 @@ namespace Ryujinx.HLE.HOS.Services.Mii public CreateId MakeCreateId() { - return new CreateId(Guid.NewGuid().ToByteArray()); + UInt128 value = UInt128Utils.CreateRandom(); + + // Ensure the random ID generated is valid as a create id. + value &= ~new UInt128(0xC0, 0); + value |= new UInt128(0x80, 0); + + return new CreateId(value); } } } diff --git a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs index e04dd813..4a0259e6 100644 --- a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs +++ b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs @@ -1,8 +1,8 @@ using Ryujinx.Common; using Ryujinx.Common.Logging; +using Ryujinx.Common.Utilities; using Ryujinx.HLE.HOS.Services.Nifm.StaticService.GeneralService; using Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types; -using Ryujinx.HLE.Utilities; using System; using System.Net.NetworkInformation; using System.Runtime.CompilerServices; @@ -78,7 +78,7 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService NetworkProfileData networkProfile = new NetworkProfileData { - Uuid = new UInt128(Guid.NewGuid().ToByteArray()) + Uuid = UInt128Utils.CreateRandom() }; networkProfile.IpSettingData.IpAddressSetting = new IpAddressSetting(interfaceProperties, unicastAddress); diff --git a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/DnsSetting.cs b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/DnsSetting.cs index 9092f6e0..374558ea 100644 --- a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/DnsSetting.cs +++ b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/DnsSetting.cs @@ -14,14 +14,7 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types public DnsSetting(IPInterfaceProperties interfaceProperties) { - try - { - IsDynamicDnsEnabled = interfaceProperties.IsDynamicDnsEnabled; - } - catch (PlatformNotSupportedException) - { - IsDynamicDnsEnabled = false; - } + IsDynamicDnsEnabled = OperatingSystem.IsWindows() && interfaceProperties.IsDynamicDnsEnabled; if (interfaceProperties.DnsAddresses.Count == 0) { diff --git a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/IpAddressSetting.cs b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/IpAddressSetting.cs index 50e6b01c..5bb046ab 100644 --- a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/IpAddressSetting.cs +++ b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/IpAddressSetting.cs @@ -1,4 +1,5 @@ -using System.Net.NetworkInformation; +using System; +using System.Net.NetworkInformation; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types @@ -14,7 +15,7 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types public IpAddressSetting(IPInterfaceProperties interfaceProperties, UnicastIPAddressInformation unicastIPAddressInformation) { - IsDhcpEnabled = interfaceProperties.DhcpServerAddresses.Count != 0; + IsDhcpEnabled = !OperatingSystem.IsMacOS() && interfaceProperties.DhcpServerAddresses.Count != 0; Address = new IpV4Address(unicastIPAddressInformation.Address); IPv4Mask = new IpV4Address(unicastIPAddressInformation.IPv4Mask); GatewayAddress = new IpV4Address(interfaceProperties.GatewayAddresses[0].Address); diff --git a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/NetworkProfileData.cs b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/NetworkProfileData.cs index 3c86aed5..e270c10a 100644 --- a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/NetworkProfileData.cs +++ b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/NetworkProfileData.cs @@ -1,5 +1,5 @@ using Ryujinx.Common.Memory; -using Ryujinx.HLE.Utilities; +using System; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types diff --git a/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs b/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs index 1ce7bbfc..7f32ce6b 100644 --- a/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs +++ b/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs @@ -5,9 +5,9 @@ using LibHac.Fs.Fsa; using LibHac.FsSystem; using LibHac.Ncm; using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.SystemState; -using Ryujinx.HLE.Utilities; using System; using System.IO; using System.Text; @@ -290,9 +290,7 @@ namespace Ryujinx.HLE.HOS.Services.Settings // NOTE: If miiAuthorId is null ResultCode.NullMiiAuthorIdBuffer is returned. // Doesn't occur in our case. - UInt128 miiAuthorId = Mii.Helper.GetDeviceId(); - - miiAuthorId.Write(context.ResponseData); + context.ResponseData.Write(Mii.Helper.GetDeviceId()); return ResultCode.Success; } diff --git a/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs b/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs index 36c8b51a..56bfa709 100644 --- a/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs +++ b/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs @@ -66,6 +66,8 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService EndSslOperation(); } +// NOTE: We silence warnings about TLS 1.0 and 1.1 as games will likely use it. +#pragma warning disable SYSLIB0039 private static SslProtocols TranslateSslVersion(SslVersion version) { switch (version & SslVersion.VersionMask) @@ -84,6 +86,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService throw new NotImplementedException(version.ToString()); } } +#pragma warning restore SYSLIB0039 public ResultCode Handshake(string hostName) { diff --git a/Ryujinx.HLE/HOS/Services/Time/Clock/SteadyClockCore.cs b/Ryujinx.HLE/HOS/Services/Time/Clock/SteadyClockCore.cs index 4bb19e75..18da4ed3 100644 --- a/Ryujinx.HLE/HOS/Services/Time/Clock/SteadyClockCore.cs +++ b/Ryujinx.HLE/HOS/Services/Time/Clock/SteadyClockCore.cs @@ -1,5 +1,5 @@ -using Ryujinx.Cpu; -using Ryujinx.HLE.Utilities; +using Ryujinx.Common.Utilities; +using Ryujinx.Cpu; using System; namespace Ryujinx.HLE.HOS.Services.Time.Clock @@ -12,7 +12,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.Clock public SteadyClockCore() { - _clockSourceId = new UInt128(Guid.NewGuid().ToByteArray()); + _clockSourceId = UInt128Utils.CreateRandom(); _isRtcResetDetected = false; _isInitialized = false; } diff --git a/Ryujinx.HLE/HOS/Services/Time/Clock/Types/SteadyClockTimePoint.cs b/Ryujinx.HLE/HOS/Services/Time/Clock/Types/SteadyClockTimePoint.cs index 71fb4521..729e11b6 100644 --- a/Ryujinx.HLE/HOS/Services/Time/Clock/Types/SteadyClockTimePoint.cs +++ b/Ryujinx.HLE/HOS/Services/Time/Clock/Types/SteadyClockTimePoint.cs @@ -1,10 +1,10 @@ -using Ryujinx.HLE.Utilities; +using Ryujinx.Common.Utilities; using System; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Time.Clock { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] struct SteadyClockTimePoint { public long TimePoint; @@ -36,7 +36,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.Clock return new SteadyClockTimePoint { TimePoint = 0, - ClockSourceId = new UInt128(Guid.NewGuid().ToByteArray()) + ClockSourceId = UInt128Utils.CreateRandom() }; } } diff --git a/Ryujinx.HLE/HOS/Services/Time/Clock/Types/SystemClockContext.cs b/Ryujinx.HLE/HOS/Services/Time/Clock/Types/SystemClockContext.cs index 38e10480..6b589c28 100644 --- a/Ryujinx.HLE/HOS/Services/Time/Clock/Types/SystemClockContext.cs +++ b/Ryujinx.HLE/HOS/Services/Time/Clock/Types/SystemClockContext.cs @@ -2,7 +2,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.Clock { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] struct SystemClockContext { public long Offset; diff --git a/Ryujinx.HLE/HOS/Services/Time/TimeManager.cs b/Ryujinx.HLE/HOS/Services/Time/TimeManager.cs index ac9f0880..e3b65f2a 100644 --- a/Ryujinx.HLE/HOS/Services/Time/TimeManager.cs +++ b/Ryujinx.HLE/HOS/Services/Time/TimeManager.cs @@ -3,7 +3,7 @@ using Ryujinx.HLE.Exceptions; using Ryujinx.HLE.HOS.Kernel.Memory; using Ryujinx.HLE.HOS.Services.Time.Clock; using Ryujinx.HLE.HOS.Services.Time.TimeZone; -using Ryujinx.HLE.Utilities; +using System; using System.IO; namespace Ryujinx.HLE.HOS.Services.Time diff --git a/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneManager.cs b/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneManager.cs index 736bc102..ef4b7b39 100644 --- a/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneManager.cs +++ b/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneManager.cs @@ -1,6 +1,6 @@ using Ryujinx.Common.Memory; using Ryujinx.HLE.HOS.Services.Time.Clock; -using Ryujinx.HLE.Utilities; +using System; using System.IO; namespace Ryujinx.HLE.HOS.Services.Time.TimeZone diff --git a/Ryujinx.HLE/HOS/Services/Time/Types/SteadyClockContext.cs b/Ryujinx.HLE/HOS/Services/Time/Types/SteadyClockContext.cs index 4cf1fc99..38d37055 100644 --- a/Ryujinx.HLE/HOS/Services/Time/Types/SteadyClockContext.cs +++ b/Ryujinx.HLE/HOS/Services/Time/Types/SteadyClockContext.cs @@ -1,9 +1,9 @@ -using Ryujinx.HLE.Utilities; +using System; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Time.Types { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] struct SteadyClockContext { public ulong InternalOffset; |
