コード例 #1
0
        private RVA WriteUnresolvedMethodBody(MethodDefinition method)
        {
            var code_reader = metadata.module.reader.code;

            var  raw_body   = code_reader.PatchRawMethodBody(method, this, out int code_size, out MetadataToken local_var_token);
            bool fat_header = (raw_body.buffer[0] & 0x3) == 0x3;

            if (fat_header)
            {
                Align(4);
            }

            uint rva = BeginMethod();

            if (fat_header || !GetOrMapTinyMethodBody(raw_body, ref rva))
            {
                WriteBytes(raw_body);
            }

            if (method.debug_info == null)
            {
                return(rva);
            }

            ISymbolWriter symbol_writer = metadata.symbol_writer;

            if (symbol_writer != null)
            {
                method.debug_info.code_size       = code_size;
                method.debug_info.local_var_token = local_var_token;
                symbol_writer.Write(method.debug_info);
            }

            return(rva);
        }
コード例 #2
0
ファイル: PdbWriter.cs プロジェクト: sidecut/xaeios
 internal PdbWriter(ISymbolWriter writer, ModuleDefinition module, string pdb)
 {
     m_writer = writer;
     m_module = module;
     m_documents = new Hashtable ();
     m_pdb = pdb;
 }
コード例 #3
0
 internal PdbWriter(ISymbolWriter writer, ModuleDefinition module, string pdb)
 {
     m_writer    = writer;
     m_module    = module;
     m_documents = new Hashtable();
     m_pdb       = pdb;
 }
コード例 #4
0
        private uint WriteUnresolvedMethodBody(MethodDefinition method)
        {
            int           code_size;
            MetadataToken local_var_token;
            ByteBuffer    byteBuffer = metadata.module.reader.code.PatchRawMethodBody(method, this, out code_size, out local_var_token);
            bool          num        = (byteBuffer.buffer[0] & 3) == 3;

            if (num)
            {
                Align(4);
            }
            uint result = BeginMethod();

            if (num || !GetOrMapTinyMethodBody(byteBuffer, ref result))
            {
                base.WriteBytes(byteBuffer);
            }
            if (method.debug_info == null)
            {
                return(result);
            }
            ISymbolWriter symbol_writer = metadata.symbol_writer;

            if (symbol_writer != null)
            {
                method.debug_info.code_size       = code_size;
                method.debug_info.local_var_token = local_var_token;
                symbol_writer.Write(method.debug_info);
            }
            return(result);
        }
コード例 #5
0
        internal ModuleBuilder(AssemblyBuilder assb, string name, string fullyqname, bool emitSymbolInfo, bool transient)
        {
            this.name      = this.scopename = name;
            this.fqname    = fullyqname;
            this.assembly  = this.assemblyb = assb;
            this.transient = transient;
            // to keep mcs fast we do not want CryptoConfig wo be involved to create the RNG
            guid = Guid.FastNewGuidArray();
            // guid = Guid.NewGuid().ToByteArray ();
            table_idx  = get_next_table_index(this, 0x00, true);
            name_cache = new Hashtable();

            basic_init(this);

            CreateGlobalType();

            if (emitSymbolInfo)
            {
                Assembly asm = Assembly.LoadWithPartialName("Mono.CompilerServices.SymbolWriter");
                Type     t   = asm.GetType("Mono.CompilerServices.SymbolWriter.SymbolWriterImpl");
                if (t != null)
                {
                    symbolWriter = (ISymbolWriter)Activator.CreateInstance(t, new object[] { this });
                    string fileName = fqname;
                    if (assemblyb.AssemblyDir != null)
                    {
                        fileName = Path.Combine(assemblyb.AssemblyDir, fileName);
                    }
                    symbolWriter.Initialize(IntPtr.Zero, fileName, true);
                }
            }
        }
コード例 #6
0
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     for (int i = 0; i < this.m_DocumentCount; i++)
     {
         this.m_Documents[i].EmitLineNumberInfo(symWriter);
     }
 }
コード例 #7
0
        internal void GenerateDebugInfo(ISymbolWriter symbolWriter)
        {
            if (sequencePointLists != null)
            {
                SequencePointList first = (SequencePointList)sequencePointLists [0];
                SequencePointList last  = (SequencePointList)sequencePointLists [sequencePointLists.Count - 1];
                symbolWriter.SetMethodSourceRange(first.Document, first.StartLine, first.StartColumn, last.Document, last.EndLine, last.EndColumn);

                foreach (SequencePointList list in sequencePointLists)
                {
                    symbolWriter.DefineSequencePoints(list.Document, list.GetOffsets(), list.GetLines(), list.GetColumns(), list.GetEndLines(), list.GetEndColumns());
                }

                if (locals != null)
                {
                    foreach (LocalBuilder local in locals)
                    {
                        if (local.Name != null && local.Name.Length > 0)
                        {
                            SignatureHelper sighelper = SignatureHelper.GetLocalVarSigHelper(module as ModuleBuilder);
                            sighelper.AddArgument(local.LocalType);
                            byte[] signature = sighelper.GetSignature();
                            symbolWriter.DefineLocalVariable(local.Name, FieldAttributes.Public, signature, SymAddressKind.ILOffset, local.position, 0, 0, local.StartOffset, local.EndOffset);
                        }
                    }
                }
                sequencePointLists = null;
            }
        }
