mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-10-25 07:34:25 +00:00
gdb: more cleanups
- convert GdbRegisters utilities into extensions on IExecutionContext - add a Write/Read Register helper on Debugger that handles 32/64 bit instead of doing that for every usage of register reading/writing
This commit is contained in:
@@ -112,15 +112,22 @@ namespace Ryujinx.HLE.Debugger
|
||||
}
|
||||
}
|
||||
|
||||
internal bool WriteRegister(IExecutionContext ctx, int gdbRegId, StringStream ss) =>
|
||||
IsProcess32Bit
|
||||
? ctx.WriteRegister32(gdbRegId, ss)
|
||||
: ctx.WriteRegister64(gdbRegId, ss);
|
||||
|
||||
internal string ReadRegister(IExecutionContext ctx, int gdbRegId) =>
|
||||
IsProcess32Bit
|
||||
? ctx.ReadRegister32(gdbRegId)
|
||||
: ctx.ReadRegister64(gdbRegId);
|
||||
|
||||
public string GetStackTrace()
|
||||
{
|
||||
if (GThread == null)
|
||||
return "No thread selected\n";
|
||||
|
||||
if (Process == null)
|
||||
return "No application process found\n";
|
||||
|
||||
return Process.Debugger.GetGuestStackTrace(DebugProcess.GetThread(GThread.Value));
|
||||
return Process?.Debugger?.GetGuestStackTrace(DebugProcess.GetThread(GThread.Value)) ?? "No application process found\n";
|
||||
}
|
||||
|
||||
public string GetRegisters()
|
||||
@@ -128,10 +135,7 @@ namespace Ryujinx.HLE.Debugger
|
||||
if (GThread == null)
|
||||
return "No thread selected\n";
|
||||
|
||||
if (Process == null)
|
||||
return "No application process found\n";
|
||||
|
||||
return Process.Debugger.GetCpuRegisterPrintout(DebugProcess.GetThread(GThread.Value));
|
||||
return Process?.Debugger?.GetCpuRegisterPrintout(DebugProcess.GetThread(GThread.Value)) ?? "No application process found\n";
|
||||
}
|
||||
|
||||
public string GetMinidump()
|
||||
|
||||
@@ -105,14 +105,14 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
{
|
||||
for (int i = 0; i < GdbRegisterCount32; i++)
|
||||
{
|
||||
registers += GdbRegisters.Read32(ctx, i);
|
||||
registers += ctx.ReadRegister32(i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < GdbRegisterCount64; i++)
|
||||
{
|
||||
registers += GdbRegisters.Read64(ctx, i);
|
||||
registers += ctx.ReadRegister64(i);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
{
|
||||
for (int i = 0; i < GdbRegisterCount32; i++)
|
||||
{
|
||||
if (!GdbRegisters.Write32(ctx, i, ss))
|
||||
if (!ctx.WriteRegister32(i, ss))
|
||||
{
|
||||
Processor.ReplyError();
|
||||
return;
|
||||
@@ -143,7 +143,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
{
|
||||
for (int i = 0; i < GdbRegisterCount64; i++)
|
||||
{
|
||||
if (!GdbRegisters.Write64(ctx, i, ss))
|
||||
if (!ctx.WriteRegister64(i, ss))
|
||||
{
|
||||
Processor.ReplyError();
|
||||
return;
|
||||
@@ -236,9 +236,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
}
|
||||
|
||||
IExecutionContext ctx = Debugger.DebugProcess.GetThread(Debugger.GThread.Value).Context;
|
||||
string result = Debugger.IsProcess32Bit
|
||||
? GdbRegisters.Read32(ctx, gdbRegId)
|
||||
: GdbRegisters.Read64(ctx, gdbRegId);
|
||||
string result = Debugger.ReadRegister(ctx, gdbRegId);
|
||||
|
||||
Processor.Reply(result != null, result);
|
||||
}
|
||||
@@ -252,14 +250,8 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
}
|
||||
|
||||
IExecutionContext ctx = Debugger.DebugProcess.GetThread(Debugger.GThread.Value).Context;
|
||||
if (Debugger.IsProcess32Bit)
|
||||
{
|
||||
Processor.Reply(GdbRegisters.Write32(ctx, gdbRegId, ss) && ss.IsEmpty());
|
||||
}
|
||||
else
|
||||
{
|
||||
Processor.Reply(GdbRegisters.Write64(ctx, gdbRegId, ss) && ss.IsEmpty());
|
||||
}
|
||||
|
||||
Processor.Reply(Debugger.WriteRegister(ctx, gdbRegId, ss) && ss.IsEmpty());
|
||||
}
|
||||
|
||||
internal void Step(ulong? newPc)
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
*/
|
||||
private const uint FpcrMask = 0xfc1fffff;
|
||||
|
||||
public static string Read64(IExecutionContext state, int gdbRegId)
|
||||
public static string ReadRegister64(this IExecutionContext state, int gdbRegId)
|
||||
{
|
||||
switch (gdbRegId)
|
||||
{
|
||||
@@ -34,7 +34,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
}
|
||||
}
|
||||
|
||||
public static bool Write64(IExecutionContext state, int gdbRegId, StringStream ss)
|
||||
public static bool WriteRegister64(this IExecutionContext state, int gdbRegId, StringStream ss)
|
||||
{
|
||||
switch (gdbRegId)
|
||||
{
|
||||
@@ -80,7 +80,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
}
|
||||
}
|
||||
|
||||
public static string Read32(IExecutionContext state, int gdbRegId)
|
||||
public static string ReadRegister32(this IExecutionContext state, int gdbRegId)
|
||||
{
|
||||
switch (gdbRegId)
|
||||
{
|
||||
@@ -106,7 +106,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
|
||||
}
|
||||
}
|
||||
|
||||
public static bool Write32(IExecutionContext state, int gdbRegId, StringStream ss)
|
||||
public static bool WriteRegister32(this IExecutionContext state, int gdbRegId, StringStream ss)
|
||||
{
|
||||
switch (gdbRegId)
|
||||
{
|
||||
|
||||
@@ -17,12 +17,9 @@ namespace Ryujinx.HLE.Debugger
|
||||
|
||||
private static string GetEmbeddedResourceContent(string resourceName)
|
||||
{
|
||||
Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Ryujinx.HLE.Debugger.Gdb.Xml." + resourceName);
|
||||
StreamReader reader = new(stream);
|
||||
string result = reader.ReadToEnd();
|
||||
reader.Dispose();
|
||||
stream.Dispose();
|
||||
return result;
|
||||
using Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Ryujinx.HLE.Debugger.Gdb.Xml." + resourceName);
|
||||
using StreamReader reader = new(stream);
|
||||
return reader.ReadToEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user