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); Random rng = new Random(123); for (int i = 0; i < 20000; i++) { int srcPage = rng.Next(0, 64); int dstPage = rng.Next(0, 64); int pages = rng.Next(1, 65); if ((rng.Next() & 1) != 0) { toAlias.MapView(backing, (ulong)srcPage << 12, (ulong)dstPage << 12, (ulong)pages << 12); int offset = rng.Next(0, 0x1000 - sizeof(int)); toAlias.Write((ulong)((dstPage << 12) + offset), 0xbadc0de); Assert.AreEqual(Marshal.ReadInt32(backing.Pointer, (srcPage << 12) + offset), 0xbadc0de); } else { toAlias.UnmapView(backing, (ulong)dstPage << 12, (ulong)pages << 12); } } }
/// <inheritdoc/> public void Map(ulong va, ulong pa, ulong size) { AssertValidAddressAndSize(va, size); _addressSpace.MapView(_backingMemory, pa, va, size); _addressSpaceMirror.MapView(_backingMemory, pa, va, size); AddMapping(va, size); PtMap(va, pa, size); Tracking.Map(va, size); }
public void Test_Alias() { using MemoryBlock backing = new MemoryBlock(0x10000, MemoryAllocationFlags.Mirrorable); using MemoryBlock toAlias = new MemoryBlock(0x10000, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible); toAlias.MapView(backing, 0x1000, 0, 0x4000); toAlias.UnmapView(backing, 0x3000, 0x1000); toAlias.Write(0, 0xbadc0de); Assert.AreEqual(Marshal.ReadInt32(backing.Pointer, 0x1000), 0xbadc0de); }
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); toAlias.MapView(backing, 0x1000, 0, 0x4000); toAlias.UnmapView(backing, 0x3000, 0x1000); toAlias.Write(0, 0xbadc0de); Assert.AreEqual(Marshal.ReadInt32(backing.Pointer, 0x1000), 0xbadc0de); }