Some cleanup

This commit is contained in:
Thog 2018-05-11 17:33:56 +02:00
commit 36cb2deb5c
No known key found for this signature in database
GPG key ID: 0CD291558FAFDBC6
2 changed files with 5 additions and 62 deletions

View file

@ -8,39 +8,6 @@ namespace Ryujinx.Core.OsHle.Diagnostics
{ {
public static class Demangle public static class Demangle
{ {
/*
<builtin-type> ::= v # void
::= w # wchar_t
::= b # bool
::= c # char
::= a # signed char
::= h # unsigned char
::= s # short
::= t # unsigned short
::= i # int
::= j # unsigned int
::= l # long
::= m # unsigned long
::= x # long long, __int64
::= y # unsigned long long, __int64
::= n # __int128
::= o # unsigned __int128
::= f # float
::= d # double
::= e # long double, __float80
::= g # __float128
::= z # ellipsis
::= Dd # IEEE 754r decimal floating point (64 bits)
::= De # IEEE 754r decimal floating point (128 bits)
::= Df # IEEE 754r decimal floating point (32 bits)
::= Dh # IEEE 754r half-precision floating point (16 bits)
::= DF <number> _ # ISO/IEC TS 18661 binary floating point type _FloatN (N bits)
::= Di # char32_t
::= Ds # char16_t
::= Da # auto
::= Dc # decltype(auto)
::= Dn # std::nullptr_t (i.e., decltype(nullptr))
*/
private static readonly Dictionary<string, string> BuiltinTypes = new Dictionary<string, string> private static readonly Dictionary<string, string> BuiltinTypes = new Dictionary<string, string>
{ {
{ "v", "void" }, { "v", "void" },
@ -131,7 +98,6 @@ namespace Ryujinx.Core.OsHle.Diagnostics
} }
else else
{ {
// TODO: S<ref-id>_
int id = -1; int id = -1;
int underscorePos = compression.IndexOf('_'); int underscorePos = compression.IndexOf('_');
if (underscorePos == -1) if (underscorePos == -1)
@ -152,7 +118,6 @@ namespace Ryujinx.Core.OsHle.Diagnostics
{ {
if (canHaveUnqualifiedName) if (canHaveUnqualifiedName)
{ {
// TODO: check that
int tempPos = -1; int tempPos = -1;
List<string> type = ReadName(compression, compressionData, out tempPos); List<string> type = ReadName(compression, compressionData, out tempPos);
if (tempPos != -1 && type != null) if (tempPos != -1 && type != null)
@ -306,6 +271,7 @@ namespace Ryujinx.Core.OsHle.Diagnostics
{ {
temp = temp2 + " " + temp; temp = temp2 + " " + temp;
compressionData.Add(temp); compressionData.Add(temp);
// need more data // need more data
continue; continue;
} }
@ -315,6 +281,7 @@ namespace Ryujinx.Core.OsHle.Diagnostics
{ {
temp = temp + temp2; temp = temp + temp2;
compressionData.Add(temp); compressionData.Add(temp);
// need more data // need more data
continue; continue;
} }
@ -379,31 +346,8 @@ namespace Ryujinx.Core.OsHle.Diagnostics
return res; return res;
} }
public static string ReadNameString(string mangled, out int pos)
{
List<string> name = ReadName(mangled, new List<string>(), out pos);
if (pos == -1 || name == null || name.Count == 0)
{
return mangled;
}
foreach (var entry in name)
{
Console.WriteLine(entry);
}
return name[name.Count - 1];
}
/**
<mangled-name> ::= _Z <encoding>
<encoding> ::= <function name> <bare-function-type>
::= <data name>
::= <special-name>
*/
public static string Parse(string originalMangled) public static string Parse(string originalMangled)
{ {
Console.WriteLine("Mangled: " + originalMangled);
string mangled = originalMangled; string mangled = originalMangled;
List<string> compressionData = new List<string>(); List<string> compressionData = new List<string>();
string res = null; string res = null;
@ -416,7 +360,7 @@ namespace Ryujinx.Core.OsHle.Diagnostics
mangled = mangled.Substring(3); mangled = mangled.Substring(3);
compressionData = ReadName(mangled, compressionData, out pos); compressionData = ReadName(mangled, compressionData, out pos);
if (pos == -1) if (pos == -1)
return mangled; return originalMangled;
res = compressionData[compressionData.Count - 1]; res = compressionData[compressionData.Count - 1];
compressionData.Remove(res); compressionData.Remove(res);

View file

@ -305,10 +305,9 @@ namespace Ryujinx.Core.OsHle
{ {
SubName = $"Sub{Position:x16}"; SubName = $"Sub{Position:x16}";
} }
else if (SubName.StartsWith("_ZN")) else if (SubName.StartsWith("_Z"))
{ {
int i = 0; SubName = Demangle.Parse(SubName.Substring(3));
SubName = Demangle.ReadNameString(SubName.Substring(3), out i);
} }
Trace.AppendLine(" " + SubName + " (" + GetNsoNameAndAddress(Position) + ")"); Trace.AppendLine(" " + SubName + " (" + GetNsoNameAndAddress(Position) + ")");