linker: add support for non default debug symbol format
authorJb Evain <jbevain@gmail.com>
Wed, 6 Apr 2011 17:15:53 +0000 (19:15 +0200)
committerJb Evain <jbevain@gmail.com>
Wed, 6 Apr 2011 17:29:07 +0000 (19:29 +0200)
mcs/tools/linker/Mono.Linker.Steps/OutputStep.cs
mcs/tools/linker/Mono.Linker/LinkContext.cs

index d2b137caf07562afdeeda52a1dd2d764e2faacda..874d25d5b184e5eb7f5ad954e9bb547f9c2ae9dd 100644 (file)
@@ -30,6 +30,7 @@ using System;
 using System.IO;
 
 using Mono.Cecil;
+using Mono.Cecil.Cil;
 
 namespace Mono.Linker.Steps {
 
@@ -83,7 +84,10 @@ namespace Mono.Linker.Steps {
                        if (!assembly.MainModule.HasSymbols)
                                return parameters;
 
-                       parameters.WriteSymbols = true;
+                       if (Context.SymbolWriterProvider != null)
+                               parameters.SymbolWriterProvider = Context.SymbolWriterProvider;
+                       else
+                               parameters.WriteSymbols = true;
                        return parameters;
                }
 
index a9ce05fb3ce59213501da86162e154f1df559975..183daf80478b5405dd6ea23f2d6dd7d9d8138f00 100644 (file)
@@ -29,7 +29,9 @@
 using System;
 using System.Collections;
 using System.IO;
+
 using Mono.Cecil;
+using Mono.Cecil.Cil;
 
 namespace Mono.Linker {
 
@@ -45,6 +47,8 @@ namespace Mono.Linker {
                AssemblyResolver _resolver;
 
                ReaderParameters _readerParameters;
+               ISymbolReaderProvider _symbolReaderProvider;
+               ISymbolWriterProvider _symbolWriterProvider;
 
                AnnotationStore _annotations;
 
@@ -79,6 +83,19 @@ namespace Mono.Linker {
                        get { return _resolver; }
                }
 
+               public ISymbolReaderProvider SymbolReaderProvider {
+                       get { return _symbolReaderProvider; }
+                       set {
+                               _symbolReaderProvider = value;
+                               _readerParameters.SymbolReaderProvider = value;
+                       }
+               }
+
+               public ISymbolWriterProvider SymbolWriterProvider {
+                       get { return _symbolWriterProvider; }
+                       set { _symbolWriterProvider = value; }
+               }
+
                public LinkContext (Pipeline pipeline)
                        : this (pipeline, new AssemblyResolver ())
                {
@@ -149,7 +166,14 @@ namespace Mono.Linker {
                public void SafeReadSymbols (AssemblyDefinition assembly)
                {
                        try {
-                               assembly.MainModule.ReadSymbols ();
+                               if (_symbolReaderProvider != null) {
+                                       var symbolReader = _symbolReaderProvider.GetSymbolReader (
+                                               assembly.MainModule,
+                                               assembly.MainModule.FullyQualifiedName);
+
+                                       assembly.MainModule.ReadSymbols (symbolReader);
+                               } else
+                                       assembly.MainModule.ReadSymbols ();
                        } catch {}
                }