Fix regression introduced on last commit with wrong ImageEnd

This commit is contained in:
gdkchan 2018-02-25 22:44:30 -03:00
parent 950011c90f
commit 13214ffa43
3 changed files with 21 additions and 14 deletions

View file

@ -56,7 +56,7 @@ namespace Ryujinx.Core.Loaders
MapBss(BssStartOffset, BssEndOffset - BssStartOffset); MapBss(BssStartOffset, BssEndOffset - BssStartOffset);
ImageEnd = ImageBase + BssEndOffset; ImageEnd = BssEndOffset;
while (true) while (true)
{ {

View file

@ -2,26 +2,33 @@
namespace Ryujinx.Core.OsHle namespace Ryujinx.Core.OsHle
{ {
public class Homebrew static class Homebrew
{ {
//http://switchbrew.org/index.php?title=Homebrew_ABI //http://switchbrew.org/index.php?title=Homebrew_ABI
public Homebrew(AMemory Memory, long Position, long MainThreadHandle) public static void WriteHbAbiData(AMemory Memory, long Position, int MainThreadHandle)
{ {
//(NbrKeys * LoaderConfigEntrySize) + 2 buffers for Key2 Memory.Manager.MapPhys(Position, AMemoryMgr.PageSize, (int)MemoryType.Normal, AMemoryPerm.RW);
long Size = (4 * 0x18) + 0x1000;
Memory.Manager.MapPhys(Position, Size, (int)MemoryType.Normal, AMemoryPerm.RW);
//MainThreadHandle //MainThreadHandle
WriteConfigEntry(Memory, ref Position, 1, 0, MainThreadHandle); WriteConfigEntry(Memory, ref Position, 1, 0, MainThreadHandle);
//NextLoadPath //NextLoadPath
WriteConfigEntry(Memory, ref Position, 2, 0, Position + Size, Position + Size + 0x200); WriteConfigEntry(Memory, ref Position, 2, 0, Position + 0x200, Position + 0x400);
//AppletType //AppletType
WriteConfigEntry(Memory, ref Position, 7); WriteConfigEntry(Memory, ref Position, 7);
//EndOfList //EndOfList
WriteConfigEntry(Memory, ref Position, 0); WriteConfigEntry(Memory, ref Position, 0);
} }
private void WriteConfigEntry(AMemory Memory, ref long Position, int Key, int Flags = 0, long Value0 = 0L, long Value1 = 0L) private static void WriteConfigEntry(
AMemory Memory,
ref long Position,
int Key,
int Flags = 0,
long Value0 = 0,
long Value1 = 0)
{ {
Memory.WriteInt32(Position + 0x00, Key); Memory.WriteInt32(Position + 0x00, Key);
Memory.WriteInt32(Position + 0x04, Flags); Memory.WriteInt32(Position + 0x04, Flags);

View file

@ -113,9 +113,11 @@ namespace Ryujinx.Core.OsHle
if (UseHbAbi) if (UseHbAbi)
{ {
Homebrew Homebrew_ABI = new Homebrew(Memory, Executables[0].ImageEnd, (long)Handle); long HbAbiDataPosition = (Executables[0].ImageEnd + 0xfff) & ~0xfff;
MainThread.Thread.ThreadState.X0 = (ulong)Executables[0].ImageEnd; Homebrew.WriteHbAbiData(Memory, HbAbiDataPosition, Handle);
MainThread.Thread.ThreadState.X0 = (ulong)HbAbiDataPosition;
MainThread.Thread.ThreadState.X1 = ulong.MaxValue; MainThread.Thread.ThreadState.X1 = ulong.MaxValue;
} }
@ -223,14 +225,12 @@ namespace Ryujinx.Core.OsHle
{ {
foreach (KeyValuePair<long, string> KV in Exe.SymbolTable) foreach (KeyValuePair<long, string> KV in Exe.SymbolTable)
{ {
SymbolTable.Add(Exe.ImageBase + KV.Key, KV.Value); SymbolTable.TryAdd(Exe.ImageBase + KV.Key, KV.Value);
} }
} }
Translator = new ATranslator(SymbolTable); Translator = new ATranslator(SymbolTable);
Translator.CpuTrace += CpuTraceHandler; Translator.CpuTrace += CpuTraceHandler;
} }
@ -239,7 +239,7 @@ namespace Ryujinx.Core.OsHle
private void CpuTraceHandler(object sender, ACpuTraceEventArgs e) private void CpuTraceHandler(object sender, ACpuTraceEventArgs e)
{ {
Logging.Info($"Executing at 0x{e.Position:x16} {e.SubName}"); Logging.Trace($"Executing at 0x{e.Position:x16} {e.SubName}");
} }
private int GetFreeTlsSlot(AThread Thread) private int GetFreeTlsSlot(AThread Thread)