Update SvcTable.cs

This commit is contained in:
LDj3SNuD 2019-09-19 02:13:22 +02:00 committed by GitHub
commit b55b680332
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -165,10 +165,14 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
} }
} }
BindingFlags staticNonPublic = BindingFlags.NonPublic | BindingFlags.Static;
// Print all the arguments for debugging purposes. // Print all the arguments for debugging purposes.
int inputArgsCount = methodArgs.Length - byRefArgsCount; int inputArgsCount = methodArgs.Length - byRefArgsCount;
generator.Emit(OpCodes.Ldc_I4_S, inputArgsCount); if (inputArgsCount != 0)
{
generator.Emit(OpCodes.Ldc_I4, inputArgsCount);
generator.Emit(OpCodes.Newarr, typeof(object)); generator.Emit(OpCodes.Newarr, typeof(object));
@ -179,8 +183,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
argsFormat += $" {methodArgs[index].Name}: 0x{{{index}:X8}},"; argsFormat += $" {methodArgs[index].Name}: 0x{{{index}:X8}},";
generator.Emit(OpCodes.Dup); generator.Emit(OpCodes.Dup);
generator.Emit(OpCodes.Ldc_I4_S, index); generator.Emit(OpCodes.Ldc_I4, index);
generator.Emit(OpCodes.Conv_I);
generator.Emit(OpCodes.Ldarg_1); generator.Emit(OpCodes.Ldarg_1);
generator.Emit(OpCodes.Ldc_I4, byRefArgsCount + index); generator.Emit(OpCodes.Ldc_I4, byRefArgsCount + index);
@ -197,8 +200,13 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
argsFormat = argsFormat.Substring(0, argsFormat.Length - 1); argsFormat = argsFormat.Substring(0, argsFormat.Length - 1);
generator.Emit(OpCodes.Ldstr, argsFormat); generator.Emit(OpCodes.Ldstr, argsFormat);
}
else
{
generator.Emit(OpCodes.Ldnull);
BindingFlags staticNonPublic = BindingFlags.NonPublic | BindingFlags.Static; generator.Emit(OpCodes.Ldstr, svcName);
}
MethodInfo printArgsMethod = typeof(SvcTable).GetMethod(nameof(PrintArguments), staticNonPublic); MethodInfo printArgsMethod = typeof(SvcTable).GetMethod(nameof(PrintArguments), staticNonPublic);
@ -325,6 +333,18 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
throw new InvalidSvcException($"Method \"{svcName}\" has a invalid ref type \"{type.Name}\"."); throw new InvalidSvcException($"Method \"{svcName}\" has a invalid ref type \"{type.Name}\".");
} }
private static void PrintArguments(object[] argValues, string formatOrSvcName)
{
if (argValues != null)
{
Logger.PrintDebug(LogClass.KernelSvc, string.Format(formatOrSvcName, argValues));
}
else
{
Logger.PrintDebug(LogClass.KernelSvc, formatOrSvcName);
}
}
private static void PrintResult(KernelResult result, string svcName) private static void PrintResult(KernelResult result, string svcName)
{ {
if (result != KernelResult.Success && if (result != KernelResult.Success &&
@ -339,10 +359,5 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
Logger.PrintDebug(LogClass.KernelSvc, $"{svcName} returned result {result}."); Logger.PrintDebug(LogClass.KernelSvc, $"{svcName} returned result {result}.");
} }
} }
private static void PrintArguments(object[] argValues, string format)
{
Logger.PrintDebug(LogClass.KernelSvc, string.Format(format, argValues));
}
} }
} }