コード例 #8
0
 // Token: 0x060049E1 RID: 18913 RVA: 0x0010B160 File Offset: 0x00109360
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     for (int i = 0; i < this.m_DocumentCount; i++)
     {
         this.m_Documents[i].EmitLineNumberInfo(symWriter);
     }
 }
コード例 #9
0
ファイル: AssemblyBuilder.cs プロジェクト: uonun/coreclr
        private ModuleBuilder DefineDynamicModuleInternalNoLock(
            String name,
            bool emitSymbolInfo,         // specify if emit symbol info or not
            ref StackCrawlMark stackMark)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (name.Length == 0)
            {
                throw new ArgumentException(SR.Argument_EmptyName, nameof(name));
            }
            if (name[0] == '\0')
            {
                throw new ArgumentException(SR.Argument_InvalidName, nameof(name));
            }

            BCLDebug.Log("DYNIL", "## DYNIL LOGGING: AssemblyBuilder.DefineDynamicModule( " + name + " )");

            Debug.Assert(m_assemblyData != null, "m_assemblyData is null in DefineDynamicModuleInternal");

            ModuleBuilder dynModule;
            ISymbolWriter writer             = null;
            IntPtr        pInternalSymWriter = new IntPtr();

            // create the dynamic module- only one ModuleBuilder per AssemblyBuilder can be created
            if (m_fManifestModuleUsedAsDefinedModule == true)
            {
                throw new InvalidOperationException(SR.InvalidOperation_NoMultiModuleAssembly);
            }

            // Init(...) has already been called on m_manifestModuleBuilder in InitManifestModule()
            dynModule = m_manifestModuleBuilder;

            // Create the symbol writer
            if (emitSymbolInfo)
            {
                writer = SymWrapperCore.SymWriter.CreateSymWriter();

                String fileName = "Unused"; // this symfile is never written to disk so filename does not matter.

                // Pass the "real" module to the VM
                pInternalSymWriter = ModuleBuilder.nCreateISymWriterForDynamicModule(dynModule.InternalModule, fileName);

                // In Telesto, we took the SetUnderlyingWriter method private as it's a very rickety method.
                // This might someday be a good move for the desktop CLR too.
                ((SymWrapperCore.SymWriter)writer).InternalSetUnderlyingWriter(pInternalSymWriter);
            } // Creating the symbol writer

            dynModule.SetSymWriter(writer);
            m_assemblyData.AddModule(dynModule);

            if (dynModule == m_manifestModuleBuilder)
            {   // We are reusing manifest module as user-defined dynamic module
                m_fManifestModuleUsedAsDefinedModule = true;
            }

            return(dynModule);
        } // DefineDynamicModuleInternalNoLock
コード例 #10
0
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     for (int index = 0; index < this.m_DocumentCount; ++index)
     {
         this.m_Documents[index].EmitLineNumberInfo(symWriter);
     }
 }
コード例 #11
0
ファイル: Driver.cs プロジェクト: afrog33k/csnative
 /// <summary>
 /// </summary>
 /// <param name="filename">
 /// </param>
 public static void Convert(string filename, ISymbolWriter symbolWriter)
 {
     using (var stream = File.OpenRead(filename))
     {
         var funcs = PdbFile.LoadFunctions(stream, true);
         Convert(funcs, symbolWriter);
     }
 }
コード例 #12
0
ファイル: Driver.cs プロジェクト: ARLM-Attic/cs-native
 /// <summary>
 /// </summary>
 /// <param name="filename">
 /// </param>
 public static void Convert(string filename, ISymbolWriter symbolWriter)
 {
     using (var stream = File.OpenRead(filename))
     {
         var funcs = PdbFile.LoadFunctions(stream, true);
         Convert(funcs, symbolWriter);
     }
 }
コード例 #13
0
        private void GetDebugHeader()
        {
            ISymbolWriter writer = this.metadata.symbol_writer;

            if ((writer != null) && !writer.GetDebugHeader(out this.debug_directory, out this.debug_data))
            {
                this.debug_data = Empty <byte> .Array;
            }
        }
コード例 #14
0
ファイル: Driver.cs プロジェクト: ARLM-Attic/cs-native
        /// <summary>
        /// </summary>
        /// <param name="assembly">
        /// </param>
        /// <param name="functions">
        /// </param>
        /// <param name="symbolWriter">
        /// </param>
        internal static void Convert(IEnumerable <PdbFunction> functions, ISymbolWriter symbolWriter)
        {
            var converter = new Converter(symbolWriter);

            foreach (var function in functions)
            {
                converter.ConvertFunction(function);
            }
        }
