From 6d65e536642a7cff7afa34be10fdc8ca66a6e79c Mon Sep 17 00:00:00 2001 From: gdkchan Date: Wed, 19 Sep 2018 17:07:56 -0300 Subject: Remove cold methods from the CPU cache (#224) * Remove unused tracing functionality from the CPU * GetNsoExecutable -> GetExecutable * Unsigned comparison * Re-add cpu tracing * Config change * Remove cold methods from the translation cache on the cpu * Replace lock with try lock, pass new ATranslatorCache instead of ATranslator * Rebase fixups --- Ryujinx.HLE/Loaders/Executable.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'Ryujinx.HLE/Loaders/Executable.cs') diff --git a/Ryujinx.HLE/Loaders/Executable.cs b/Ryujinx.HLE/Loaders/Executable.cs index 6a3f0b97..a9850e4a 100644 --- a/Ryujinx.HLE/Loaders/Executable.cs +++ b/Ryujinx.HLE/Loaders/Executable.cs @@ -3,18 +3,21 @@ using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Kernel; using Ryujinx.HLE.Loaders.Executables; using Ryujinx.HLE.Utilities; +using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.IO; +using System.Linq; namespace Ryujinx.HLE.Loaders { class Executable { - private List Dynamic; + private AMemory Memory; - private Dictionary m_SymbolTable; + private List Dynamic; - public IReadOnlyDictionary SymbolTable => m_SymbolTable; + public ReadOnlyCollection SymbolTable; public string Name { get; private set; } @@ -23,16 +26,12 @@ namespace Ryujinx.HLE.Loaders public long ImageBase { get; private set; } public long ImageEnd { get; private set; } - private AMemory Memory; - private KMemoryManager MemoryManager; public Executable(IExecutable Exe, KMemoryManager MemoryManager, AMemory Memory, long ImageBase) { Dynamic = new List(); - m_SymbolTable = new Dictionary(); - FilePath = Exe.FilePath; if (FilePath != null) @@ -103,14 +102,18 @@ namespace Ryujinx.HLE.Loaders long SymEntSize = GetFirstValue(ElfDynTag.DT_SYMENT); + List Symbols = new List(); + while ((ulong)SymTblAddr < (ulong)StrTblAddr) { ElfSym Sym = GetSymbol(SymTblAddr, StrTblAddr); - m_SymbolTable.TryAdd(Sym.Value, Sym.Name); + Symbols.Add(Sym); SymTblAddr += SymEntSize; } + + SymbolTable = Array.AsReadOnly(Symbols.OrderBy(x => x.Value).ToArray()); } private ElfRel GetRelocation(long Position) -- cgit v1.2.3