aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Process.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Process.cs')
-rw-r--r--Ryujinx.HLE/HOS/Process.cs30
1 files changed, 27 insertions, 3 deletions
diff --git a/Ryujinx.HLE/HOS/Process.cs b/Ryujinx.HLE/HOS/Process.cs
index 3817f561..ab0ab18b 100644
--- a/Ryujinx.HLE/HOS/Process.cs
+++ b/Ryujinx.HLE/HOS/Process.cs
@@ -106,13 +106,37 @@ namespace Ryujinx.HLE.HOS
throw new ObjectDisposedException(nameof(Process));
}
- Device.Log.PrintInfo(LogClass.Loader, $"Image base at 0x{ImageBase:x16}.");
+ long ImageEnd = LoadProgram(Program, ImageBase);
- Executable Executable = new Executable(Program, MemoryManager, Memory, ImageBase);
+ ImageBase = IntUtils.AlignUp(ImageEnd, KMemoryManager.PageSize);
+ }
+
+ public long LoadProgram(IExecutable Program, long ExecutableBase)
+ {
+ if (Disposed)
+ {
+ throw new ObjectDisposedException(nameof(Process));
+ }
+
+ Device.Log.PrintInfo(LogClass.Loader, $"Image base at 0x{ExecutableBase:x16}.");
+
+ Executable Executable = new Executable(Program, MemoryManager, Memory, ExecutableBase);
Executables.Add(Executable);
- ImageBase = IntUtils.AlignUp(Executable.ImageEnd, KMemoryManager.PageSize);
+ return Executable.ImageEnd;
+ }
+
+ public void RemoveProgram(long ExecutableBase)
+ {
+ foreach (Executable Executable in Executables)
+ {
+ if (Executable.ImageBase == ExecutableBase)
+ {
+ Executables.Remove(Executable);
+ break;
+ }
+ }
}
public void SetEmptyArgs()