You've already forked linux-packaging-mono
Imported Upstream version 5.2.0.175
Former-commit-id: bb0468d0f257ff100aa895eb5fe583fb5dfbf900
This commit is contained in:
parent
4bdbaf4a88
commit
966bba02bb
@@ -11,7 +11,9 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
using Mono.Cecil.Cil;
|
||||
using Mono.Cecil.Metadata;
|
||||
using Mono.Collections.Generic;
|
||||
|
||||
using RVA = System.UInt32;
|
||||
|
||||
@@ -70,10 +72,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 ();
|
||||
@@ -83,6 +86,7 @@ namespace Mono.Cecil.PE {
|
||||
ReadSections (sections);
|
||||
ReadCLIHeader ();
|
||||
ReadMetadata ();
|
||||
ReadDebugHeader ();
|
||||
|
||||
image.Kind = GetModuleKind (characteristics, subsystem);
|
||||
image.Characteristics = (ModuleCharacteristics) dll_characteristics;
|
||||
@@ -90,19 +94,7 @@ namespace Mono.Cecil.PE {
|
||||
|
||||
TargetArchitecture ReadArchitecture ()
|
||||
{
|
||||
var machine = ReadUInt16 ();
|
||||
switch (machine) {
|
||||
case 0x014c:
|
||||
return TargetArchitecture.I386;
|
||||
case 0x8664:
|
||||
return TargetArchitecture.AMD64;
|
||||
case 0x0200:
|
||||
return TargetArchitecture.IA64;
|
||||
case 0x01c4:
|
||||
return TargetArchitecture.ARMv7;
|
||||
}
|
||||
|
||||
throw new NotSupportedException ();
|
||||
return (TargetArchitecture) ReadUInt16 ();
|
||||
}
|
||||
|
||||
static ModuleKind GetModuleKind (ushort characteristics, ushort subsystem)
|
||||
@@ -318,11 +310,52 @@ namespace Mono.Cecil.PE {
|
||||
for (int i = 0; i < streams; i++)
|
||||
ReadMetadataStream (section);
|
||||
|
||||
if (image.TableHeap != null)
|
||||
ReadTableHeap ();
|
||||
|
||||
if (image.PdbHeap != null)
|
||||
ReadPdbHeap ();
|
||||
|
||||
if (image.TableHeap != null)
|
||||
ReadTableHeap ();
|
||||
}
|
||||
|
||||
void ReadDebugHeader ()
|
||||
{
|
||||
if (image.Debug.IsZero) {
|
||||
image.DebugHeader = new ImageDebugHeader (Empty<ImageDebugHeaderEntry>.Array);
|
||||
return;
|
||||
}
|
||||
|
||||
MoveTo (image.Debug);
|
||||
|
||||
var entries = new ImageDebugHeaderEntry [(int) image.Debug.Size / ImageDebugDirectory.Size];
|
||||
|
||||
for (int i = 0; i < entries.Length; i++) {
|
||||
var directory = new ImageDebugDirectory {
|
||||
Characteristics = ReadInt32 (),
|
||||
TimeDateStamp = ReadInt32 (),
|
||||
MajorVersion = ReadInt16 (),
|
||||
MinorVersion = ReadInt16 (),
|
||||
Type = (ImageDebugType) ReadInt32 (),
|
||||
SizeOfData = ReadInt32 (),
|
||||
AddressOfRawData = ReadInt32 (),
|
||||
PointerToRawData = ReadInt32 (),
|
||||
};
|
||||
|
||||
if (directory.AddressOfRawData == 0) {
|
||||
entries [i] = new ImageDebugHeaderEntry (directory, Empty<byte>.Array);
|
||||
continue;
|
||||
}
|
||||
|
||||
var position = Position;
|
||||
try {
|
||||
MoveTo ((uint) directory.PointerToRawData);
|
||||
var data = ReadBytes (directory.SizeOfData);
|
||||
entries [i] = new ImageDebugHeaderEntry (directory, data);
|
||||
} finally {
|
||||
Position = position;
|
||||
}
|
||||
}
|
||||
|
||||
image.DebugHeader = new ImageDebugHeader (entries);
|
||||
}
|
||||
|
||||
void ReadMetadataStream (Section section)
|
||||
@@ -393,6 +426,15 @@ namespace Mono.Cecil.PE {
|
||||
// Sorted 8
|
||||
heap.Sorted = ReadInt64 ();
|
||||
|
||||
if (image.PdbHeap != null) {
|
||||
for (int i = 0; i < Mixin.TableCount; i++) {
|
||||
if (!image.PdbHeap.HasTable ((Table) i))
|
||||
continue;
|
||||
|
||||
heap.Tables [i].Length = image.PdbHeap.TypeSystemTableRows [i];
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < Mixin.TableCount; i++) {
|
||||
if (!heap.HasTable ((Table) i))
|
||||
continue;
|
||||
@@ -430,7 +472,7 @@ namespace Mono.Cecil.PE {
|
||||
uint offset = (uint) BaseStream.Position - table_heap_offset - image.MetadataSection.PointerToRawData; // header
|
||||
|
||||
int stridx_size = image.StringHeap.IndexSize;
|
||||
int guididx_size = image.GuidHeap.IndexSize;
|
||||
int guididx_size = image.GuidHeap != null ? image.GuidHeap.IndexSize : 2;
|
||||
int blobidx_size = image.BlobHeap != null ? image.BlobHeap.IndexSize : 2;
|
||||
|
||||
var heap = image.TableHeap;
|
||||
|
||||
Reference in New Issue
Block a user