51 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|