![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/llvm-10/llvm/Analysis/ |
Upload File : |
//===- StackSafetyAnalysis.h - Stack memory safety analysis -----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Stack Safety Analysis detects allocas and arguments with safe access. // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_STACKSAFETYANALYSIS_H #define LLVM_ANALYSIS_STACKSAFETYANALYSIS_H #include "llvm/IR/PassManager.h" #include "llvm/Pass.h" namespace llvm { /// Interface to access stack safety analysis results for single function. class StackSafetyInfo { public: struct FunctionInfo; private: std::unique_ptr<FunctionInfo> Info; public: StackSafetyInfo(); StackSafetyInfo(FunctionInfo &&Info); StackSafetyInfo(StackSafetyInfo &&); StackSafetyInfo &operator=(StackSafetyInfo &&); ~StackSafetyInfo(); // TODO: Add useful for client methods. void print(raw_ostream &O) const; }; /// StackSafetyInfo wrapper for the new pass manager. class StackSafetyAnalysis : public AnalysisInfoMixin<StackSafetyAnalysis> { friend AnalysisInfoMixin<StackSafetyAnalysis>; static AnalysisKey Key; public: using Result = StackSafetyInfo; StackSafetyInfo run(Function &F, FunctionAnalysisManager &AM); }; /// Printer pass for the \c StackSafetyAnalysis results. class StackSafetyPrinterPass : public PassInfoMixin<StackSafetyPrinterPass> { raw_ostream &OS; public: explicit StackSafetyPrinterPass(raw_ostream &OS) : OS(OS) {} PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); }; /// StackSafetyInfo wrapper for the legacy pass manager class StackSafetyInfoWrapperPass : public FunctionPass { StackSafetyInfo SSI; public: static char ID; StackSafetyInfoWrapperPass(); const StackSafetyInfo &getResult() const { return SSI; } void print(raw_ostream &O, const Module *M) const override; void getAnalysisUsage(AnalysisUsage &AU) const override; bool runOnFunction(Function &F) override; }; using StackSafetyGlobalInfo = std::map<const GlobalValue *, StackSafetyInfo>; /// This pass performs the global (interprocedural) stack safety analysis (new /// pass manager). class StackSafetyGlobalAnalysis : public AnalysisInfoMixin<StackSafetyGlobalAnalysis> { friend AnalysisInfoMixin<StackSafetyGlobalAnalysis>; static AnalysisKey Key; public: using Result = StackSafetyGlobalInfo; Result run(Module &M, ModuleAnalysisManager &AM); }; /// Printer pass for the \c StackSafetyGlobalAnalysis results. class StackSafetyGlobalPrinterPass : public PassInfoMixin<StackSafetyGlobalPrinterPass> { raw_ostream &OS; public: explicit StackSafetyGlobalPrinterPass(raw_ostream &OS) : OS(OS) {} PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); }; /// This pass performs the global (interprocedural) stack safety analysis /// (legacy pass manager). class StackSafetyGlobalInfoWrapperPass : public ModulePass { StackSafetyGlobalInfo SSI; public: static char ID; StackSafetyGlobalInfoWrapperPass(); const StackSafetyGlobalInfo &getResult() const { return SSI; } void print(raw_ostream &O, const Module *M) const override; void getAnalysisUsage(AnalysisUsage &AU) const override; bool runOnModule(Module &M) override; }; } // end namespace llvm #endif // LLVM_ANALYSIS_STACKSAFETYANALYSIS_H