Beispiel #1
0
        public static void EmitObject(
            string objectFilePath,
            EcmaModule componentModule,
            IEnumerable <DependencyNode> nodes,
            NodeFactory factory,
            bool generateMapFile,
            bool generateMapCsvFile,
            bool generatePdbFile,
            string pdbPath,
            bool generatePerfMapFile,
            string perfMapPath,
            bool generateProfileFile,
            CallChainProfile callChainProfile,
            int customPESectionAlignment)
        {
            Console.WriteLine($@"Emitting R2R PE file: {objectFilePath}");
            ReadyToRunObjectWriter objectWriter = new ReadyToRunObjectWriter(
                objectFilePath,
                componentModule,
                nodes,
                factory,
                generateMapFile: generateMapFile,
                generateMapCsvFile: generateMapCsvFile,
                generatePdbFile: generatePdbFile,
                pdbPath: pdbPath,
                generatePerfMapFile: generatePerfMapFile,
                perfMapPath: perfMapPath,
                generateProfileFile: generateProfileFile,
                callChainProfile,
                customPESectionAlignment);

            objectWriter.EmitPortableExecutable();
        }
        public ReadyToRunObjectWriter(
            string objectFilePath,
            EcmaModule componentModule,
            IEnumerable <string> inputFiles,
            IEnumerable <DependencyNode> nodes,
            NodeFactory factory,
            bool generateMapFile,
            bool generateMapCsvFile,
            bool generatePdbFile,
            string pdbPath,
            bool generatePerfMapFile,
            string perfMapPath,
            int perfMapFormatVersion,
            bool generateProfileFile,
            CallChainProfile callChainProfile,
            int customPESectionAlignment)
        {
            _objectFilePath           = objectFilePath;
            _componentModule          = componentModule;
            _inputFiles               = inputFiles;
            _nodes                    = nodes;
            _nodeFactory              = factory;
            _customPESectionAlignment = customPESectionAlignment;
            _generateMapFile          = generateMapFile;
            _generateMapCsvFile       = generateMapCsvFile;
            _generatePdbFile          = generatePdbFile;
            _pdbPath                  = pdbPath;
            _generatePerfMapFile      = generatePerfMapFile;
            _perfMapPath              = perfMapPath;
            _perfMapFormatVersion     = perfMapFormatVersion;

            bool generateMap     = (generateMapFile || generateMapCsvFile);
            bool generateSymbols = (generatePdbFile || generatePerfMapFile);

            if (generateMap || generateSymbols || generateProfileFile)
            {
                _outputInfoBuilder = new OutputInfoBuilder();

                if (generateMap)
                {
                    _mapFileBuilder = new MapFileBuilder(_outputInfoBuilder);
                }

                if (generateSymbols)
                {
                    _symbolFileBuilder = new SymbolFileBuilder(_outputInfoBuilder, _nodeFactory.Target);
                }

                if (generateProfileFile)
                {
                    _profileFileBuilder = new ProfileFileBuilder(_outputInfoBuilder, callChainProfile, _nodeFactory.Target);
                }
            }
        }
Beispiel #3
0
 public ProfileFileBuilder(OutputInfoBuilder outputInfoBuilder, CallChainProfile callChainProfile, TargetDetails targetDetails)
 {
     _outputInfoBuilder = outputInfoBuilder;
     _callChainProfile  = callChainProfile;
     _targetDetails     = targetDetails;
     _pageSize          = _targetDetails.Architecture switch
     {
         TargetArchitecture.X86 => 0x00001000,
         TargetArchitecture.X64 => 0x00010000,
         TargetArchitecture.ARM => 0x00001000,
         TargetArchitecture.ARM64 => 0x00010000,
         _ => throw new NotImplementedException(_targetDetails.Architecture.ToString())
     };
 }
Beispiel #4
0
        public static void EmitObject(
            string objectFilePath,
            EcmaModule componentModule,
            IEnumerable <string> inputFiles,
            IEnumerable <DependencyNode> nodes,
            NodeFactory factory,
            bool generateMapFile,
            bool generateMapCsvFile,
            bool generatePdbFile,
            string pdbPath,
            bool generatePerfMapFile,
            string perfMapPath,
            int perfMapFormatVersion,
            bool generateProfileFile,
            CallChainProfile callChainProfile,
            int customPESectionAlignment)
        {
            ReadyToRunObjectWriter objectWriter = new ReadyToRunObjectWriter(
                objectFilePath,
                componentModule,
                inputFiles,
                nodes,
                factory,
                generateMapFile: generateMapFile,
                generateMapCsvFile: generateMapCsvFile,
                generatePdbFile: generatePdbFile,
                pdbPath: pdbPath,
                generatePerfMapFile: generatePerfMapFile,
                perfMapPath: perfMapPath,
                perfMapFormatVersion: perfMapFormatVersion,
                generateProfileFile: generateProfileFile,
                callChainProfile,
                customPESectionAlignment);

            objectWriter.EmitPortableExecutable();
        }