sharpemu/tests/SharpEmu.Libs.Tests/Cpu/NativeTlsPatchRangeTests.cs

51 lines
1.6 KiB
C#

// Copyright (C) 2026 SharpEmu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
using SharpEmu.Core.Cpu.Native;
using SharpEmu.Core.Loader;
using SharpEmu.Core.Memory;
using Xunit;
namespace SharpEmu.Libs.Tests.Cpu;
public sealed class NativeTlsPatchRangeTests
{
[Fact]
public void BuildTlsPatchScanRanges_UsesTheCompleteExecutableRegion()
{
const ulong imageBase = 0x0000_0008_0000_0000;
const ulong imageSize = 0x0B7B_44EC;
var regions = new[]
{
new VirtualMemoryRegion(
imageBase,
imageSize,
fileOffset: 0,
fileSize: imageSize,
ProgramHeaderFlags.Read | ProgramHeaderFlags.Execute),
};
var range = Assert.Single(DirectExecutionBackend.BuildTlsPatchScanRanges(regions));
Assert.Equal(imageBase, range.Start);
Assert.Equal(imageBase + imageSize, range.End);
Assert.True(range.End > imageBase + 0x0800_0000);
}
[Fact]
public void BuildTlsPatchScanRanges_MergesAdjacentExecutableRegions()
{
var regions = new[]
{
new VirtualMemoryRegion(0x3000, 0x1000, 0, 0x1000, ProgramHeaderFlags.Read),
new VirtualMemoryRegion(0x1000, 0x1000, 0, 0x1000, ProgramHeaderFlags.Read | ProgramHeaderFlags.Execute),
new VirtualMemoryRegion(0x2000, 0x1000, 0, 0x1000, ProgramHeaderFlags.Read | ProgramHeaderFlags.Execute),
};
var range = Assert.Single(DirectExecutionBackend.BuildTlsPatchScanRanges(regions));
Assert.Equal(0x1000UL, range.Start);
Assert.Equal(0x3000UL, range.End);
}
}