コード例 #15
0
        internal ModuleBuilder DefineDynamicModuleInternal(
            String name,
            bool emitSymbolInfo,                // specify if emit symbol info or not
            ref StackCrawlMark stackMark)
        {
            BCLDebug.Log("DYNIL", "## DYNIL LOGGING: AssemblyBuilder.DefineDynamicModule( " + name + " )");

            BCLDebug.Assert(m_assemblyData != null, "m_assemblyData is null in DefineDynamicModuleInternal");

            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (name.Length == 0)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_EmptyName"), "name");
            }
            if (name[0] == '\0')
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_InvalidName"), "name");
            }

            m_assemblyData.CheckNameConflict(name);

            // create the dynamic module
            ModuleBuilder dynModule = nDefineDynamicModule(this, emitSymbolInfo, name, ref stackMark);
            ISymbolWriter writer    = null;

            if (emitSymbolInfo)
            {
                // create the default SymWriter
                Assembly assem     = LoadISymWrapper();
                Type     symWriter = assem.GetType("System.Diagnostics.SymbolStore.SymWriter", true, false);
                if (symWriter != null && !symWriter.IsVisible)
                {
                    symWriter = null;
                }

                if (symWriter == null)
                {
                    // cannot find SymWriter
                    throw new ExecutionEngineException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString(ResId.MissingType), "SymWriter"));
                }
                try {
                    (new PermissionSet(PermissionState.Unrestricted)).Assert();
                    writer = (ISymbolWriter)Activator.CreateInstance(symWriter);
                }
                finally {
                    CodeAccessPermission.RevertAssert();
                }
            }

            dynModule.Init(name, null, writer);
            m_assemblyData.AddModule(dynModule);
            return(dynModule);
        }
コード例 #16
0
        public static void WriteModuleTo(ModuleDefinition module, Stream stream, WriterParameters parameters)
        {
            AssemblyNameDefinition name;

            if ((int)(module.Attributes & ModuleAttributes.ILOnly) == 0)
            {
                throw new NotSupportedException("Writing mixed-mode assemblies is not supported");
            }
            if (module.HasImage && module.ReadingMode == ReadingMode.Deferred)
            {
                ImmediateModuleReader.ReadModule(module);
            }
            module.MetadataSystem.Clear();
            if (module.assembly != null)
            {
                name = module.assembly.Name;
            }
            else
            {
                name = null;
            }
            AssemblyNameDefinition publicKey           = name;
            string fullyQualifiedName                  = stream.GetFullyQualifiedName();
            ISymbolWriterProvider symbolWriterProvider = parameters.SymbolWriterProvider;

            if (symbolWriterProvider == null && parameters.WriteSymbols)
            {
                symbolWriterProvider = SymbolProvider.GetPlatformWriterProvider();
            }
            ISymbolWriter symbolWriter = ModuleWriter.GetSymbolWriter(module, fullyQualifiedName, symbolWriterProvider);

            if (parameters.StrongNameKeyPair != null && publicKey != null)
            {
                publicKey.PublicKey = parameters.StrongNameKeyPair.PublicKey;
                ModuleDefinition attributes = module;
                attributes.Attributes = attributes.Attributes | ModuleAttributes.StrongNameSigned;
            }
            MetadataBuilder metadataBuilder = new MetadataBuilder(module, fullyQualifiedName, symbolWriterProvider, symbolWriter);

            ModuleWriter.BuildMetadata(module, metadataBuilder);
            if (module.symbol_reader != null)
            {
                module.symbol_reader.Dispose();
            }
            ImageWriter imageWriter = ImageWriter.CreateWriter(module, metadataBuilder, stream);

            imageWriter.WriteImage();
            if (parameters.StrongNameKeyPair != null)
            {
                CryptoService.StrongName(stream, imageWriter, parameters.StrongNameKeyPair);
            }
            if (symbolWriter != null)
            {
                symbolWriter.Dispose();
            }
        }
コード例 #17
0
ファイル: Driver.cs プロジェクト: afrog33k/csnative
 /// <summary>
 /// </summary>
 /// <param name="filename">
 /// </param>
 /// <param name="symbolWriter">
 /// </param>
 internal Converter(string filename, ISymbolWriter symbolWriter)
 {
     this.symbolWriter = symbolWriter;
     using (var stream = File.OpenRead(filename))
     {
         foreach (var pdbFunc in PdbFile.LoadFunctions(stream, true))
         {
             funcs[pdbFunc.token] = pdbFunc;
         }
     }
 }
コード例 #18
0
 internal void GenerateDebugInfo(ISymbolWriter symbolWriter)
 {
     if (this.ilgen != null && this.ilgen.HasDebugInfo)
     {
         SymbolToken symbolToken = new SymbolToken(this.GetToken().Token);
         symbolWriter.OpenMethod(symbolToken);
         symbolWriter.SetSymAttribute(symbolToken, "__name", Encoding.UTF8.GetBytes(this.Name));
         this.ilgen.GenerateDebugInfo(symbolWriter);
         symbolWriter.CloseMethod();
     }
 }
コード例 #19
0
 internal void GenerateDebugInfo(ISymbolWriter symbolWriter)
 {
     if (ilgen != null && ilgen.HasDebugInfo)
     {
         SymbolToken token = new SymbolToken(GetToken().Token);
         symbolWriter.OpenMethod(token);
         symbolWriter.SetSymAttribute(token, "__name", System.Text.Encoding.UTF8.GetBytes(Name));
         ilgen.GenerateDebugInfo(symbolWriter);
         symbolWriter.CloseMethod();
     }
 }
コード例 #20
0
ファイル: Driver.cs プロジェクト: ARLM-Attic/cs-native
 /// <summary>
 /// </summary>
 /// <param name="filename">
 /// </param>
 /// <param name="symbolWriter">
 /// </param>
 internal Converter(string filename, ISymbolWriter symbolWriter)
 {
     this.symbolWriter = symbolWriter;
     using (var stream = File.OpenRead(filename))
     {
         foreach (var pdbFunc in PdbFile.LoadFunctions(stream, true))
         {
             funcs[pdbFunc.token] = pdbFunc;
         }
     }
 }
