diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2018-09-19 17:07:56 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-09-19 17:07:56 -0300 |
| commit | 6d65e536642a7cff7afa34be10fdc8ca66a6e79c (patch) | |
| tree | 6e7344ea3f5ea7bb84c3b11c241ff7f579457c3e /Ryujinx.HLE/Loaders/Executable.cs | |
| parent | 99b2692425ff4045f103cde0745624b9b41d6fe6 (diff) | |
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
Diffstat (limited to 'Ryujinx.HLE/Loaders/Executable.cs')
| -rw-r--r-- | Ryujinx.HLE/Loaders/Executable.cs | 19 |
1 files changed, 11 insertions, 8 deletions
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<ElfDyn> Dynamic; + private AMemory Memory; - private Dictionary<long, string> m_SymbolTable; + private List<ElfDyn> Dynamic; - public IReadOnlyDictionary<long, string> SymbolTable => m_SymbolTable; + public ReadOnlyCollection<ElfSym> 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<ElfDyn>(); - m_SymbolTable = new Dictionary<long, string>(); - FilePath = Exe.FilePath; if (FilePath != null) @@ -103,14 +102,18 @@ namespace Ryujinx.HLE.Loaders long SymEntSize = GetFirstValue(ElfDynTag.DT_SYMENT); + List<ElfSym> Symbols = new List<ElfSym>(); + 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) |
