diff options
| author | riperiperi <rhy3756547@hotmail.com> | 2024-03-14 22:38:27 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-14 19:38:27 -0300 |
| commit | fdd3263e31f8bf352a21e05703d0a6a82c800995 (patch) | |
| tree | 24859502db57a2febaa5ab4c7d968d7375156079 /src/ARMeilleure | |
| parent | ce607db944beb352065107830769d8570f0c245e (diff) | |
Separate guest/host tracking + unaligned protection (#6486)
* WIP: Separate guest/host tracking + unaligned protection
Allow memory manager to define support for single byte guest tracking
* Formatting
* Improve docs
* Properly handle cases where the address space bits are too low
* Address feedback
Diffstat (limited to 'src/ARMeilleure')
| -rw-r--r-- | src/ARMeilleure/Instructions/NativeInterface.cs | 20 | ||||
| -rw-r--r-- | src/ARMeilleure/Memory/IMemoryManager.cs | 22 |
2 files changed, 32 insertions, 10 deletions
diff --git a/src/ARMeilleure/Instructions/NativeInterface.cs b/src/ARMeilleure/Instructions/NativeInterface.cs index d1b2e353..0cd3754f 100644 --- a/src/ARMeilleure/Instructions/NativeInterface.cs +++ b/src/ARMeilleure/Instructions/NativeInterface.cs @@ -91,54 +91,54 @@ namespace ARMeilleure.Instructions #region "Read" public static byte ReadByte(ulong address) { - return GetMemoryManager().ReadTracked<byte>(address); + return GetMemoryManager().ReadGuest<byte>(address); } public static ushort ReadUInt16(ulong address) { - return GetMemoryManager().ReadTracked<ushort>(address); + return GetMemoryManager().ReadGuest<ushort>(address); } public static uint ReadUInt32(ulong address) { - return GetMemoryManager().ReadTracked<uint>(address); + return GetMemoryManager().ReadGuest<uint>(address); } public static ulong ReadUInt64(ulong address) { - return GetMemoryManager().ReadTracked<ulong>(address); + return GetMemoryManager().ReadGuest<ulong>(address); } public static V128 ReadVector128(ulong address) { - return GetMemoryManager().ReadTracked<V128>(address); + return GetMemoryManager().ReadGuest<V128>(address); } #endregion #region "Write" public static void WriteByte(ulong address, byte value) { - GetMemoryManager().Write(address, value); + GetMemoryManager().WriteGuest(address, value); } public static void WriteUInt16(ulong address, ushort value) { - GetMemoryManager().Write(address, value); + GetMemoryManager().WriteGuest(address, value); } public static void WriteUInt32(ulong address, uint value) { - GetMemoryManager().Write(address, value); + GetMemoryManager().WriteGuest(address, value); } public static void WriteUInt64(ulong address, ulong value) { - GetMemoryManager().Write(address, value); + GetMemoryManager().WriteGuest(address, value); } public static void WriteVector128(ulong address, V128 value) { - GetMemoryManager().Write(address, value); + GetMemoryManager().WriteGuest(address, value); } #endregion diff --git a/src/ARMeilleure/Memory/IMemoryManager.cs b/src/ARMeilleure/Memory/IMemoryManager.cs index 952cd2b4..46d44265 100644 --- a/src/ARMeilleure/Memory/IMemoryManager.cs +++ b/src/ARMeilleure/Memory/IMemoryManager.cs @@ -29,6 +29,17 @@ namespace ARMeilleure.Memory T ReadTracked<T>(ulong va) where T : unmanaged; /// <summary> + /// Reads data from CPU mapped memory, from guest code. (with read tracking) + /// </summary> + /// <typeparam name="T">Type of the data being read</typeparam> + /// <param name="va">Virtual address of the data in memory</param> + /// <returns>The data</returns> + T ReadGuest<T>(ulong va) where T : unmanaged + { + return ReadTracked<T>(va); + } + + /// <summary> /// Writes data to CPU mapped memory. /// </summary> /// <typeparam name="T">Type of the data being written</typeparam> @@ -37,6 +48,17 @@ namespace ARMeilleure.Memory void Write<T>(ulong va, T value) where T : unmanaged; /// <summary> + /// Writes data to CPU mapped memory, from guest code. + /// </summary> + /// <typeparam name="T">Type of the data being written</typeparam> + /// <param name="va">Virtual address to write the data into</param> + /// <param name="value">Data to be written</param> + void WriteGuest<T>(ulong va, T value) where T : unmanaged + { + Write(va, value); + } + + /// <summary> /// Gets a read-only span of data from CPU mapped memory. /// </summary> /// <param name="va">Virtual address of the data</param> |