コード例 #21
0
            private void BuildTypeParameterDisplayFromSymbol(ISymbol symbol, ISymbolWriter writer, INode enclosingDeclaraiton, TypeFormatFlags flags = TypeFormatFlags.None, Stack <ISymbol> symbolStack = null)
            {
                var targetSymbol = m_checker.GetTargetSymbol(symbol);

                if ((targetSymbol.Flags & SymbolFlags.Class) != SymbolFlags.None ||
                    (targetSymbol.Flags & SymbolFlags.Interface) != SymbolFlags.None ||
                    (targetSymbol.Flags & SymbolFlags.TypeAlias) != SymbolFlags.None)
                {
                    BuildDisplayForTypeParametersAndDelimiters(m_checker.GetLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), writer, enclosingDeclaraiton, flags, symbolStack);
                }
            }
コード例 #22
0
 // Token: 0x06004A52 RID: 19026 RVA: 0x0010CC38 File Offset: 0x0010AE38
 internal virtual void EmitLocalSymInfo(ISymbolWriter symWriter)
 {
     for (int i = 0; i < this.m_iLocalSymCount; i++)
     {
         symWriter.DefineLocalVariable(this.m_strName[i], FieldAttributes.PrivateScope, this.m_ubSignature[i], SymAddressKind.ILOffset, this.m_iLocalSlot[i], 0, 0, this.m_iStartOffset[i], this.m_iEndOffset[i]);
     }
     for (int i = 0; i < this.m_iNameSpaceCount; i++)
     {
         symWriter.UsingNamespace(this.m_namespace[i]);
     }
 }
コード例 #23
0
        private ModuleBuilder DefineDynamicModuleInternalNoLock(
            string name,
            bool emitSymbolInfo,         // specify if emit symbol info or not
            ref StackCrawlMark stackMark)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (name.Length == 0)
            {
                throw new ArgumentException(SR.Argument_EmptyName, nameof(name));
            }
            if (name[0] == '\0')
            {
                throw new ArgumentException(SR.Argument_InvalidName, nameof(name));
            }

            // Create the dynamic module- only one ModuleBuilder per AssemblyBuilder can be created.
            if (_isManifestModuleUsedAsDefinedModule)
            {
                throw new InvalidOperationException(SR.InvalidOperation_NoMultiModuleAssembly);
            }

            Debug.Assert(_assemblyData != null, "_assemblyData is null in DefineDynamicModuleInternal");

            // Init(...) has already been called on _manifestModuleBuilder in InitManifestModule()
            ModuleBuilder dynModule = _manifestModuleBuilder;

            // Create the symbol writer
            ISymbolWriter writer = null;

            if (emitSymbolInfo)
            {
                writer = SymWrapperCore.SymWriter.CreateSymWriter();

                // Pass the "real" module to the VM.
                // This symfile is never written to disk so filename does not matter.
                IntPtr pInternalSymWriter = ModuleBuilder.nCreateISymWriterForDynamicModule(dynModule.InternalModule, "Unused");
                ((SymWrapperCore.SymWriter)writer).InternalSetUnderlyingWriter(pInternalSymWriter);
            }

            dynModule.SetSymWriter(writer);
            _assemblyData._moduleBuilderList.Add(dynModule);

            if (dynModule == _manifestModuleBuilder)
            {
                // We are reusing manifest module as user-defined dynamic module
                _isManifestModuleUsedAsDefinedModule = true;
            }

            return(dynModule);
        }
コード例 #24
0
 internal virtual void EmitLocalSymInfo(ISymbolWriter symWriter)
 {
     int num;
     for (num = 0; num < this.m_iLocalSymCount; num++)
     {
         symWriter.DefineLocalVariable(this.m_strName[num], FieldAttributes.PrivateScope, this.m_ubSignature[num], SymAddressKind.ILOffset, this.m_iLocalSlot[num], 0, 0, this.m_iStartOffset[num], this.m_iEndOffset[num]);
     }
     for (num = 0; num < this.m_iNameSpaceCount; num++)
     {
         symWriter.UsingNamespace(this.m_namespace[num]);
     }
 }
コード例 #25
0
            private void BuildTypeParameterDisplay(ITypeParameter tp, ISymbolWriter writer, INode enclosingDeclaration, TypeFormatFlags flags, Stack <ISymbol> symbolStack)
            {
                AppendSymbolNameOnly(tp.Symbol, writer);
                var varraint = m_checker.GetConstraintOfTypeParameter(tp);

                if (varraint != null)
                {
                    WriteSpace(writer);
                    WriteKeyword(writer, SyntaxKind.ExtendsKeyword);
                    WriteSpace(writer);
                    BuildTypeDisplay(varraint, writer, enclosingDeclaration, flags, symbolStack);
                }
            }
コード例 #26
0
        private void GetDebugHeader()
        {
            ISymbolWriter symbol_writer = metadata.symbol_writer;

            if (symbol_writer != null)
            {
                debug_header = symbol_writer.GetDebugHeader();
            }
            if (module.HasDebugHeader && module.GetDebugHeader().GetDeterministicEntry() != null)
            {
                debug_header = debug_header.AddDeterministicEntry();
            }
        }
