aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/Loaders/Executable.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-09-19 17:07:56 -0300
committerGitHub <noreply@github.com>2018-09-19 17:07:56 -0300
commit6d65e536642a7cff7afa34be10fdc8ca66a6e79c (patch)
tree6e7344ea3f5ea7bb84c3b11c241ff7f579457c3e /Ryujinx.HLE/Loaders/Executable.cs
parent99b2692425ff4045f103cde0745624b9b41d6fe6 (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.cs19
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)