aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx/OsHle/Process.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx/OsHle/Process.cs')
-rw-r--r--Ryujinx/OsHle/Process.cs24
1 files changed, 15 insertions, 9 deletions
diff --git a/Ryujinx/OsHle/Process.cs b/Ryujinx/OsHle/Process.cs
index 3c91605a..66823846 100644
--- a/Ryujinx/OsHle/Process.cs
+++ b/Ryujinx/OsHle/Process.cs
@@ -137,25 +137,31 @@ namespace Ryujinx.OsHle
return -1;
}
- Thread.Registers.Break += BreakHandler;
- Thread.Registers.SvcCall += SvcHandler.SvcCall;
- Thread.Registers.ProcessId = ProcessId;
- Thread.Registers.ThreadId = Ns.Os.IdGen.GenerateId();
- Thread.Registers.Tpidr = TlsPageAddr + TlsSlot * TlsSize;
- Thread.Registers.X0 = (ulong)ArgsPtr;
- Thread.Registers.X1 = (ulong)Handle;
- Thread.Registers.X31 = (ulong)StackTop;
+ Thread.Registers.Break += BreakHandler;
+ Thread.Registers.SvcCall += SvcHandler.SvcCall;
+ Thread.Registers.Undefined += UndefinedHandler;
+ Thread.Registers.ProcessId = ProcessId;
+ Thread.Registers.ThreadId = Ns.Os.IdGen.GenerateId();
+ Thread.Registers.Tpidr = TlsPageAddr + TlsSlot * TlsSize;
+ Thread.Registers.X0 = (ulong)ArgsPtr;
+ Thread.Registers.X1 = (ulong)Handle;
+ Thread.Registers.X31 = (ulong)StackTop;
Thread.WorkFinished += ThreadFinished;
return Handle;
}
- private void BreakHandler(object sender, AExceptionEventArgs e)
+ private void BreakHandler(object sender, AInstExceptEventArgs e)
{
throw new GuestBrokeExecutionException();
}
+ private void UndefinedHandler(object sender, AInstUndEventArgs e)
+ {
+ throw new UndefinedInstructionException(e.Position, e.RawOpCode);
+ }
+
private int GetFreeTlsSlot(AThread Thread)
{
for (int Index = 1; Index < TotalTlsSlots; Index++)