コード例 #27
0
        private void GetDebugHeader()
        {
            ISymbolWriter symbolWriter = this.metadata.symbol_writer;

            if (symbolWriter == null)
            {
                return;
            }
            if (!symbolWriter.GetDebugHeader(out this.debug_directory, out this.debug_data))
            {
                this.debug_data = Empty <byte> .Array;
            }
        }
コード例 #28
0
        internal ModuleBuilder(AssemblyBuilder assb, string name, string fullyqname, bool emitSymbolInfo, bool transient)
        {
            this.name      = this.scopename = name;
            this.fqname    = fullyqname;
            this.assembly  = this.assemblyb = assb;
            this.transient = transient;
            // to keep mcs fast we do not want CryptoConfig wo be involved to create the RNG
            guid = Guid.FastNewGuidArray();
            // guid = Guid.NewGuid().ToByteArray ();
            table_idx       = get_next_table_index(this, 0x00, true);
            name_cache      = new Hashtable();
            us_string_cache = new Dictionary <string, int> (512);

            basic_init(this);

            CreateGlobalType();

            if (assb.IsRun)
            {
                TypeBuilder tb   = new TypeBuilder(this, TypeAttributes.Abstract, 0xFFFFFF);                /*last valid token*/
                Type        type = tb.CreateType();
                set_wrappers_type(this, type);
            }

            if (emitSymbolInfo)
            {
#if MOONLIGHT
                symbolWriter = new Mono.CompilerServices.SymbolWriter.SymbolWriterImpl(this);
#else
                Assembly asm = Assembly.LoadWithPartialName("Mono.CompilerServices.SymbolWriter");
                if (asm == null)
                {
                    throw new ExecutionEngineException("The assembly for default symbol writer cannot be loaded");
                }

                Type t = asm.GetType("Mono.CompilerServices.SymbolWriter.SymbolWriterImpl");
                if (t == null)
                {
                    throw new ExecutionEngineException("The type that implements the default symbol writer interface cannot be found");
                }

                symbolWriter = (ISymbolWriter)Activator.CreateInstance(t, new object[] { this });
#endif
                string fileName = fqname;
                if (assemblyb.AssemblyDir != null)
                {
                    fileName = Path.Combine(assemblyb.AssemblyDir, fileName);
                }
                symbolWriter.Initialize(IntPtr.Zero, fileName, true);
            }
        }
コード例 #29
0
 public ConnectionSynchronizer(
     IAccountReader accountReader,
     IAccountWriter accountWriter,
     ISymbolReader symbolReader,
     ISymbolWriter symbolWriter,
     ICurrencyReader currencyReader,
     ITokenizer tokenizer)
 {
     AccountReader  = accountReader;
     AccountWriter  = accountWriter;
     SymbolReader   = symbolReader;
     SymbolWriter   = symbolWriter;
     CurrencyReader = currencyReader;
     Tokenizer      = tokenizer;
 }
コード例 #30
0
        private RVA WriteResolvedMethodBody(MethodDefinition method)
        {
            RVA rva;

            body = method.Body;
            ComputeHeader();
            if (RequiresFatHeader())
            {
                Align(4);
                rva = BeginMethod();
                WriteFatHeader();
                WriteInstructions();

                if (body.HasExceptionHandlers)
                {
                    WriteExceptionHandlers();
                }
            }
            else
            {
                rva = BeginMethod();
                WriteByte((byte)(0x2 | (body.CodeSize << 2))); // tiny
                WriteInstructions();

                int    start_position = (int)(rva - code_base);
                int    body_size      = position - start_position;
                byte[] body_bytes     = new byte[body_size];

                Array.Copy(buffer, start_position, body_bytes, 0, body_size);

                if (GetOrMapTinyMethodBody(new ByteBuffer(body_bytes), ref rva))
                {
                    position = start_position;
                }
            }

            ISymbolWriter symbol_writer = metadata.symbol_writer;

            if (symbol_writer != null && method.debug_info != null)
            {
                method.debug_info.code_size       = body.CodeSize;
                method.debug_info.local_var_token = body.local_var_token;
                symbol_writer.Write(method.debug_info);
            }

            return(rva);
        }
コード例 #31
0
            private static void BuildTypePredicateDisplay(ISymbolWriter writer, ITypePredicate predicate)
            {
                var identifierTypePredicate = IsIdentifierTypePredicate(predicate);

                if (identifierTypePredicate != null)
                {
                    writer.WriteParameter(identifierTypePredicate.ParameterName);
                }
                else
                {
                    WriteKeyword(writer, SyntaxKind.ThisKeyword);
                }

                WriteSpace(writer);
                WriteKeyword(writer, SyntaxKind.IsKeyword);
                WriteSpace(writer);
            }
コード例 #32
0
        private void WriteUnresolvedMethodBody(MethodDefinition method)
        {
            MethodSymbols symbols;
            ByteBuffer    buffer = this.metadata.module.Read <MethodDefinition, CodeReader>(method, (_, reader) => reader.code).PatchRawMethodBody(method, this, out symbols);

            base.WriteBytes(buffer);
            if (!symbols.instructions.IsNullOrEmpty <InstructionSymbol>())
            {
                symbols.method_token    = method.token;
                symbols.local_var_token = GetLocalVarToken(buffer, symbols);
                ISymbolWriter writer = this.metadata.symbol_writer;
                if (writer != null)
                {
                    writer.Write(symbols);
                }
            }
        }
