diff options
author | Jb Evain <jb@evain.net> | 2017-02-11 22:30:58 +0300 |
---|---|---|
committer | Jb Evain <jb@evain.net> | 2017-02-11 22:30:58 +0300 |
commit | 6336522ebe1304cf1c5d57cc816c1aa36eca5b5b (patch) | |
tree | a7f1ce6ff513d3e8c485a361fef29176c59dc14c | |
parent | cc917f04ec7d54915d374221c109526f1e215be2 (diff) |
Do not require loading native pdb reader by default if we only find portable pdbs
-rw-r--r-- | Mono.Cecil.Cil/Symbols.cs | 36 | ||||
-rw-r--r-- | symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs (renamed from symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs) | 4 | ||||
-rw-r--r-- | symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs (renamed from symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs) | 4 | ||||
-rw-r--r-- | symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs | 29 |
4 files changed, 40 insertions, 33 deletions
diff --git a/Mono.Cecil.Cil/Symbols.cs b/Mono.Cecil.Cil/Symbols.cs index b237ba7..c3c21ca 100644 --- a/Mono.Cecil.Cil/Symbols.cs +++ b/Mono.Cecil.Cil/Symbols.cs @@ -642,8 +642,11 @@ namespace Mono.Cecil.Cil { public ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName) { var pdb_file_name = Mixin.GetPdbFileName (fileName); + if (File.Exists (pdb_file_name)) - return SymbolProvider.GetReaderProvider (SymbolKind.Pdb).GetSymbolReader (module, fileName); + return Mixin.IsPortablePdb (Mixin.GetPdbFileName (fileName)) + ? new PortablePdbReaderProvider ().GetSymbolReader (module, fileName) + : SymbolProvider.GetReaderProvider (SymbolKind.NativePdb).GetSymbolReader (module, fileName); var mdb_file_name = Mixin.GetMdbFileName (fileName); if (File.Exists (mdb_file_name)) @@ -664,8 +667,9 @@ namespace Mono.Cecil.Cil { #if !PCL enum SymbolKind { - Pdb = 1, - Mdb = 2, + NativePdb, + PortablePdb, + Mdb, } static class SymbolProvider { @@ -744,8 +748,10 @@ namespace Mono.Cecil.Cil { public static SymbolKind GetSymbolKind (Type type) { - if (type.Name.Contains (SymbolKind.Pdb.ToString ())) - return SymbolKind.Pdb; + if (type.Name.Contains (SymbolKind.PortablePdb.ToString ())) + return SymbolKind.PortablePdb; + if (type.Name.Contains (SymbolKind.NativePdb.ToString ())) + return SymbolKind.NativePdb; if (type.Name.Contains (SymbolKind.Mdb.ToString ())) return SymbolKind.Mdb; @@ -810,6 +816,26 @@ namespace Mono.Cecil { { return assemblyFileName + ".mdb"; } + + public static bool IsPortablePdb (string fileName) + { + using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) + return IsPortablePdb (file); + } + + public static bool IsPortablePdb (Stream stream) + { + const uint ppdb_signature = 0x424a5342; + + var position = stream.Position; + try { + var reader = new BinaryReader (stream); + return reader.ReadUInt32 () == ppdb_signature; + } finally { + stream.Position = position; + } + } + } } diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs b/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs index 317a496..4ad1bc4 100644 --- a/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs +++ b/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs @@ -20,7 +20,7 @@ using Mono.Cecil.Cil; namespace Mono.Cecil.Pdb { - public class PdbReader : ISymbolReader { + public class NativePdbReader : ISymbolReader { int age; Guid guid; @@ -29,7 +29,7 @@ namespace Mono.Cecil.Pdb { readonly Dictionary<string, Document> documents = new Dictionary<string, Document> (); readonly Dictionary<uint, PdbFunction> functions = new Dictionary<uint, PdbFunction> (); - internal PdbReader (Disposable<Stream> file) + internal NativePdbReader (Disposable<Stream> file) { this.pdb_file = file; } diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs b/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs index 553ef2f..28df637 100644 --- a/symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs +++ b/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs @@ -19,13 +19,13 @@ using Mono.Collections.Generic; namespace Mono.Cecil.Pdb { - public class PdbWriter : Cil.ISymbolWriter { + public class NativePdbWriter : Cil.ISymbolWriter { readonly ModuleDefinition module; readonly SymWriter writer; readonly Dictionary<string, SymDocumentWriter> documents; - internal PdbWriter (ModuleDefinition module, SymWriter writer) + internal NativePdbWriter (ModuleDefinition module, SymWriter writer) { this.module = module; this.writer = writer; diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs b/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs index c397398..ced9729 100644 --- a/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs +++ b/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs @@ -22,7 +22,7 @@ namespace Mono.Cecil.Pdb { Mixin.CheckModule (module); Mixin.CheckFileName (fileName); - return new PdbReader (Disposable.Owned (File.OpenRead (Mixin.GetPdbFileName (fileName)) as Stream)); + return new NativePdbReader (Disposable.Owned (File.OpenRead (Mixin.GetPdbFileName (fileName)) as Stream)); } public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream) @@ -30,7 +30,7 @@ namespace Mono.Cecil.Pdb { Mixin.CheckModule (module); Mixin.CheckStream (symbolStream); - return new PdbReader (Disposable.NotOwned (symbolStream)); + return new NativePdbReader (Disposable.NotOwned (symbolStream)); } } @@ -41,7 +41,7 @@ namespace Mono.Cecil.Pdb { Mixin.CheckModule (module); Mixin.CheckFileName (fileName); - return IsPortablePdb (Mixin.GetPdbFileName (fileName)) + return Mixin.IsPortablePdb (Mixin.GetPdbFileName (fileName)) ? new PortablePdbReaderProvider ().GetSymbolReader (module, fileName) : new NativePdbReaderProvider ().GetSymbolReader (module, fileName); } @@ -52,29 +52,10 @@ namespace Mono.Cecil.Pdb { Mixin.CheckStream (symbolStream); Mixin.CheckReadSeek (symbolStream); - return IsPortablePdb (symbolStream) + return Mixin.IsPortablePdb (symbolStream) ? new PortablePdbReaderProvider ().GetSymbolReader (module, symbolStream) : new NativePdbReaderProvider ().GetSymbolReader (module, symbolStream); } - - static bool IsPortablePdb (string fileName) - { - using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) - return IsPortablePdb (file); - } - - static bool IsPortablePdb (Stream stream) - { - const uint ppdb_signature = 0x424a5342; - - var position = stream.Position; - try { - var reader = new BinaryReader (stream); - return reader.ReadUInt32 () == ppdb_signature; - } finally { - stream.Position = position; - } - } } #if !READ_ONLY @@ -86,7 +67,7 @@ namespace Mono.Cecil.Pdb { Mixin.CheckModule (module); Mixin.CheckFileName (fileName); - return new PdbWriter (module, CreateWriter (module, Mixin.GetPdbFileName (fileName))); + return new NativePdbWriter (module, CreateWriter (module, Mixin.GetPdbFileName (fileName))); } static SymWriter CreateWriter (ModuleDefinition module, string pdb) |