aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS
diff options
context:
space:
mode:
authorMary-nyan <mary@mary.zone>2022-11-09 20:22:43 +0100
committerGitHub <noreply@github.com>2022-11-09 20:22:43 +0100
commitc6d05301aae7509ea6a1ec29d39a72bac94d80b0 (patch)
treea1e593a9fd180fbc467beae29907c37cb6e902e5 /Ryujinx.HLE/HOS
parent647de4cd31a82f39d23f92ea4377eeae5817b6c2 (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')
-rw-r--r--Ryujinx.HLE/HOS/Horizon.cs4
-rw-r--r--Ryujinx.HLE/HOS/Services/Account/Acc/Types/UserId.cs3
-rw-r--r--Ryujinx.HLE/HOS/Services/Mii/Helper.cs4
-rw-r--r--Ryujinx.HLE/HOS/Services/Mii/Types/CharInfo.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/Mii/Types/CreateId.cs13
-rw-r--r--Ryujinx.HLE/HOS/Services/Mii/Types/StoreData.cs3
-rw-r--r--Ryujinx.HLE/HOS/Services/Mii/UtilityImpl.cs11
-rw-r--r--Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs4
-rw-r--r--Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/DnsSetting.cs9
-rw-r--r--Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/IpAddressSetting.cs5
-rw-r--r--Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/NetworkProfileData.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs6
-rw-r--r--Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs3
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/Clock/SteadyClockCore.cs6
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/Clock/Types/SteadyClockTimePoint.cs6
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/Clock/Types/SystemClockContext.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/TimeManager.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneManager.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/Types/SteadyClockContext.cs4
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;