@@ -95,31 +95,34 @@ type idd =
9595 iddMajorVersion: int32 ; (* actually u16 in IMAGE_DEBUG_DIRECTORY *)
9696 iddMinorVersion: int32 ; (* actually u16 in IMAGE_DEBUG_DIRECTORY *)
9797 iddType: int32 ;
98+ iddTimestamp: int32 ;
9899 iddData: byte [];}
99100
100101let magicNumber = 0x53445352 L
101- let pdbGetDebugInfo ( mvid : byte []) ( filepath : string ) =
102+ let pdbGetDebugInfo ( mvid : byte []) ( timestamp : int32 ) ( filepath : string ) =
102103 let iddDataBuffer =
103104 let path = ( System.Text.Encoding.UTF8.GetBytes filepath)
104105 let buffer = Array.zeroCreate ( sizeof< int32> + mvid.Length + sizeof< int32> + path.Length + 1 )
105106
106- let offset , size = 0 , sizeof< int32> // Magic Number RSDS dword: 0x53445352L
107+ let struct ( offset , size ) = struct ( 0 , sizeof< int32>) // Magic Number RSDS dword: 0x53445352L
107108 Buffer.BlockCopy( BitConverter.GetBytes( magicNumber), 0 , buffer, offset, size)
108109
109- let offset , size = offset + size, mvid.Length // mvid Guid
110+ let struct ( offset , size ) = struct ( offset + size, mvid.Length) // mvid Guid
110111 Buffer.BlockCopy( mvid, 0 , buffer, offset, size)
111112
112- let offset , size = offset + size, sizeof< int32> // # of pdb files generated (1)
113+ let struct ( offset , size ) = struct ( offset + size, sizeof< int32>) // # of pdb files generated (1)
113114 Buffer.BlockCopy( BitConverter.GetBytes( 1 ), 0 , buffer, offset, size)
114115
115- let offset = offset + size // Path to pdb string
116- Buffer.BlockCopy( path, 0 , buffer, offset, path.Length)
116+ let struct ( offset , size ) = struct ( offset + size, path.Length) // Path to pdb string
117+ Buffer.BlockCopy( path, 0 , buffer, offset, size)
118+
117119 buffer
118120
119121 { iddCharacteristics = 0x0 ; // Reserved
120122 iddMajorVersion = 0x0 ; // VersionMajor should be 0
121123 iddMinorVersion = 0x0 ; // VersionMinor should be 0
122124 iddType = 0x2 ; // IMAGE_DEBUG_TYPE_CODEVIEW
125+ iddTimestamp = timestamp;
123126 iddData = iddDataBuffer } // Path name to the pdb file when built
124127
125128// Document checksum algorithms
@@ -215,15 +218,15 @@ let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) =
215218
216219 let s1 , s2 = '/' , '\\'
217220 let separator = if ( count name s1) >= ( count name s2) then s1 else s2
218-
221+
219222 let writer = new BlobBuilder()
220223 writer.WriteByte( byte( separator))
221224
222225 for part in name.Split( [| separator |] ) do
223226 let partIndex = MetadataTokens.GetHeapOffset( BlobHandle.op_ Implicit( metadata.GetOrAddBlobUTF8( part)))
224227 writer.WriteCompressedInteger( int( partIndex))
225228
226- metadata.GetOrAddBlob( writer);
229+ metadata.GetOrAddBlob( writer)
227230
228231 let corSymLanguageTypeFSharp = System.Guid( 0xAB4F38C9 u, 0xB6E6 us, 0x43ba us, 0xBE uy, 0x3B uy, 0x58 uy, 0x08 uy, 0x0B uy, 0x2C uy, 0xCC uy, 0xE3 uy)
229232 let documentIndex =
@@ -356,15 +359,15 @@ let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) =
356359 | None -> MetadataTokens.MethodDefinitionHandle( 0 )
357360 | Some x -> MetadataTokens.MethodDefinitionHandle( x)
358361
359- let serializer = PortablePdbBuilder( metadata, externalRowCounts, entryPoint, null )
362+ let serializer = PortablePdbBuilder( metadata, externalRowCounts, entryPoint, null )
360363 let blobBuilder = new BlobBuilder()
361- serializer.Serialize( blobBuilder) |> ignore
364+ let contentId = serializer.Serialize( blobBuilder)
362365
363366 reportTime showTimes " PDB: Created"
364367 use portablePdbStream = new FileStream( fpdb, FileMode.Create, FileAccess.ReadWrite)
365368 blobBuilder.WriteContentTo( portablePdbStream)
366369 reportTime showTimes " PDB: Closed"
367- pdbGetDebugInfo info.ModuleID fpdb
370+ pdbGetDebugInfo ( contentId.Guid.ToByteArray ()) ( int32 ( contentId.Stamp )) fpdb
368371
369372#if FX_ NO_ PDB_ WRITER
370373#else
@@ -485,6 +488,7 @@ let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info =
485488 iddMajorVersion = res.iddMajorVersion;
486489 iddMinorVersion = res.iddMinorVersion;
487490 iddType = res.iddType;
491+ iddTimestamp = info.Timestamp;
488492 iddData = res.iddData}
489493#endif
490494
0 commit comments