コード例 #33
0
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     if (this.m_iLineNumberCount != 0)
     {
         int[] destinationArray = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iOffsets, destinationArray, this.m_iLineNumberCount);
         int[] numArray2 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iLines, numArray2, this.m_iLineNumberCount);
         int[] numArray3 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iColumns, numArray3, this.m_iLineNumberCount);
         int[] numArray4 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iEndLines, numArray4, this.m_iLineNumberCount);
         int[] numArray5 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iEndColumns, numArray5, this.m_iLineNumberCount);
         symWriter.DefineSequencePoints(this.m_document, destinationArray, numArray2, numArray3, numArray4, numArray5);
     }
 }
コード例 #34
0
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     if (this.m_iLineNumberCount != 0)
     {
         int[] destinationArray = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iOffsets, destinationArray, this.m_iLineNumberCount);
         int[] numArray2 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iLines, numArray2, this.m_iLineNumberCount);
         int[] numArray3 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iColumns, numArray3, this.m_iLineNumberCount);
         int[] numArray4 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iEndLines, numArray4, this.m_iLineNumberCount);
         int[] numArray5 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iEndColumns, numArray5, this.m_iLineNumberCount);
         symWriter.DefineSequencePoints(this.m_document, destinationArray, numArray2, numArray3, numArray4, numArray5);
     }
 }
コード例 #35
0
        public static void WriteModuleTo(ModuleDefinition module, Stream stream, WriterParameters parameters)
        {
            if ((module.Attributes & ModuleAttributes.ILOnly) == 0)
            {
                throw new NotSupportedException("Writing mixed-mode assemblies is not supported");
            }
            if (module.HasImage && (module.ReadingMode == ReadingMode.Deferred))
            {
                ImmediateModuleReader.ReadModule(module);
            }
            module.MetadataSystem.Clear();
            AssemblyNameDefinition name = module.assembly?.Name;
            string fullyQualifiedName   = stream.GetFullyQualifiedName();
            ISymbolWriterProvider symbolWriterProvider = parameters.SymbolWriterProvider;

            if ((symbolWriterProvider == null) && parameters.WriteSymbols)
            {
                symbolWriterProvider = SymbolProvider.GetPlatformWriterProvider();
            }
            ISymbolWriter writer = GetSymbolWriter(module, fullyQualifiedName, symbolWriterProvider);

            if ((parameters.StrongNameKeyPair != null) && (name != null))
            {
                name.PublicKey     = parameters.StrongNameKeyPair.PublicKey;
                module.Attributes |= ModuleAttributes.StrongNameSigned;
            }
            MetadataBuilder metadata = new MetadataBuilder(module, fullyQualifiedName, symbolWriterProvider, writer);

            BuildMetadata(module, metadata);
            if (module.symbol_reader != null)
            {
                module.symbol_reader.Dispose();
            }
            ImageWriter writer2 = ImageWriter.CreateWriter(module, metadata, stream);

            writer2.WriteImage();
            if (parameters.StrongNameKeyPair != null)
            {
                CryptoService.StrongName(stream, writer2, parameters.StrongNameKeyPair);
            }
            if (writer != null)
            {
                writer.Dispose();
            }
        }
コード例 #36
0
ファイル: 4ilgenerator.cs プロジェクト: wwkkww1983/ZJCredit
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     if (this.m_iLineNumberCount == 0)
     {
         return;
     }
     int[] offsets = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iOffsets, (Array)offsets, this.m_iLineNumberCount);
     int[] lines = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iLines, (Array)lines, this.m_iLineNumberCount);
     int[] columns = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iColumns, (Array)columns, this.m_iLineNumberCount);
     int[] endLines = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iEndLines, (Array)endLines, this.m_iLineNumberCount);
     int[] endColumns = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iEndColumns, (Array)endColumns, this.m_iLineNumberCount);
     symWriter.DefineSequencePoints(this.m_document, offsets, lines, columns, endLines, endColumns);
 }
コード例 #37
0
 internal void EmitScopeTree(ISymbolWriter symWriter)
 {
     for (int i = 0; i < this.m_iCount; i++)
     {
         if (this.m_ScopeActions[i] == ScopeAction.Open)
         {
             symWriter.OpenScope(this.m_iOffsets[i]);
         }
         else
         {
             symWriter.CloseScope(this.m_iOffsets[i]);
         }
         if (this.m_localSymInfos[i] != null)
         {
             this.m_localSymInfos[i].EmitLocalSymInfo(symWriter);
         }
     }
 }
コード例 #38
0
ファイル: ModuleDefinition.cs プロジェクト: sidecut/xaeios
 public void SaveSymbols(ISymbolWriter writer)
 {
     SaveSymbols ();
     m_controller.Writer.SymbolWriter = writer;
 }
コード例 #39
0
ファイル: AssemblyGen.cs プロジェクト: robertlj/IronScheme
 internal void CreateSymWriter()
 {
     _symbolWriter = _myModule.GetSymWriter();
 }
