コード例 #1
0
 private void CleanUp()
 {
     foreach (var func in this.DuplicatedFunctions)
     {
         ModelCleaner.Remove(this.AC, func);
     }
 }
コード例 #2
0
ファイル: InvariantInferrer.cs プロジェクト: ufwt/whoop
        public void Run()
        {
            this.AC.EliminateDeadVariables();
            this.AC.Inline();

            if (WhoopCruncherCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                Console.WriteLine(" |------ [{0}]", this.EP.Name);
                Console.WriteLine(" |  |");
                this.Timer = new ExecutionTimer();
                this.Timer.Start();
            }

            HoudiniOutcome outcome = null;

            this.PerformHoudini(ref outcome);
            this.ApplyInvariants(ref outcome);

            this.AC.ResetToProgramTopLevelDeclarations();

            ModelCleaner.RemoveGenericTopLevelDeclerations(this.PostAC, this.EP);
            ModelCleaner.RemoveUnusedTopLevelDeclerations(this.AC);
            ModelCleaner.RemoveGlobalLocksets(this.PostAC);
            ModelCleaner.RemoveExistentials(this.PostAC);

            if (!(WhoopCruncherCommandLineOptions.Get().InliningBound > 0 &&
                  this.AC.GetNumOfEntryPointRelatedFunctions(this.EP.Name) <=
                  WhoopCruncherCommandLineOptions.Get().InliningBound))
            {
                ModelCleaner.RemoveWhoopFunctions(this.PostAC);
                ModelCleaner.RemoveConstants(this.PostAC);
                ModelCleaner.RemoveImplementations(this.PostAC);
            }

            if (WhoopCruncherCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                this.Timer.Stop();
                Console.WriteLine(" |  |");
                Console.WriteLine(" |  |--- [Total] {0}", this.Timer.Result());
                Console.WriteLine(" |");
            }

            Whoop.IO.BoogieProgramEmitter.Emit(this.PostAC.TopLevelDeclarations, WhoopCruncherCommandLineOptions.Get().Files[
                                                   WhoopCruncherCommandLineOptions.Get().Files.Count - 1], this.EP.Name + "$summarised", "wbpl");
        }
コード例 #3
0
        public void Run()
        {
            if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                Console.WriteLine(" |------ [{0} :: {1}]", this.Pair.EntryPoint1.Name, this.Pair.EntryPoint2.Name);
                Console.WriteLine(" |  |");
                this.Timer = new ExecutionTimer();
                this.Timer.Start();
            }

            Analysis.Factory.CreateLockAbstraction(this.AC).Run();

            if (this.Pair.EntryPoint1.Name.Equals(this.Pair.EntryPoint2.Name))
            {
                Instrumentation.Factory.CreateGlobalRaceCheckingInstrumentation(this.AC, this.Pair.EntryPoint1).Run();
            }
            else
            {
                Instrumentation.Factory.CreateGlobalRaceCheckingInstrumentation(this.AC, this.Pair.EntryPoint1).Run();
                Instrumentation.Factory.CreateGlobalRaceCheckingInstrumentation(this.AC, this.Pair.EntryPoint2).Run();
            }

            Instrumentation.Factory.CreatePairInstrumentation(this.AC, this.Pair).Run();
            Analysis.Factory.CreatePairParameterAliasAnalysis(this.AC, this.Pair).Run();

            ModelCleaner.RemoveOriginalInitFunc(this.AC);
            ModelCleaner.RemoveEntryPointSpecificTopLevelDeclerations(this.AC);
            ModelCleaner.RemoveUnusedTopLevelDeclerations(this.AC);
            ModelCleaner.RemoveUnecesseryInfoFromSpecialFunctions(this.AC);
//      ModelCleaner.RemoveNonPairMemoryRegions(this.AC, pair.Item1, pair.Item2);
            ModelCleaner.RemoveCorralFunctions(this.AC);

            if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                this.Timer.Stop();
                Console.WriteLine(" |  |");
                Console.WriteLine(" |  |--- [Total] {0}", this.Timer.Result());
                Console.WriteLine(" |");
            }

            Whoop.IO.BoogieProgramEmitter.Emit(this.AC.TopLevelDeclarations,
                                               WhoopEngineCommandLineOptions.Get().Files[
                                                   WhoopEngineCommandLineOptions.Get().Files.Count - 1], "check_" +
                                               this.Pair.EntryPoint1.Name + "_" + this.Pair.EntryPoint2.Name, "wbpl");
        }
