aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Memory.Tests
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2022-07-30 00:16:29 +0200
committerGitHub <noreply@github.com>2022-07-29 19:16:29 -0300
commit14ce9e15672d03cb6fc067316f90d81471398ebc (patch)
tree39befb3c65a2548fe803bf746545de3fd8851ffd /Ryujinx.Memory.Tests
parent952d013c67a1809fae3b3c7ade9a0757598d9e18 (diff)
Move partial unmap handler to the native signal handler (#3437)
* Initial commit with a lot of testing stuff. * Partial Unmap Cleanup Part 1 * Fix some minor issues, hopefully windows tests. * Disable partial unmap tests on macos for now Weird issue. * Goodbye magic number * Add COMPlus_EnableAlternateStackCheck for tests `COMPlus_EnableAlternateStackCheck` is needed for NullReferenceException handling to work on linux after registering the signal handler, due to how dotnet registers its own signal handler. * Address some feedback * Force retry when memory is mapped in memory tracking This case existed before, but returning `false` no longer retries, so it would crash immediately after unprotecting the memory... Now, we return `true` to deliberately retry. This case existed before (was just broken by this change) and I don't really want to look into fixing the issue right now. Technically, this means that on guest code partial unmaps will retry _due to this_ rather than hitting the handler. I don't expect this to cause any issues. This should fix random crashes in Xenoblade Chronicles 2. * Use IsRangeMapped * Suppress MockMemoryManager.UnmapEvent warning This event is not signalled by the mock memory manager. * Remove 4kb mapping
Diffstat (limited to 'Ryujinx.Memory.Tests')
-rw-r--r--Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs2
-rw-r--r--Ryujinx.Memory.Tests/Tests.cs16
2 files changed, 15 insertions, 3 deletions
diff --git a/Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs b/Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs
index cad0c2b5..29922f89 100644
--- a/Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs
+++ b/Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs
@@ -4,7 +4,7 @@ using System.Collections.Generic;
namespace Ryujinx.Memory.Tests
{
- class MockVirtualMemoryManager : IVirtualMemoryManager
+ public class MockVirtualMemoryManager : IVirtualMemoryManager
{
public bool NoMappings = false;
diff --git a/Ryujinx.Memory.Tests/Tests.cs b/Ryujinx.Memory.Tests/Tests.cs
index aa20c38a..45d00e51 100644
--- a/Ryujinx.Memory.Tests/Tests.cs
+++ b/Ryujinx.Memory.Tests/Tests.cs
@@ -38,9 +38,15 @@ namespace Ryujinx.Memory.Tests
Assert.AreEqual(Marshal.ReadInt32(_memoryBlock.Pointer, 0x2040), 0xbadc0de);
}
- [Test, Explicit]
+ [Test]
public void Test_Alias()
{
+ if (OperatingSystem.IsMacOS())
+ {
+ // Memory aliasing tests fail on CI at the moment.
+ return;
+ }
+
using MemoryBlock backing = new MemoryBlock(0x10000, MemoryAllocationFlags.Mirrorable);
using MemoryBlock toAlias = new MemoryBlock(0x10000, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible);
@@ -51,9 +57,15 @@ namespace Ryujinx.Memory.Tests
Assert.AreEqual(Marshal.ReadInt32(backing.Pointer, 0x1000), 0xbadc0de);
}
- [Test, Explicit]
+ [Test]
public void Test_AliasRandom()
{
+ if (OperatingSystem.IsMacOS())
+ {
+ // Memory aliasing tests fail on CI at the moment.
+ return;
+ }
+
using MemoryBlock backing = new MemoryBlock(0x80000, MemoryAllocationFlags.Mirrorable);
using MemoryBlock toAlias = new MemoryBlock(0x80000, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible);