mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-07-30 01:29:48 -06:00
Implement a new JIT for Arm devices (#6057)
* Implement a new JIT for Arm devices * Auto-format * Make a lot of Assembler members read-only * More read-only * Fix more warnings * ObjectDisposedException.ThrowIf * New JIT cache for platforms that enforce W^X, currently unused * Remove unused using * Fix assert * Pass memory manager type around * Safe memory manager mode support + other improvements * Actual safe memory manager mode masking support * PR feedback
This commit is contained in:
30
src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs
Normal file
30
src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
|
||||
{
|
||||
class StackWalker : IStackWalker
|
||||
{
|
||||
public IEnumerable<ulong> GetCallStack(IntPtr framePointer, IntPtr codeRegionStart, int codeRegionSize, IntPtr codeRegion2Start, int codeRegion2Size)
|
||||
{
|
||||
List<ulong> functionPointers = new();
|
||||
|
||||
while (true)
|
||||
{
|
||||
IntPtr functionPointer = Marshal.ReadIntPtr(framePointer, IntPtr.Size);
|
||||
|
||||
if ((functionPointer < codeRegionStart || functionPointer >= codeRegionStart + codeRegionSize) &&
|
||||
(functionPointer < codeRegion2Start || functionPointer >= codeRegion2Start + codeRegion2Size))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
functionPointers.Add((ulong)functionPointer - 4);
|
||||
framePointer = Marshal.ReadIntPtr(framePointer);
|
||||
}
|
||||
|
||||
return functionPointers;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user