コード例 #40
0
ファイル: MethodBuilder.cs プロジェクト: stabbylambda/mono
		internal void GenerateDebugInfo (ISymbolWriter symbolWriter)
		{
			if (ilgen != null && ilgen.HasDebugInfo) {
				SymbolToken token = new SymbolToken (GetToken().Token);
				symbolWriter.OpenMethod (token);
				symbolWriter.SetSymAttribute (token, "__name", System.Text.Encoding.UTF8.GetBytes (Name));
				ilgen.GenerateDebugInfo (symbolWriter);
				symbolWriter.CloseMethod ();
			}
		}
コード例 #41
0
ファイル: TypeBuilder.cs プロジェクト: ItsVeryWindy/mono
		internal void GenerateDebugInfo (ISymbolWriter symbolWriter)
		{
			symbolWriter.OpenNamespace (this.Namespace);

			if (methods != null) {
				for (int i = 0; i < num_methods; ++i) {
					MethodBuilder metb = (MethodBuilder) methods[i]; 
					metb.GenerateDebugInfo (symbolWriter);
				}
			}

			if (ctors != null) {
				foreach (ConstructorBuilder ctor in ctors)
					ctor.GenerateDebugInfo (symbolWriter);
			}
			
			symbolWriter.CloseNamespace ();

			if (subtypes != null) {
				for (int i = 0; i < subtypes.Length; ++i)
					subtypes [i].GenerateDebugInfo (symbolWriter);
			}
		}
コード例 #42
0
 internal void SetSymWriter(ISymbolWriter writer)
 {
     m_iSymWriter = writer;
 }
コード例 #43
0
ファイル: ModuleBuilder.cs プロジェクト: carrie901/mono
		internal ModuleBuilder (AssemblyBuilder assb, string name, string fullyqname, bool emitSymbolInfo, bool transient) {
			this.name = this.scopename = name;
			this.fqname = fullyqname;
			this.assembly = this.assemblyb = assb;
			this.transient = transient;
			// to keep mcs fast we do not want CryptoConfig wo be involved to create the RNG
			guid = Guid.FastNewGuidArray ();
			// guid = Guid.NewGuid().ToByteArray ();
			table_idx = get_next_table_index (this, 0x00, true);
			name_cache = new Hashtable ();
			us_string_cache = new Dictionary<string, int> (512);

			basic_init (this);

			CreateGlobalType ();

			if (assb.IsRun) {
				TypeBuilder tb = new TypeBuilder (this, TypeAttributes.Abstract, 0xFFFFFF); /*last valid token*/
				Type type = tb.CreateType ();
				set_wrappers_type (this, type);
			}

			if (emitSymbolInfo) {
#if MOONLIGHT
				symbolWriter = new Mono.CompilerServices.SymbolWriter.SymbolWriterImpl (this);
#else
				Assembly asm = Assembly.LoadWithPartialName ("Mono.CompilerServices.SymbolWriter");
				if (asm == null)
					throw new TypeLoadException ("The assembly for default symbol writer cannot be loaded");

				Type t = asm.GetType ("Mono.CompilerServices.SymbolWriter.SymbolWriterImpl", true);
				symbolWriter = (ISymbolWriter) Activator.CreateInstance (t, new object[] { this });
#endif
				string fileName = fqname;
				if (assemblyb.AssemblyDir != null)
					fileName = Path.Combine (assemblyb.AssemblyDir, fileName);
				symbolWriter.Initialize (IntPtr.Zero, fileName, true);
			}
		}
コード例 #44
0
        internal virtual void EmitLocalSymInfo(ISymbolWriter symWriter)
        {
            int         i;

            for (i = 0; i < m_iLocalSymCount; i ++)
            {
                symWriter.DefineLocalVariable(
                            m_strName[i],
                            FieldAttributes.PrivateScope,  
                            m_ubSignature[i],
                            SymAddressKind.ILOffset,
                            m_iLocalSlot[i],
                            0,          // addr2 is not used yet
                            0,          // addr3 is not used
                            m_iStartOffset[i],
                            m_iEndOffset[i]);
            }
            for (i = 0; i < m_iNameSpaceCount; i ++)
            {
                symWriter.UsingNamespace(m_namespace[i]);
            }
        }
コード例 #45
0
ファイル: Driver.cs プロジェクト: afrog33k/csnative
        /// <summary>
        /// </summary>
        /// <param name="assembly">
        /// </param>
        /// <param name="functions">
        /// </param>
        /// <param name="symbolWriter">
        /// </param>
        internal static void Convert(IEnumerable<PdbFunction> functions, ISymbolWriter symbolWriter)
        {
            var converter = new Converter(symbolWriter);

            foreach (var function in functions)
            {
                converter.ConvertFunction(function);
            }
        }
コード例 #46
0
        public void WriteSymbols(ModuleDefinition module)
        {
            if (!m_saveSymbols)
                return;

            if (m_asmOutput == null)
                m_asmOutput = module.Assembly.Name.Name + "." + (module.Assembly.Kind == AssemblyKind.Dll ? "dll" : "exe");

            if (m_symbolWriter == null)
                m_symbolWriter = SymbolStoreHelper.GetWriter (module, m_asmOutput);

            foreach (TypeDefinition type in module.Types) {
                foreach (MethodDefinition method in type.Methods)
                    WriteSymbols (method);
                foreach (MethodDefinition ctor in type.Constructors)
                    WriteSymbols (ctor);
            }

            m_symbolWriter.Dispose ();
        }
