internal void WriteSymbolTokenMap() { for (int i = 0; i < resolvedTokens.Count; i++) { int newToken = resolvedTokens[i]; // The symbol API doesn't support remapping arbitrary integers, the types have to be the same, // so we copy the type from the newToken, because our pseudo tokens don't have a type. // (see MethodToken.SymbolToken) int oldToken = (i + 1) | (newToken & ~0xFFFFFF); SymbolSupport.RemapToken(symbolWriter, oldToken, newToken); } }
internal ModuleBuilder(AssemblyBuilder asm, string moduleName, string fileName, bool emitSymbolInfo) : base(asm.universe) { this.asm = asm; this.moduleName = moduleName; this.fileName = fileName; if (emitSymbolInfo) { symbolWriter = SymbolSupport.CreateSymbolWriterFor(this); } // <Module> must be the first record in the TypeDef table moduleType = new TypeBuilder(this, "<Module>", null, 0); types.Add(moduleType); }
private void WriteDebugDirectory(MetadataWriter mw) { if (DebugDirectoryLength != 0) { IMAGE_DEBUG_DIRECTORY idd = new IMAGE_DEBUG_DIRECTORY(); idd.Characteristics = 0; idd.TimeDateStamp = peWriter.Headers.FileHeader.TimeDateStamp; byte[] buf = SymbolSupport.GetDebugInfo(moduleBuilder.symbolWriter, ref idd); idd.PointerToRawData = (DebugDirectoryRVA - BaseRVA) + DebugDirectoryLength + PointerToRawData; mw.Write(idd.Characteristics); mw.Write(idd.TimeDateStamp); mw.Write(idd.MajorVersion); mw.Write(idd.MinorVersion); mw.Write(idd.Type); mw.Write(idd.SizeOfData); mw.Write(idd.AddressOfRawData); mw.Write(idd.PointerToRawData); mw.Write(buf); } }