コード例 #4
0
ファイル: SummarizationEngine.cs プロジェクト: YHVHvx/lockpwn
        /// <summary>
        /// Starts the engine.
        /// </summary>
        internal override void Start()
        {
            if (ToolCommandLineOptions.Get().VerboseMode)
            {
                Output.PrintLine(". Summarization");
            }

            if (ToolCommandLineOptions.Get().MeasureTime)
            {
                base.Timer.Start();
            }

            Instrumentation.Factory.CreateLoopInvariantInstrumentation(base.Program.AC).Run();

            base.EmitProgramContext(base.Program.AC, "sequentialized");

            if (ToolCommandLineOptions.Get().RequiresInvariantInference)
            {
                base.Program.AC = base.ParseContextFromFile("sequentialized");

                base.Program.AC.EliminateNonInvariantInferenceAssertions();
                base.Program.AC.EliminateDeadVariables();
                base.Program.AC.Inline();

                var summarizedAnalysisContext = base.ParseContextFromFile("sequentialized");
                Analysis.Factory.CreateHoudiniInvariantInference(base.Program.AC, summarizedAnalysisContext).Run();

                ModelCleaner.RemoveExistentials(summarizedAnalysisContext);

                base.EmitProgramContext(summarizedAnalysisContext, "summarised");
            }

            if (ToolCommandLineOptions.Get().MeasureTime)
            {
                base.Timer.Stop();
                Output.PrintLine("... Summarization done [{0}]", base.Timer.Result());
            }
        }
コード例 #5
0
        public void Run()
        {
            if (ParsingEngine.AlreadyParsed.Contains(this.EP.Name))
            {
                return;
            }

            if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                Console.WriteLine(" |------ [{0}]", this.EP.Name);
                Console.WriteLine(" |  |");
                this.Timer = new ExecutionTimer();
                this.Timer.Start();
            }

            Analysis.Factory.CreateLockAbstraction(this.AC).Run();
            Refactoring.Factory.CreateLockRefactoring(this.AC, this.EP).Run();
            Refactoring.Factory.CreateFunctionPointerRefactoring(this.AC, this.EP).Run();
            Refactoring.Factory.CreateEntryPointRefactoring(this.AC, this.EP).Run();

            ModelCleaner.RemoveCorralFunctions(this.AC);
            ModelCleaner.RemoveModelledProcedureBodies(this.AC);

            if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                this.Timer.Stop();
                Console.WriteLine(" |  |");
                Console.WriteLine(" |  |--- [Total] {0}", this.Timer.Result());
                Console.WriteLine(" |");
            }

            Whoop.IO.BoogieProgramEmitter.Emit(this.AC.TopLevelDeclarations, WhoopEngineCommandLineOptions.Get().Files[
                                                   WhoopEngineCommandLineOptions.Get().Files.Count - 1], this.EP.Name, "wbpl");

            ParsingEngine.AlreadyParsed.Add(this.EP.Name);
        }
コード例 #6
0
        public void Run()
        {
            if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                Console.WriteLine(" |------ [{0}]", this.EP.Name);
                Console.WriteLine(" |  |");
                this.Timer = new ExecutionTimer();
                this.Timer.Start();
            }

//      Analysis.Factory.CreatePairWatchdogInformationAnalysis(this.AC, this.EP).Run();

            if (!WhoopEngineCommandLineOptions.Get().CheckInParamAliasing)
            {
                Analysis.Factory.CreateParameterAliasAnalysis(this.AC, this.EP).Run();
            }

            Summarisation.Factory.CreateLocksetSummaryGeneration(this.AC, this.EP).Run();
            Summarisation.Factory.CreateAccessCheckingSummaryGeneration(this.AC, this.EP).Run();
//      Summarisation.Factory.CreateDomainKnowledgeSummaryGeneration(this.AC, this.EP).Run();

            Summarisation.SummaryInformationParser.RegisterSummaryName(this.EP.Name);

            ModelCleaner.RemoveCorralFunctions(this.AC);

            if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                this.Timer.Stop();
                Console.WriteLine(" |  |");
                Console.WriteLine(" |  |--- [Total] {0}", this.Timer.Result());
                Console.WriteLine(" |");
            }

            Whoop.IO.BoogieProgramEmitter.Emit(this.AC.TopLevelDeclarations, WhoopEngineCommandLineOptions.Get().Files[
                                                   WhoopEngineCommandLineOptions.Get().Files.Count - 1], this.EP.Name + "$instrumented", "wbpl");
        }
