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:
authorRolf Bjarne Kvinge <rolf@xamarin.com>2017-02-21 19:17:38 +0300
committerRolf Bjarne Kvinge <rolf@xamarin.com>2017-02-21 19:20:53 +0300
commit2c43e7d803d818b9d3824755b62d8891a1126f39 (patch)
treed3208639708ca0366ae2e965873126335b83a6cb
parent7f2ea29930f3d7ea771411eff4a23c9f7c18c272 (diff)
Preserve PE timestamps.
Read PE timestamps from PE files, and write the same value back. This makes Cecil's output deterministic when used with C# or VB's /deterministic compiler option.
-rw-r--r--Mono.Cecil.PE/Image.cs1
-rw-r--r--Mono.Cecil.PE/ImageReader.cs3
-rw-r--r--Mono.Cecil/AssemblyWriter.cs2
-rw-r--r--Mono.Cecil/ModuleDefinition.cs2
4 files changed, 6 insertions, 2 deletions
diff --git a/Mono.Cecil.PE/Image.cs b/Mono.Cecil.PE/Image.cs
index 1ff06d7..b618053 100644
--- a/Mono.Cecil.PE/Image.cs
+++ b/Mono.Cecil.PE/Image.cs
@@ -33,6 +33,7 @@ namespace Mono.Cecil.PE {
public Section MetadataSection;
public uint EntryPointToken;
+ public uint TimeStamp;
public ModuleAttributes Attributes;
public DataDirectory Debug;
diff --git a/Mono.Cecil.PE/ImageReader.cs b/Mono.Cecil.PE/ImageReader.cs
index fc6b4fc..6115f37 100644
--- a/Mono.Cecil.PE/ImageReader.cs
+++ b/Mono.Cecil.PE/ImageReader.cs
@@ -70,10 +70,11 @@ namespace Mono.Cecil.PE {
ushort sections = ReadUInt16 ();
// TimeDateStamp 4
+ image.TimeStamp = ReadUInt32 ();
// PointerToSymbolTable 4
// NumberOfSymbols 4
// OptionalHeaderSize 2
- Advance (14);
+ Advance (10);
// Characteristics 2
ushort characteristics = ReadUInt16 ();
diff --git a/Mono.Cecil/AssemblyWriter.cs b/Mono.Cecil/AssemblyWriter.cs
index 742f0a5..ea0e665 100644
--- a/Mono.Cecil/AssemblyWriter.cs
+++ b/Mono.Cecil/AssemblyWriter.cs
@@ -866,7 +866,7 @@ namespace Mono.Cecil {
this.module = module;
this.text_map = CreateTextMap ();
this.fq_name = fq_name;
- this.time_stamp = (uint) DateTime.UtcNow.Subtract (new DateTime (1970, 1, 1)).TotalSeconds;
+ this.time_stamp = module.timestamp;
this.symbol_writer_provider = symbol_writer_provider;
if (symbol_writer == null && module.HasImage && module.Image.HasDebugTables ()) {
diff --git a/Mono.Cecil/ModuleDefinition.cs b/Mono.Cecil/ModuleDefinition.cs
index 79bbf3c..10d4716 100644
--- a/Mono.Cecil/ModuleDefinition.cs
+++ b/Mono.Cecil/ModuleDefinition.cs
@@ -260,6 +260,7 @@ namespace Mono.Cecil {
ModuleAttributes attributes;
ModuleCharacteristics characteristics;
Guid mvid;
+ internal uint timestamp;
internal AssemblyDefinition assembly;
MethodDefinition entry_point;
@@ -568,6 +569,7 @@ namespace Mono.Cecil {
this.attributes = image.Attributes;
this.characteristics = image.Characteristics;
this.file_name = image.FileName;
+ this.timestamp = image.TimeStamp;
this.reader = new MetadataReader (this);
}