コード例 #47
0
ファイル: Driver.cs プロジェクト: afrog33k/csnative
 public static IConverter GetConverter(string filename, ISymbolWriter symbolWriter)
 {
     return new Converter(filename, symbolWriter);
 }
コード例 #48
0
ファイル: Driver.cs プロジェクト: afrog33k/csnative
        /// <summary>
        /// </summary>
        /// <param name="symbolWriter">
        /// </param>
        /// <param name="function">
        /// </param>
        /// <returns>
        /// </returns>
        private SourceFile GetSourceFile(ISymbolWriter symbolWriter, PdbFunction function)
        {
            var name = (from l in function.lines where l.file != null select l.file.name).First();

            SourceFile file;
            if (this.files.TryGetValue(name, out file))
            {
                return file;
            }

            var entry = symbolWriter.DefineDocument(name);
            var unit = symbolWriter.DefineCompilationUnit(entry);

            file = new SourceFile(unit, entry);
            this.files.Add(name, file);
            return file;
        }
コード例 #49
0
ファイル: PerformRewrite.cs プロジェクト: afaerber/mono
		public PerformRewrite (ISymbolWriter sym, RewriterOptions options)
		{
			this.sym = sym;
			this.options = options;
		}
コード例 #50
0
ファイル: ILGenerator.cs プロジェクト: Profit0004/mono
		internal void GenerateDebugInfo (ISymbolWriter symbolWriter)
		{
			if (sequencePointLists != null) {
				SequencePointList first = (SequencePointList) sequencePointLists [0];
				SequencePointList last = (SequencePointList) sequencePointLists [sequencePointLists.Count - 1];
				symbolWriter.SetMethodSourceRange (first.Document, first.StartLine, first.StartColumn, last.Document, last.EndLine, last.EndColumn);
				
				foreach (SequencePointList list in sequencePointLists)
					symbolWriter.DefineSequencePoints (list.Document, list.GetOffsets(), list.GetLines(), list.GetColumns(), list.GetEndLines(), list.GetEndColumns());
				
				if (locals != null) {
					foreach (LocalBuilder local in locals) {
						if (local.Name != null && local.Name.Length > 0) {
							SignatureHelper sighelper = SignatureHelper.GetLocalVarSigHelper (module as ModuleBuilder);
							sighelper.AddArgument (local.LocalType);
							byte[] signature = sighelper.GetSignature ();
							symbolWriter.DefineLocalVariable (local.Name, FieldAttributes.Public, signature, SymAddressKind.ILOffset, local.position, 0, 0, local.StartOffset, local.EndOffset);
						}
					}
				}
				sequencePointLists = null;
			}
		}
コード例 #51
0
ファイル: Driver.cs プロジェクト: afrog33k/csnative
 /// <summary>
 /// </summary>
 /// <param name="symbolWriter">
 /// </param>
 internal Converter(ISymbolWriter symbolWriter)
 {
     this.symbolWriter = symbolWriter;
 }
コード例 #52
0
ファイル: modulebuilder.cs プロジェクト: ArildF/masters
        internal void Init(
            String             strModuleName,
            String             strFileName,
            ISymbolWriter      writer)
        {
            m_moduleData = new ModuleBuilderData(this, strModuleName, strFileName);
            m_TypeBuilderList = new ArrayList();    
            m_iSymWriter = writer;

            if (writer != null)
            {
                // Set the underlying writer for the managed writer
                // that we're using.  Note that this function requires
                // unmanaged code access.
                new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();
                writer.SetUnderlyingWriter(m_pInternalSymWriter);
            }
        }
コード例 #53
0
ファイル: ilgenerator.cs プロジェクト: uQr/referencesource
        [System.Security.SecurityCritical] // auto-generated
        #endif
        internal void EmitLineNumberInfo(ISymbolWriter symWriter)
        {
            int[]       iOffsetsTemp;
            int[]       iLinesTemp;
            int[]       iColumnsTemp;
            int[]       iEndLinesTemp;
            int[]       iEndColumnsTemp;

            if (m_iLineNumberCount == 0)
                return;
            // reduce the array size to be exact
            iOffsetsTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iOffsets, iOffsetsTemp, m_iLineNumberCount);

            iLinesTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iLines, iLinesTemp, m_iLineNumberCount);

            iColumnsTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iColumns, iColumnsTemp, m_iLineNumberCount);

            iEndLinesTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iEndLines, iEndLinesTemp, m_iLineNumberCount);

            iEndColumnsTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iEndColumns, iEndColumnsTemp, m_iLineNumberCount);

            symWriter.DefineSequencePoints(m_document, iOffsetsTemp, iLinesTemp, iColumnsTemp, iEndLinesTemp, iEndColumnsTemp); 
        }
コード例 #54
0
ファイル: ModuleDefinition.cs プロジェクト: sidecut/xaeios
 public void SaveSymbols(string outputDirectory, ISymbolWriter writer)
 {
     SaveSymbols (outputDirectory);
     m_controller.Writer.SymbolWriter = writer;
 }