コード例 #7
0
        public void Run()
        {
            if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                Console.WriteLine(" |------ [{0}]", this.EP.Name);
                Console.WriteLine(" |  |");
                this.Timer = new ExecutionTimer();
                this.Timer.Start();
            }

            SharedStateAnalyser.AnalyseMemoryRegionsWithPairInformation(this.AC, this.EP);

            Instrumentation.Factory.CreateInstrumentationRegionsConstructor(this.AC, this.EP).Run();
            Instrumentation.Factory.CreateGlobalRaceCheckingInstrumentation(this.AC, this.EP).Run();

            Instrumentation.Factory.CreateLocksetInstrumentation(this.AC, this.EP).Run();
            Instrumentation.Factory.CreateDomainKnowledgeInstrumentation(this.AC, this.EP).Run();
            Instrumentation.Factory.CreateRaceInstrumentation(this.AC, this.EP).Run();

            Analysis.Factory.CreateSharedStateAbstraction(this.AC).Run();

            if (this.EP.IsEnablingDevice)
            {
                Refactoring.Factory.CreateDeviceEnableProgramSlicing(this.AC, this.EP).Run();
            }
            else if (this.EP.IsDisablingDevice)
            {
                Refactoring.Factory.CreateDeviceDisableProgramSlicing(this.AC, this.EP).Run();
            }

            if (this.EP.IsClone && this.EP.IsGoingToDisableNetwork)
            {
                Refactoring.Factory.CreateNetDisableProgramSlicing(this.AC, this.EP).Run();
            }
            else if (this.EP.IsClone && this.EP.IsCalledWithNetworkDisabled)
            {
                Refactoring.Factory.CreateNetEnableProgramSlicing(this.AC, this.EP).Run();
            }

            Instrumentation.Factory.CreateErrorReportingInstrumentation(this.AC, this.EP).Run();

            if (WhoopEngineCommandLineOptions.Get().SkipInference)
            {
                ModelCleaner.RemoveGenericTopLevelDeclerations(this.AC, this.EP);
                ModelCleaner.RemoveUnusedTopLevelDeclerations(this.AC);
                ModelCleaner.RemoveGlobalLocksets(this.AC);
                ModelCleaner.RemoveInlineFromHelperFunctions(this.AC, this.EP);
            }
            else if (WhoopEngineCommandLineOptions.Get().InliningBound > 0 &&
                     this.AC.GetNumOfEntryPointRelatedFunctions(this.EP.Name) <=
                     WhoopEngineCommandLineOptions.Get().InliningBound)
            {
                this.AC.InlineEntryPoint(this.EP);
            }
            else
            {
                ModelCleaner.RemoveInlineFromHelperFunctions(this.AC, this.EP);
            }

            ModelCleaner.RemoveUnecesseryInfoFromSpecialFunctions(this.AC);
            ModelCleaner.RemoveCorralFunctions(this.AC);

            if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime)
            {
                this.Timer.Stop();
                Console.WriteLine(" |  |");
                Console.WriteLine(" |  |--- [Total] {0}", this.Timer.Result());
                Console.WriteLine(" |");
            }

            if (WhoopEngineCommandLineOptions.Get().SkipInference)
            {
                Whoop.IO.BoogieProgramEmitter.Emit(this.AC.TopLevelDeclarations, WhoopEngineCommandLineOptions.Get().Files[
                                                       WhoopEngineCommandLineOptions.Get().Files.Count - 1], this.EP.Name + "$instrumented", "wbpl");
            }
        }
コード例 #8
0
        /// <summary>
        /// Starts the engine.
        /// </summary>
        internal override void Start()
        {
            if (ToolCommandLineOptions.Get().VerboseMode)
            {
                Output.PrintLine(". Summarization");
            }

            if (ToolCommandLineOptions.Get().MeasureTime)
            {
                base.Timer.Start();
            }

            Instrumentation.Factory.CreateLoopInvariantInstrumentation(base.Program.AC).Run();

            base.EmitProgramContext(base.Program.AC, "sequentialized");

            if (ToolCommandLineOptions.Get().RequiresInvariantInference)
            {
                base.Program.AC = base.ParseContextFromFile("sequentialized");

                base.Program.AC.EliminateNonInvariantInferenceAssertions();
                base.Program.AC.EliminateDeadVariables();
                base.Program.AC.Inline();

                var summarizedAnalysisContext = base.ParseContextFromFile("sequentialized");

                try
                {
                    Analysis.Factory.CreateHoudiniInvariantInference(base.Program.AC, summarizedAnalysisContext).Run();
                }
                catch (AnalysisFailedException)
                {
                    if (ToolCommandLineOptions.Get().EnableCorralMode)
                    {
                        var originalAnalysisContext = base.ParseContextFromInputFile();
                        Instrumentation.Factory.CreateYieldInstrumentation(originalAnalysisContext).Run();

                        if (ToolCommandLineOptions.Get().OutputFile.Length > 0)
                        {
                            base.EmitProgramContext(originalAnalysisContext);
                        }
                        else
                        {
                            base.EmitProgramContext(originalAnalysisContext, "corral");
                        }
                    }

                    throw;
                }

                ModelCleaner.RemoveExistentials(summarizedAnalysisContext);

                base.EmitProgramContext(summarizedAnalysisContext, "summarised");
            }

            if (ToolCommandLineOptions.Get().MeasureTime)
            {
                base.Timer.Stop();
                Output.PrintLine("... Summarization done [{0}]", base.Timer.Result());
            }
        }