예제 #1
0
            /// <summary>
            /// Initialize the WindowsDebugData emission pipeline.
            /// Cannot be called twice
            /// </summary>
            /// <param name="nonSectionBasedDebugInfoWriter">debug$T section generation interface. If null, use managed implementation that generates a object file section.</param>
            /// <param name="mergedAssemblyRecords">record of how assemblies are merged. If null, do not genearate extended debug information</param>
            /// <param name="graph">Graph to attach WindowsDebugData to</param>
            public void Init(ITypesDebugInfoWriter nonSectionBasedDebugInfoWriter, MergedAssemblyRecords mergedAssemblyRecords, DependencyAnalyzerBase <NodeFactory> graph)
            {
                Debug.Assert(_userDefinedTypeDescriptor == null); // Cannot be called twice
                Debug.Assert(graph != null);

                _debugNeedTypeIndicesStore = new WindowsDebugNeedTypeIndicesStoreNode();

                if (mergedAssemblyRecords != null)
                {
                    _debugPseudoAssemblySection              = new WindowsDebugPseudoAssemblySection(_nodeFactory.TypeSystemContext);
                    _debugMergedAssembliesSection            = new WindowsDebugMergedAssembliesSection(mergedAssemblyRecords);
                    _debugILImagesSection                    = new WindowsDebugILImagesSection(mergedAssemblyRecords);
                    _debugManagedNativeDictionaryInfoSection = new WindowsDebugManagedNativeDictionaryInfoSection();
                }

                bool is64Bit = _nodeFactory.Target.PointerSize == 8 ? true : false;

                if (nonSectionBasedDebugInfoWriter != null)
                {
                    _userDefinedTypeDescriptor = new UserDefinedTypeDescriptor(nonSectionBasedDebugInfoWriter, is64Bit, _nodeFactory.Target.Abi);
                }
                else
                {
                    _debugTypeRecordsSection   = new WindowsDebugTypeRecordsSection(new DebugInfoWriter(), _nodeFactory);
                    _userDefinedTypeDescriptor = new UserDefinedTypeDescriptor(_debugTypeRecordsSection, is64Bit, _nodeFactory.Target.Abi);
                }

                if (mergedAssemblyRecords != null)
                {
                    _debugTypeSignatureMapSection   = new WindowsDebugTypeSignatureMapSection(_userDefinedTypeDescriptor);
                    _debugMethodSignatureMapSection = new WindowsDebugMethodSignatureMapSection();
                }

                graph.AddRoot(_debugNeedTypeIndicesStore, "Debug Force All EETypes to have type indices");

                if (_debugManagedNativeDictionaryInfoSection != null)
                {
                    graph.AddRoot(_debugManagedNativeDictionaryInfoSection, "Debug Method MDToken map");
                }
                if (_debugMethodSignatureMapSection != null)
                {
                    graph.AddRoot(_debugMethodSignatureMapSection, "Debug Method MDToken map");
                }
                if (_debugTypeSignatureMapSection != null)
                {
                    graph.AddRoot(_debugTypeSignatureMapSection, "Debug Type MDToken map");
                }
                if (_debugILImagesSection != null)
                {
                    graph.AddRoot(_debugILImagesSection, "Debug Merged ILImages");
                }
                if (_debugMergedAssembliesSection != null)
                {
                    graph.AddRoot(_debugMergedAssembliesSection, "Debug MergedAssemblyRecords");
                }
                if (_debugPseudoAssemblySection != null)
                {
                    graph.AddRoot(_debugPseudoAssemblySection, "Debug PseudoAssembly");
                }
                if (_debugTypeRecordsSection != null)
                {
                    graph.AddRoot(_debugTypeRecordsSection, "Debug Type Records");
                }
            }
예제 #2
0
 public UserDefinedTypeDescriptor(ITypesDebugInfoWriter objectWriter)
 {
     _objectWriter = objectWriter;
 }
예제 #3
0
 public UserDefinedTypeDescriptor(ITypesDebugInfoWriter objectWriter, NodeFactory nodeFactory)
 {
     _objectWriter = objectWriter;
     _nodeFactory  = nodeFactory;
 }
 public UserDefinedTypeDescriptor(ITypesDebugInfoWriter objectWriter, bool is64Bit, TargetAbi abi)
 {
     _objectWriter = objectWriter;
     _is64bit      = is64Bit;
     _abi          = abi;
 }