Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Mono.Cecil.PE/ImageWriter.cs')
-rw-r--r--Mono.Cecil.PE/ImageWriter.cs34
1 files changed, 19 insertions, 15 deletions
diff --git a/Mono.Cecil.PE/ImageWriter.cs b/Mono.Cecil.PE/ImageWriter.cs
index 0648f59..a8a3fa8 100644
--- a/Mono.Cecil.PE/ImageWriter.cs
+++ b/Mono.Cecil.PE/ImageWriter.cs
@@ -48,9 +48,7 @@ namespace Mono.Cecil.PE {
ushort sections;
- internal long debug_header_entries_position;
-
- ImageWriter (ModuleDefinition module, string runtime_version, MetadataBuilder metadata, Disposable<Stream> stream, bool metadataOnly = false, ImageDebugHeader debugHeader = null)
+ ImageWriter (ModuleDefinition module, string runtime_version, MetadataBuilder metadata, Disposable<Stream> stream, bool metadataOnly = false)
: base (stream.value)
{
this.module = module;
@@ -63,18 +61,26 @@ namespace Mono.Cecil.PE {
this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64;
this.has_reloc = module.Architecture == TargetArchitecture.I386;
+ this.GetDebugHeader ();
this.GetWin32Resources ();
+ this.BuildTextMap ();
+ this.sections = (ushort) (has_reloc ? 2 : 1); // text + reloc?
+ }
+
+ void GetDebugHeader ()
+ {
+ var symbol_writer = metadata.symbol_writer;
+ if (symbol_writer != null)
+ debug_header = symbol_writer.GetDebugHeader ();
- debug_header = debugHeader;
if (module.HasDebugHeader) {
var header = module.GetDebugHeader ();
var deterministic = header.GetDeterministicEntry ();
- if (deterministic != null)
- debug_header = debug_header.AddDeterministicEntry ();
- }
+ if (deterministic == null)
+ return;
- this.BuildTextMap ();
- this.sections = (ushort)(has_reloc ? 2 : 1); // text + reloc?
+ debug_header = debug_header.AddDeterministicEntry ();
+ }
}
void GetWin32Resources ()
@@ -90,9 +96,9 @@ namespace Mono.Cecil.PE {
}
}
- public static ImageWriter CreateWriter (ModuleDefinition module, MetadataBuilder metadata, Disposable<Stream> stream, ImageDebugHeader debugHeader)
+ public static ImageWriter CreateWriter (ModuleDefinition module, MetadataBuilder metadata, Disposable<Stream> stream)
{
- var writer = new ImageWriter (module, module.runtime_version, metadata, stream, metadataOnly: false, debugHeader: debugHeader);
+ var writer = new ImageWriter (module, module.runtime_version, metadata, stream);
writer.BuildSections ();
return writer;
}
@@ -373,7 +379,7 @@ namespace Mono.Cecil.PE {
BaseStream.Seek (GetRVAFileOffset (section, rva), SeekOrigin.Begin);
}
- internal void MoveToRVA (TextSegment segment)
+ void MoveToRVA (TextSegment segment)
{
MoveToRVA (text, text_map.GetRVA (segment));
}
@@ -594,9 +600,7 @@ namespace Mono.Cecil.PE {
data_start += entry.Data.Length;
}
-
- debug_header_entries_position = BaseStream.Position;
-
+
for (var i = 0; i < debug_header.Entries.Length; i++) {
var entry = debug_header.Entries [i];
WriteBytes (entry.Data);