LLVM
15.0.0git
|
#include "llvm/CodeGen/StackProtector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/BranchProbabilityInfo.h"
#include "llvm/Analysis/EHPersonalities.h"
#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/TargetLowering.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/User.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
#include <utility>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "stack-protector" |
Functions | |
STATISTIC (NumFunProtected, "Number of functions protected") | |
STATISTIC (NumAddrTaken, "Number of local variables that have their address" " taken.") | |
INITIALIZE_PASS_BEGIN (StackProtector, DEBUG_TYPE, "Insert stack protectors", false, true) INITIALIZE_PASS_END(StackProtector | |
static const CallInst * | findStackProtectorIntrinsic (Function &F) |
Search for the first call to the llvm.stackprotector intrinsic and return it if present. More... | |
static Value * | getStackGuard (const TargetLoweringBase *TLI, Module *M, IRBuilder<> &B, bool *SupportsSelectionDAGSP=nullptr) |
Create a stack guard loading and populate whether SelectionDAG SSP is supported. More... | |
static bool | CreatePrologue (Function *F, Module *M, ReturnInst *RI, const TargetLoweringBase *TLI, AllocaInst *&AI) |
Insert code into the entry block that stores the stack guard variable onto the stack: More... | |
Variables | |
static cl::opt< bool > | EnableSelectionDAGSP ("enable-selectiondag-sp", cl::init(true), cl::Hidden) |
DEBUG_TYPE | |
Insert stack | protectors |
Insert stack | false |
#define DEBUG_TYPE "stack-protector" |
Definition at line 53 of file StackProtector.cpp.
|
static |
Insert code into the entry block that stores the stack guard variable onto the stack:
entry: StackGuardSlot = alloca i8* StackGuard = <stack guard> call void @llvm.stackprotector(StackGuard, StackGuardSlot)
Returns true if the platform/triple supports the stackprotectorcreate pseudo node.
Definition at line 417 of file StackProtector.cpp.
References B, F, llvm::Value::getContext(), llvm::Intrinsic::getDeclaration(), llvm::Type::getInt8PtrTy(), getStackGuard(), and M.
Search for the first call to the llvm.stackprotector intrinsic and return it if present.
Definition at line 256 of file StackProtector.cpp.
|
static |
Create a stack guard loading and populate whether SelectionDAG SSP is supported.
Definition at line 382 of file StackProtector.cpp.
References B, llvm::StringRef::empty(), llvm::Intrinsic::getDeclaration(), llvm::TargetLoweringBase::getIRStackGuard(), llvm::TargetLoweringBase::insertSSPDeclarations(), and M.
Referenced by CreatePrologue().
INITIALIZE_PASS_BEGIN | ( | StackProtector | , |
DEBUG_TYPE | , | ||
"Insert stack protectors" | , | ||
false | , | ||
true | |||
) |
DEBUG_TYPE |
Definition at line 72 of file StackProtector.cpp.
Definition at line 73 of file StackProtector.cpp.
Definition at line 73 of file StackProtector.cpp.