diff options
| author | LDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com> | 2019-09-20 01:59:48 +0200 |
|---|---|---|
| committer | gdkchan <gab.dark.100@gmail.com> | 2019-09-19 20:59:48 -0300 |
| commit | 72b9f8f0a0a3d3e946f5438237b4e6ca9478125b (patch) | |
| tree | 7e28a87513ed661e7051667f927fa5a10b3c42dd /Ryujinx.HLE/HOS/Kernel | |
| parent | f17b772c56cf73ac539b4c8c47e0a7c8f29dae5a (diff) | |
Misc fixes (#772)
* Update Logger.cs
* Update MainWindow.cs
* Update SvcTable.cs
* Update SvcTable.cs
* Update SvcTable.cs
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel')
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs | 67 |
1 files changed, 41 insertions, 26 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs index c1a31da9..70b6db0c 100644 --- a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs +++ b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs @@ -165,40 +165,48 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall } } + BindingFlags staticNonPublic = BindingFlags.NonPublic | BindingFlags.Static; + // Print all the arguments for debugging purposes. 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)); - string argsFormat = svcName; + string argsFormat = svcName; - for (int index = 0; index < inputArgsCount; index++) - { - argsFormat += $" {methodArgs[index].Name}: 0x{{{index}:X8}},"; + for (int index = 0; index < inputArgsCount; index++) + { + argsFormat += $" {methodArgs[index].Name}: 0x{{{index}:X8}},"; - generator.Emit(OpCodes.Dup); - generator.Emit(OpCodes.Ldc_I4_S, index); - generator.Emit(OpCodes.Conv_I); + generator.Emit(OpCodes.Dup); + generator.Emit(OpCodes.Ldc_I4, index); - generator.Emit(OpCodes.Ldarg_1); - generator.Emit(OpCodes.Ldc_I4, byRefArgsCount + index); + generator.Emit(OpCodes.Ldarg_1); + generator.Emit(OpCodes.Ldc_I4, byRefArgsCount + index); - MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.GetX)); + MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.GetX)); - generator.Emit(OpCodes.Call, info); + generator.Emit(OpCodes.Call, info); - generator.Emit(OpCodes.Box, typeof(ulong)); + generator.Emit(OpCodes.Box, typeof(ulong)); - generator.Emit(OpCodes.Stelem_Ref); - } + generator.Emit(OpCodes.Stelem_Ref); + } - 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); @@ -226,7 +234,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall throw new InvalidOperationException($"Method \"{svcName}\" has a invalid ref type \"{argType.Name}\"."); } - generator.Emit(OpCodes.Ldloca_S, (byte)local.LocalIndex); + generator.Emit(OpCodes.Ldloca, local); } else { @@ -325,6 +333,18 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall 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) { if (result != KernelResult.Success && @@ -339,10 +359,5 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall Logger.PrintDebug(LogClass.KernelSvc, $"{svcName} returned result {result}."); } } - - private static void PrintArguments(object[] argValues, string format) - { - Logger.PrintDebug(LogClass.KernelSvc, string.Format(format, argValues)); - } } -}
\ No newline at end of file +} |
